Browse Source

Add -politer switch and auto-switch to explicit engine for MDP methods other than value iteration.

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@6722 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 13 years ago
parent
commit
1cad46ecec
  1. 22
      prism/src/prism/Prism.java
  2. 12
      prism/src/prism/PrismSettings.java

22
prism/src/prism/Prism.java

@ -1741,7 +1741,8 @@ public class Prism implements PrismSettingsListener
case EXPLICIT_FILES:
if (!getExplicit()) {
expf2mtbdd = new ExplicitFiles2MTBDD(this);
currentModel = expf2mtbdd.build(explicitFilesStatesFile, explicitFilesTransFile, explicitFilesLabelsFile, currentModulesFile, explicitFilesNumStates);
currentModel = expf2mtbdd.build(explicitFilesStatesFile, explicitFilesTransFile, explicitFilesLabelsFile, currentModulesFile,
explicitFilesNumStates);
} else {
throw new PrismException("Explicit import not yet supported for explicit engine");
}
@ -2360,6 +2361,8 @@ public class Prism implements PrismSettingsListener
{
Result res = null;
Values definedPFConstants = propertiesFile.getConstantValues();
boolean engineSwitch = false;
int lastEngine = -1;
if (!digital)
mainLog.printSeparator();
@ -2377,6 +2380,17 @@ public class Prism implements PrismSettingsListener
return modelCheckPTA(propertiesFile, prop.getExpression(), definedPFConstants);
}
// Auto-switch engine if required
if (currentModelType == ModelType.MDP) {
if (getMDPSolnMethod() != Prism.MDP_VALITER && !getExplicit()) {
mainLog.printWarning("Switching to explicit engine to allow use of chosen MDP solution method.");
engineSwitch = true;
lastEngine = getEngine();
setEngine(Prism.EXPLICIT);
}
}
try {
// Build model, if necessary
buildModelIfRequired();
@ -2391,6 +2405,12 @@ public class Prism implements PrismSettingsListener
mc.setModulesFileAndPropertiesFile(currentModulesFile, propertiesFile);
res = mc.check(currentModelExpl, prop.getExpression());
}
} finally {
// Undo auto-switch (if any)
if (engineSwitch) {
setEngine(lastEngine);
}
}
// Return result
return res;

12
prism/src/prism/PrismSettings.java

@ -809,6 +809,8 @@ public class PrismSettings implements Observer
set(PRISM_MDP_SOLN_METHOD, "Value iteration");
} else if (sw.equals("politer")) {
set(PRISM_MDP_SOLN_METHOD, "Policy iteration");
} else if (sw.equals("modpoliter")) {
set(PRISM_MDP_SOLN_METHOD, "Modified policy iteration");
} else if (sw.equals("linprog") || sw.equals("lp")) {
set(PRISM_MDP_SOLN_METHOD, "Linear programming");
}
@ -1128,7 +1130,7 @@ public class PrismSettings implements Observer
mainLog.println("-explicit (or -ex) ............. Use the explicit engine");
mainLog.println("-ptamethod <name> .............. Specify PTA engine (games, digital) [default: games]");
mainLog.println();
mainLog.println("NUMERICAL SOLUTION OPTIONS:");
mainLog.println("SOLUTION METHODS (LINEAR EQUATIONS):");
mainLog.println("-power (or -pow, -pwr) ......... Use the Power method for numerical computation");
mainLog.println("-jacobi (or -jac) .............. Use Jacobi for numerical computation [default]");
mainLog.println("-gaussseidel (or -gs) .......... Use Gauss-Seidel for numerical computation");
@ -1140,9 +1142,15 @@ public class PrismSettings implements Observer
mainLog.println("-bsor .......................... Use Backwards SOR for numerical computation");
mainLog.println("-psor .......................... Use Pseudo SOR for numerical computation");
mainLog.println("-bpsor ......................... Use Backwards Pseudo SOR for numerical computation");
mainLog.println("-omega <x> ..................... Set over-relaxation parameter (for JOR/SOR/...) [default: 0.9]");
mainLog.println();
mainLog.println("SOLUTION METHODS (MDPS):");
mainLog.println("-valiter ....................... Use value iteration for solving MDPs [default]");
mainLog.println("-gaussseidel (or -gs) .......... Use Gauss-Seidel value iteration for solving MDPs");
mainLog.println("-politer ....................... Use policy iteration for solving MDPs");
mainLog.println("-omega <x> ..................... Set over-relaxation parameter (for JOR/SOR/...) [default: 0.9]");
mainLog.println("-modpoliter .................... Use modified policy iteration for solving MDPs");
mainLog.println();
mainLog.println("SOLUTION METHOD SETTINGS");
mainLog.println("-relative (or -rel) ............ Use relative error for detecting convergence [default]");
mainLog.println("-absolute (or -abs) ............ Use absolute error for detecting convergence");
mainLog.println("-epsilon <x> (or -e <x>) ....... Set value of epsilon (for convergence check) [default: 1e-6]");

Loading…
Cancel
Save