|
|
|
@ -49,6 +49,8 @@ public class ProbModelChecker extends StateModelChecker |
|
|
|
|
|
|
|
// Method used to solve linear equation systems |
|
|
|
protected LinEqMethod linEqMethod = LinEqMethod.GAUSS_SEIDEL; |
|
|
|
// Method used to solve MDPs |
|
|
|
protected MDPSolnMethod mdpSolnMethod = MDPSolnMethod.GAUSS_SEIDEL; |
|
|
|
// Iterative numerical method termination criteria |
|
|
|
protected TermCrit termCrit = TermCrit.RELATIVE; |
|
|
|
// Parameter for iterative numerical method termination criteria |
|
|
|
@ -95,6 +97,28 @@ public class ProbModelChecker extends StateModelChecker |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// Method used for solving MDPs |
|
|
|
public enum MDPSolnMethod { |
|
|
|
VALUE_ITERATION, GAUSS_SEIDEL, POLICY_ITERATION, MODIFIED_POLICY_ITERATION, LINEAR_PROGRAMMING; |
|
|
|
public String fullName() |
|
|
|
{ |
|
|
|
switch (this) { |
|
|
|
case VALUE_ITERATION: |
|
|
|
return "Value iteration"; |
|
|
|
case GAUSS_SEIDEL: |
|
|
|
return "Gauss-Seidel"; |
|
|
|
case POLICY_ITERATION: |
|
|
|
return "Policy iteration"; |
|
|
|
case MODIFIED_POLICY_ITERATION: |
|
|
|
return "Modified policy iteration"; |
|
|
|
case LINEAR_PROGRAMMING: |
|
|
|
return "Linear programming"; |
|
|
|
default: |
|
|
|
return this.toString(); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// Iterative numerical method termination criteria |
|
|
|
public enum TermCrit { |
|
|
|
ABSOLUTE, RELATIVE |
|
|
|
@ -107,7 +131,7 @@ public class ProbModelChecker extends StateModelChecker |
|
|
|
|
|
|
|
// Method used for numerical solution |
|
|
|
public enum SolnMethod { |
|
|
|
VALUE_ITERATION, GAUSS_SEIDEL, POLICY_ITERATION, MODIFIED_POLICY_ITERATION |
|
|
|
VALUE_ITERATION, GAUSS_SEIDEL, POLICY_ITERATION, MODIFIED_POLICY_ITERATION, LINEAR_PROGRAMMING |
|
|
|
}; |
|
|
|
|
|
|
|
// Settings methods |
|
|
|
@ -137,6 +161,21 @@ public class ProbModelChecker extends StateModelChecker |
|
|
|
} else { |
|
|
|
throw new PrismException("Explicit engine does not support linear equation solution method \"" + s + "\""); |
|
|
|
} |
|
|
|
// PRISM_MDP_SOLN_METHOD |
|
|
|
s = settings.getString(PrismSettings.PRISM_MDP_SOLN_METHOD); |
|
|
|
if (s.equals("Value iteration")) { |
|
|
|
setSolnMethod(SolnMethod.VALUE_ITERATION); |
|
|
|
} else if (s.equals("Gauss-Seidel")) { |
|
|
|
setSolnMethod(SolnMethod.GAUSS_SEIDEL); |
|
|
|
} else if (s.equals("Policy iteration")) { |
|
|
|
setSolnMethod(SolnMethod.POLICY_ITERATION); |
|
|
|
} else if (s.equals("Modified policy iteration")) { |
|
|
|
setSolnMethod(SolnMethod.MODIFIED_POLICY_ITERATION); |
|
|
|
} else if (s.equals("Linear programming")) { |
|
|
|
setSolnMethod(SolnMethod.LINEAR_PROGRAMMING); |
|
|
|
} else { |
|
|
|
throw new PrismException("Explicit engine does not support MDP solution method \"" + s + "\""); |
|
|
|
} |
|
|
|
|
|
|
|
s = settings.getString(PrismSettings.PRISM_TERM_CRIT); |
|
|
|
if (s.equals("Absolute")) { |
|
|
|
@ -150,16 +189,6 @@ public class ProbModelChecker extends StateModelChecker |
|
|
|
setProb0(settings.getBoolean(PrismSettings.PRISM_PROB0)); |
|
|
|
setProb1(settings.getBoolean(PrismSettings.PRISM_PROB1)); |
|
|
|
// valiterdir |
|
|
|
s = settings.getString(PrismSettings.PRISM_MDP_SOLN_METHOD); |
|
|
|
if (s.equals("Gauss-Seidel")) { |
|
|
|
setSolnMethod(SolnMethod.GAUSS_SEIDEL); |
|
|
|
} else if (s.equals("Policy iteration")) { |
|
|
|
setSolnMethod(SolnMethod.POLICY_ITERATION); |
|
|
|
} else if (s.equals("Modified policy iteration")) { |
|
|
|
setSolnMethod(SolnMethod.MODIFIED_POLICY_ITERATION); |
|
|
|
} else { |
|
|
|
setSolnMethod(SolnMethod.VALUE_ITERATION); |
|
|
|
} |
|
|
|
s = settings.getString(PrismSettings.PRISM_EXPORT_ADV); |
|
|
|
if (!(s.equals("None"))) |
|
|
|
exportAdv = true; |
|
|
|
@ -189,6 +218,7 @@ public class ProbModelChecker extends StateModelChecker |
|
|
|
{ |
|
|
|
super.printSettings(); |
|
|
|
mainLog.print("linEqMethod = " + linEqMethod + " "); |
|
|
|
mainLog.print("mdpSolnMethod = " + mdpSolnMethod + " "); |
|
|
|
mainLog.print("termCrit = " + termCrit + " "); |
|
|
|
mainLog.print("termCritParam = " + termCritParam + " "); |
|
|
|
mainLog.print("maxIters = " + maxIters + " "); |
|
|
|
@ -217,6 +247,14 @@ public class ProbModelChecker extends StateModelChecker |
|
|
|
this.linEqMethod = linEqMethod; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Set method used to solve MDPs. |
|
|
|
*/ |
|
|
|
public void setMDPSolnMethod(MDPSolnMethod mdpSolnMethod) |
|
|
|
{ |
|
|
|
this.mdpSolnMethod = mdpSolnMethod; |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* Set termination criteria type for numerical iterative methods. |
|
|
|
*/ |
|
|
|
@ -293,6 +331,11 @@ public class ProbModelChecker extends StateModelChecker |
|
|
|
return linEqMethod; |
|
|
|
} |
|
|
|
|
|
|
|
public MDPSolnMethod getMDPSolnMethod() |
|
|
|
{ |
|
|
|
return mdpSolnMethod; |
|
|
|
} |
|
|
|
|
|
|
|
public TermCrit getTermCrit() |
|
|
|
{ |
|
|
|
return termCrit; |
|
|
|
|