Browse Source

Explicit engine reward construction handles model constants properly.

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@3255 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 15 years ago
parent
commit
0728db06cf
  1. 12
      prism/src/explicit/ProbModelChecker.java

12
prism/src/explicit/ProbModelChecker.java

@ -245,7 +245,7 @@ public class ProbModelChecker extends StateModelChecker
} }
// Special case: constant rewards // Special case: constant rewards
if (rewStr.getNumStateItems() == 1 && Expression.isTrue(rewStr.getStates(0)) && rewStr.getReward(0).isConstant()) { if (rewStr.getNumStateItems() == 1 && Expression.isTrue(rewStr.getStates(0)) && rewStr.getReward(0).isConstant()) {
return new MCRewardsStateConstant(rewStr.getReward(0).evaluateDouble());
return new MCRewardsStateConstant(rewStr.getReward(0).evaluateDouble(constantValues));
} }
// Normal: state rewards // Normal: state rewards
else { else {
@ -256,8 +256,8 @@ public class ProbModelChecker extends StateModelChecker
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
guard = rewStr.getStates(i); guard = rewStr.getStates(i);
for (j = 0; j < numStates; j++) { for (j = 0; j < numStates; j++) {
if (guard.evaluateBoolean(statesList.get(j))) {
rewSA.setStateReward(j, rewStr.getReward(i).evaluateDouble(statesList.get(j)));
if (guard.evaluateBoolean(constantValues, statesList.get(j))) {
rewSA.setStateReward(j, rewStr.getReward(i).evaluateDouble(constantValues, statesList.get(j)));
} }
} }
} }
@ -284,7 +284,7 @@ public class ProbModelChecker extends StateModelChecker
// Special case: constant rewards // Special case: constant rewards
// TODO // TODO
/*if (rewStr.getNumStateItems() == 1 && Expression.isTrue(rewStr.getStates(0)) && rewStr.getReward(0).isConstant()) { /*if (rewStr.getNumStateItems() == 1 && Expression.isTrue(rewStr.getStates(0)) && rewStr.getReward(0).isConstant()) {
return new MCRewardsStateConstant(rewStr.getReward(0).evaluateDouble());
return new MCRewardsStateConstant(rewStr.getReward(0).evaluateDouble(constantValues));
}*/ }*/
// Normal: transition rewards // Normal: transition rewards
else { else {
@ -296,12 +296,12 @@ public class ProbModelChecker extends StateModelChecker
guard = rewStr.getStates(i); guard = rewStr.getStates(i);
action = rewStr.getSynch(i); action = rewStr.getSynch(i);
for (j = 0; j < numStates; j++) { for (j = 0; j < numStates; j++) {
if (guard.evaluateBoolean(statesList.get(j))) {
if (guard.evaluateBoolean(constantValues, statesList.get(j))) {
numChoices = mdp.getNumChoices(j); numChoices = mdp.getNumChoices(j);
for (k = 0; k < numChoices; k++) { for (k = 0; k < numChoices; k++) {
mdpAction = mdp.getAction(j, k); mdpAction = mdp.getAction(j, k);
if (mdpAction == null ? (action == null) : mdpAction.equals(action)) { if (mdpAction == null ? (action == null) : mdpAction.equals(action)) {
rewSimple.setTransitionReward(j, k, rewStr.getReward(i).evaluateDouble(statesList.get(j)));
rewSimple.setTransitionReward(j, k, rewStr.getReward(i).evaluateDouble(constantValues, statesList.get(j)));
} }
} }
} }

Loading…
Cancel
Save