From 018c8c89d5035c3c3ab8c5985c31cc33c404c049 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Mon, 10 Jun 2013 12:12:17 +0000 Subject: [PATCH] Miscellaneous code changes/tidies - trying to align with prism-games a bit. git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@6878 bbc10eb1-c90d-0410-af57-cb519fbb1720 --- prism/src/explicit/MDPSimple.java | 57 ++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/prism/src/explicit/MDPSimple.java b/prism/src/explicit/MDPSimple.java index 73d8c893..fc2ac257 100644 --- a/prism/src/explicit/MDPSimple.java +++ b/prism/src/explicit/MDPSimple.java @@ -27,13 +27,21 @@ package explicit; -import java.util.*; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.util.ArrayList; +import java.util.BitSet; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; -import java.io.*; -import explicit.rewards.MDPRewards; import prism.PrismException; import prism.PrismUtils; +import explicit.rewards.MDPRewards; /** * Simple explicit-state representation of an MDP. @@ -168,6 +176,47 @@ public class MDPSimple extends MDPExplicit implements ModelSimple maxNumDistrsOk = mdp.maxNumDistrsOk; } + /** + * Construct an MDPSimple object from an MDPSparse one. + */ + public MDPSimple(MDPSparse mdp) + { + this(mdp.numStates); + copyFrom(mdp); + // Copy storage directly to avoid worrying about duplicate distributions (and for efficiency) + for (int s = 0; s < numStates; s++) { + for (int c = 0; c < mdp.getNumChoices(s); c++) { + Distribution distr = new Distribution(); + Iterator> it = mdp.getTransitionsIterator(s, c); + while (it.hasNext()) { + Entry entry = it.next(); + distr.add(entry.getKey(), entry.getValue()); + } + this.addChoice(s, distr); + } + } + + if (mdp.actions != null) { + actions = new ArrayList>(numStates); + for (int s = 0; s < numStates; s++) + actions.add(null); + for (int s = 0; s < numStates; s++) { + int n = mdp.getNumChoices(s); + List list = new ArrayList(n); + for (int i = 0; i < n; i++) { + list.add(mdp.getAction(s, i)); + } + actions.set(s, list); + } + } + // Copy flags/stats too + allowDupes = false; // TODO check this + numDistrs = mdp.numDistrs; + numTransitions = mdp.numTransitions; + maxNumDistrs = mdp.maxNumDistrs; + maxNumDistrsOk = true; // TODO not sure + } + // Mutators (for ModelSimple) @Override @@ -400,7 +449,7 @@ public class MDPSimple extends MDPExplicit implements ModelSimple } return succs.iterator(); } - + @Override public boolean isSuccessor(int s1, int s2) {