Browse Source

corrected choice of order in which states were eliminated. The previous approach lead to states always being eliminated in ascending state number order.

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@9513 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Ernst Moritz Hahn 11 years ago
parent
commit
2e0463c231
  1. 26
      prism/src/param/StateEliminator.java

26
prism/src/param/StateEliminator.java

@ -31,6 +31,7 @@ import java.util.Arrays;
import java.util.BitSet; import java.util.BitSet;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
/** /**
@ -225,7 +226,7 @@ final class StateEliminator {
} }
int[] states = new int[pmc.getNumStates()]; int[] states = new int[pmc.getNumStates()];
List<Integer> statesList = new ArrayList<Integer>();
switch (eliminationOrder) { switch (eliminationOrder) {
case ARBITRARY: case ARBITRARY:
for (int state = 0; state < pmc.getNumStates(); state++) { for (int state = 0; state < pmc.getNumStates(); state++) {
@ -237,20 +238,35 @@ final class StateEliminator {
break; break;
case FORWARD_REVERSED: case FORWARD_REVERSED:
states = collectStatesForward(); states = collectStatesForward();
Collections.reverse(Arrays.asList(states));
for (int state = 0; state < pmc.getNumStates(); state++) {
statesList.add(states[state]);
}
Collections.reverse(statesList);
for (int state = 0; state < pmc.getNumStates(); state++) {
states[state] = statesList.get(state);
}
break; break;
case BACKWARD: case BACKWARD:
states = collectStatesBackward(); states = collectStatesBackward();
break; break;
case BACKWARD_REVERSED: case BACKWARD_REVERSED:
states = collectStatesBackward(); states = collectStatesBackward();
Collections.reverse(Arrays.asList(states));
for (int state = 0; state < pmc.getNumStates(); state++) {
statesList.add(states[state]);
}
Collections.reverse(statesList);
for (int state = 0; state < pmc.getNumStates(); state++) {
states[state] = statesList.get(state);
}
break; break;
case RANDOM: case RANDOM:
for (int state = 0; state < pmc.getNumStates(); state++) { for (int state = 0; state < pmc.getNumStates(); state++) {
states[state] = state;
statesList.add(state);
}
Collections.shuffle(statesList);
for (int state = 0; state < pmc.getNumStates(); state++) {
states[state] = statesList.get(state);
} }
Collections.shuffle(Arrays.asList(states));
break; break;
default: default:
throw new RuntimeException("unknown state elimination order"); throw new RuntimeException("unknown state elimination order");

Loading…
Cancel
Save