|
|
|
@ -502,8 +502,16 @@ public class ProbModelChecker extends NonProbModelChecker |
|
|
|
StateValues probs = null; |
|
|
|
|
|
|
|
expr = Expression.convertSimplePathFormulaToCanonicalForm(expr); |
|
|
|
|
|
|
|
// Negation |
|
|
|
ExpressionTemporal exprTemp = Expression.getTemporalOperatorForSimplePathFormula(expr); |
|
|
|
if (exprTemp.getBounds().hasRewardBounds()) { |
|
|
|
throw new PrismException("Reward bounds are currently not supported with the symbolic engine"); |
|
|
|
} |
|
|
|
|
|
|
|
if (exprTemp.getBounds().countTimeBoundsDiscrete() > 1) { |
|
|
|
throw new PrismException("Multiple time / step bounds are currently not supported with the symbolic engine"); |
|
|
|
} |
|
|
|
|
|
|
|
// Negation |
|
|
|
if (expr instanceof ExpressionUnaryOp && |
|
|
|
((ExpressionUnaryOp)expr).getOperator() == ExpressionUnaryOp.NOT) { |
|
|
|
negated = true; |
|
|
|
@ -511,7 +519,7 @@ public class ProbModelChecker extends NonProbModelChecker |
|
|
|
} |
|
|
|
|
|
|
|
if (expr instanceof ExpressionTemporal) { |
|
|
|
ExpressionTemporal exprTemp = (ExpressionTemporal) expr; |
|
|
|
exprTemp = (ExpressionTemporal) expr; |
|
|
|
// Next |
|
|
|
if (exprTemp.getOperator() == ExpressionTemporal.P_X) { |
|
|
|
probs = checkProbNext(exprTemp, statesOfInterest); |
|
|
|
@ -828,6 +836,10 @@ public class ProbModelChecker extends NonProbModelChecker |
|
|
|
{ |
|
|
|
int time; // time |
|
|
|
StateValues rewards = null; |
|
|
|
|
|
|
|
if (expr.getBounds().hasRewardBounds()) { |
|
|
|
throw new PrismException("Cumulative reward operator does not support reward bounds"); |
|
|
|
} |
|
|
|
|
|
|
|
// currently, ignore statesOfInterest |
|
|
|
JDD.Deref(statesOfInterest); |
|
|
|
@ -887,6 +899,10 @@ public class ProbModelChecker extends NonProbModelChecker |
|
|
|
// currently, we ignore statesOfInterest |
|
|
|
JDD.Deref(statesOfInterest); |
|
|
|
|
|
|
|
if (expr.getBounds().hasRewardBounds()) { |
|
|
|
throw new PrismException("Instantaneous reward operator does not support reward bounds"); |
|
|
|
} |
|
|
|
|
|
|
|
// get info from inst reward |
|
|
|
time = expr.getBounds().getStepBoundForDiscreteTime().getUpperBound().evaluateInt(constantValues); |
|
|
|
if (time < 0) { |
|
|
|
@ -970,6 +986,12 @@ public class ProbModelChecker extends NonProbModelChecker |
|
|
|
ProbModelChecker mcProduct; |
|
|
|
long l; |
|
|
|
|
|
|
|
|
|
|
|
if (Expression.containsTemporalRewardBounds(expr)) { |
|
|
|
JDD.Deref(statesOfInterest); |
|
|
|
throw new PrismException("Can not handle reward bounds via deterministic automata."); |
|
|
|
} |
|
|
|
|
|
|
|
if (Expression.containsTemporalTimeBounds(expr)) { |
|
|
|
if (model.getModelType().continuousTime()) { |
|
|
|
JDD.Deref(statesOfInterest); |
|
|
|
|