diff --git a/prism/src/param/StateEliminator.java b/prism/src/param/StateEliminator.java index 6802d52e..76dfb93d 100644 --- a/prism/src/param/StateEliminator.java +++ b/prism/src/param/StateEliminator.java @@ -31,6 +31,7 @@ import java.util.Arrays; import java.util.BitSet; import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.ListIterator; /** @@ -225,7 +226,7 @@ final class StateEliminator { } int[] states = new int[pmc.getNumStates()]; - + List statesList = new ArrayList(); switch (eliminationOrder) { case ARBITRARY: for (int state = 0; state < pmc.getNumStates(); state++) { @@ -237,20 +238,35 @@ final class StateEliminator { break; case FORWARD_REVERSED: 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; case BACKWARD: states = collectStatesBackward(); break; case BACKWARD_REVERSED: 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; case RANDOM: 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; default: throw new RuntimeException("unknown state elimination order");