Browse Source

Bug fix in simulator: in DTMCs with local nondeterminism, random transitions can be wrongly chosen due to the distributions not being normalised.

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@9352 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 11 years ago
parent
commit
2690b87ff5
  1. 10
      prism/src/simulator/SimulatorEngine.java
  2. 7
      prism/src/simulator/TransitionList.java

10
prism/src/simulator/SimulatorEngine.java

@ -299,8 +299,16 @@ public class SimulatorEngine extends PrismComponent
return false;
//throw new PrismException("Deadlock found at state " + path.getCurrentState().toString(modulesFile));
TransitionList.Ref ref;
switch (modelType) {
case DTMC:
// Pick a random number to determine choice/transition
d = rng.randomUnifDouble();
ref = transitions.new Ref();
transitions.getChoiceIndexByProbabilitySum(d, ref);
// Execute
executeTransition(ref.i, ref.offset, -1);
break;
case MDP:
// Pick a random choice
i = rng.randomUnifInt(numChoices);
@ -316,7 +324,7 @@ public class SimulatorEngine extends PrismComponent
r = transitions.getProbabilitySum();
// Pick a random number to determine choice/transition
d = rng.randomUnifDouble(r);
TransitionList.Ref ref = transitions.new Ref();
ref = transitions.new Ref();
transitions.getChoiceIndexByProbabilitySum(d, ref);
// Execute
executeTimedTransition(ref.i, ref.offset, rng.randomExpDouble(r), -1);

7
prism/src/simulator/TransitionList.java

@ -158,10 +158,9 @@ public class TransitionList
// Random selection of a choice
/**
* Get a reference to a transition according to a total probability (rate) sum, x.
* i.e.the first transition for which the sum of probabilities of that and all prior
* transitions (across all choices) exceeds x. Really, this is designed for the case
* where these are rates, rather than probabilities.
* Get a reference to a transition according to a total probability (or rate) sum, x.
* i.e.the first transition for which the sum of probabilities/rates of that and all prior
* transitions (across all choices) exceeds x.
* @param x Probability (or rate) sum
* @param ref Empty transition reference to store result
*/

Loading…
Cancel
Save