From 24f7d04d702b57f8fac57d8049c1b9e57f63f689 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Fri, 23 Oct 2009 12:59:34 +0000 Subject: [PATCH] Method to build embedded DTMC. git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@1543 bbc10eb1-c90d-0410-af57-cb519fbb1720 --- prism/src/explicit/CTMC.java | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/prism/src/explicit/CTMC.java b/prism/src/explicit/CTMC.java index 180f7fc8..7e0deb3d 100644 --- a/prism/src/explicit/CTMC.java +++ b/prism/src/explicit/CTMC.java @@ -26,6 +26,8 @@ package explicit; +import java.util.Map; + import prism.ModelType; /** @@ -35,10 +37,34 @@ public class CTMC extends DTMC { // Model type public static ModelType modelType = ModelType.CTMC; - + // Uniformisation rate used to build CTMC/CTMDP public double unif; - + + /** + * Build the embedded DTMC for this CTMC + */ + public DTMC buildEmbeddedDTMC() + { + DTMC dtmc; + Distribution distr; + int i; + double d; + dtmc = new DTMC(numStates); + for (i = 0; i < numStates; i++) { + distr = trans.get(i); + d = distr.sum(); + if (d == 0) { + dtmc.setProbability(i, i, 1.0); + } else { + for (Map.Entry e : distr) { + dtmc.setProbability(i, e.getKey(), e.getValue() / d); + } + } + } + return dtmc; + } + /** * Uniformise. * @param unif: Unifomisation rate @@ -53,7 +79,7 @@ public class CTMC extends DTMC } this.unif = unif; } - + /** * Uniformise with an appropriate rate. */ @@ -61,7 +87,7 @@ public class CTMC extends DTMC { uniformise(1.02 * maxExitRate()); } - + /** * Compute the maximum exit rate. */