Browse Source

Tidy up POMDP strategy export (via -exportadv).

Either exports in (MDP) .adv format (or belief model) .dot format,
depending on the extension of the filename provided.
accumulation-v4.7
Dave Parker 5 years ago
parent
commit
c1ed8af218
  1. 88
      prism/src/explicit/POMDPModelChecker.java

88
prism/src/explicit/POMDPModelChecker.java

@ -115,7 +115,6 @@ public class POMDPModelChecker extends ProbModelChecker
{ {
ModelCheckerResult res = null; ModelCheckerResult res = null;
long timer; long timer;
String stratFilename = null;
// Check we are only computing for a single state (and use initial state if unspecified) // Check we are only computing for a single state (and use initial state if unspecified)
if (statesOfInterest == null) { if (statesOfInterest == null) {
@ -129,13 +128,8 @@ public class POMDPModelChecker extends ProbModelChecker
timer = System.currentTimeMillis(); timer = System.currentTimeMillis();
mainLog.println("\nStarting probabilistic reachability (" + (min ? "min" : "max") + ")..."); mainLog.println("\nStarting probabilistic reachability (" + (min ? "min" : "max") + ")...");
// If required, create/initialise strategy storage
if (genStrat || exportAdv) {
stratFilename = exportAdvFilename;//"policyGraph.txt";
}
// Compute rewards // Compute rewards
res = computeReachProbsFixedGrid(pomdp, remain, target, min, statesOfInterest.nextSetBit(0), stratFilename);
res = computeReachProbsFixedGrid(pomdp, remain, target, min, statesOfInterest.nextSetBit(0));
// Finished probabilistic reachability // Finished probabilistic reachability
timer = System.currentTimeMillis() - timer; timer = System.currentTimeMillis() - timer;
@ -152,15 +146,13 @@ public class POMDPModelChecker extends ProbModelChecker
* while remaining in those in @{code remain}, * while remaining in those in @{code remain},
* using Lovejoy's fixed-resolution grid approach. * using Lovejoy's fixed-resolution grid approach.
* This only computes the probabiity from a single start state * This only computes the probabiity from a single start state
* Optionally, store optimal (memoryless) strategy info.
* @param pomdp The POMDP * @param pomdp The POMDP
* @param remain Remain in these states (optional: null means "all") * @param remain Remain in these states (optional: null means "all")
* @param target Target states * @param target Target states
* @param min Min or max rewards (true=min, false=max) * @param min Min or max rewards (true=min, false=max)
* @param sInit State to compute for * @param sInit State to compute for
* @param strat Storage for (memoryless) strategy choice indices (ignored if null)
*/ */
protected ModelCheckerResult computeReachProbsFixedGrid(POMDP pomdp, BitSet remain, BitSet target, boolean min, int sInit, String stratFilename) throws PrismException
protected ModelCheckerResult computeReachProbsFixedGrid(POMDP pomdp, BitSet remain, BitSet target, boolean min, int sInit) throws PrismException
{ {
// Start fixed-resolution grid approximation // Start fixed-resolution grid approximation
long timer = System.currentTimeMillis(); long timer = System.currentTimeMillis();
@ -248,19 +240,27 @@ public class POMDPModelChecker extends ProbModelChecker
POMDPStrategyModel psm = buildStrategyModel(pomdp, sInit, null, targetObs, unknownObs, backup); POMDPStrategyModel psm = buildStrategyModel(pomdp, sInit, null, targetObs, unknownObs, backup);
MDP mdp = psm.mdp; MDP mdp = psm.mdp;
mainLog.print("Strategy-induced model: " + mdp.infoString()); mainLog.print("Strategy-induced model: " + mdp.infoString());
// Export?
if (stratFilename != null) {
mdp.exportToPrismExplicitTra(stratFilename);
//mdp.exportToDotFile(stratFilename + ".dot", mdp.getLabelStates("target"));
mdp.exportToDotFile(stratFilename + ".dot", Collections.singleton(new Decorator()
{
@Override
public Decoration decorateState(int state, Decoration d)
// Export strategy if requested
// NB: proper storage of strategy for genStrat not yet supported,
// so just treat it as if -exportadv had been used, with default file (adv.tra)
if (genStrat || exportAdv) {
// Export in Dot format if filename extension is .dot
if (exportAdvFilename.endsWith(".dot")) {
mdp.exportToDotFile(exportAdvFilename, Collections.singleton(new Decorator()
{ {
d.labelAddBelow(psm.beliefs.get(state).toString(pomdp));
return d;
}
}));
@Override
public Decoration decorateState(int state, Decoration d)
{
d.labelAddBelow(psm.beliefs.get(state).toString(pomdp));
return d;
}
}));
}
// Otherwise use .tra format
else {
mdp.exportToPrismExplicitTra(exportAdvFilename);
}
} }
// Create MDP model checker (disable strat generation - if enabled, we want the POMDP one) // Create MDP model checker (disable strat generation - if enabled, we want the POMDP one)
MDPModelChecker mcMDP = new MDPModelChecker(this); MDPModelChecker mcMDP = new MDPModelChecker(this);
@ -317,7 +317,6 @@ public class POMDPModelChecker extends ProbModelChecker
{ {
ModelCheckerResult res = null; ModelCheckerResult res = null;
long timer; long timer;
String stratFilename = null;
// Check we are only computing for a single state (and use initial state if unspecified) // Check we are only computing for a single state (and use initial state if unspecified)
if (statesOfInterest == null) { if (statesOfInterest == null) {
@ -331,13 +330,8 @@ public class POMDPModelChecker extends ProbModelChecker
timer = System.currentTimeMillis(); timer = System.currentTimeMillis();
mainLog.println("\nStarting expected reachability (" + (min ? "min" : "max") + ")..."); mainLog.println("\nStarting expected reachability (" + (min ? "min" : "max") + ")...");
// If required, create/initialise strategy storage
if (genStrat || exportAdv) {
stratFilename = exportAdvFilename;
}
// Compute rewards // Compute rewards
res = computeReachRewardsFixedGrid(pomdp, mdpRewards, target, min, statesOfInterest.nextSetBit(0), stratFilename);
res = computeReachRewardsFixedGrid(pomdp, mdpRewards, target, min, statesOfInterest.nextSetBit(0));
// Finished expected reachability // Finished expected reachability
timer = System.currentTimeMillis() - timer; timer = System.currentTimeMillis() - timer;
@ -351,16 +345,14 @@ public class POMDPModelChecker extends ProbModelChecker
/** /**
* Compute expected reachability rewards using Lovejoy's fixed-resolution grid approach. * Compute expected reachability rewards using Lovejoy's fixed-resolution grid approach.
* This only computes the expected reward from a single start state * This only computes the expected reward from a single start state
* Optionally, store optimal (memoryless) strategy info.
* @param pomdp The POMMDP * @param pomdp The POMMDP
* @param mdpRewards The rewards * @param mdpRewards The rewards
* @param target Target states * @param target Target states
* @param inf States for which reward is infinite * @param inf States for which reward is infinite
* @param min Min or max rewards (true=min, false=max) * @param min Min or max rewards (true=min, false=max)
* @param sInit State to compute for * @param sInit State to compute for
* @param strat Storage for (memoryless) strategy choice indices (ignored if null)
*/ */
protected ModelCheckerResult computeReachRewardsFixedGrid(POMDP pomdp, MDPRewards mdpRewards, BitSet target, boolean min, int sInit, String stratFilename) throws PrismException
protected ModelCheckerResult computeReachRewardsFixedGrid(POMDP pomdp, MDPRewards mdpRewards, BitSet target, boolean min, int sInit) throws PrismException
{ {
// Start fixed-resolution grid approximation // Start fixed-resolution grid approximation
long timer = System.currentTimeMillis(); long timer = System.currentTimeMillis();
@ -442,19 +434,27 @@ public class POMDPModelChecker extends ProbModelChecker
MDP mdp = psm.mdp; MDP mdp = psm.mdp;
MDPRewards mdpRewardsNew = psm.mdpRewards; MDPRewards mdpRewardsNew = psm.mdpRewards;
mainLog.print("Strategy-induced model: " + mdp.infoString()); mainLog.print("Strategy-induced model: " + mdp.infoString());
// Export?
if (stratFilename != null) {
mdp.exportToPrismExplicitTra(stratFilename);
//mdp.exportToDotFile(stratFilename + ".dot", mdp.getLabelStates("target"));
mdp.exportToDotFile(stratFilename + ".dot", Collections.singleton(new Decorator()
{
@Override
public Decoration decorateState(int state, Decoration d)
// Export strategy if requested
// NB: proper storage of strategy for genStrat not yet supported,
// so just treat it as if -exportadv had been used, with default file (adv.tra)
if (genStrat || exportAdv) {
// Export in Dot format if filename extension is .dot
if (exportAdvFilename.endsWith(".dot")) {
mdp.exportToDotFile(exportAdvFilename, Collections.singleton(new Decorator()
{ {
d.labelAddBelow(psm.beliefs.get(state).toString(pomdp));
return d;
}
}));
@Override
public Decoration decorateState(int state, Decoration d)
{
d.labelAddBelow(psm.beliefs.get(state).toString(pomdp));
return d;
}
}));
}
// Otherwise use .tra format
else {
mdp.exportToPrismExplicitTra(exportAdvFilename);
}
} }
// Create MDP model checker (disable strat generation - if enabled, we want the POMDP one) // Create MDP model checker (disable strat generation - if enabled, we want the POMDP one)

Loading…
Cancel
Save