From 9373bc0b1189265a21d7fd1c957454eb7af4b2ca Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Mon, 22 Oct 2012 13:50:04 +0000 Subject: [PATCH] Add mvMultRewJacSingle method for DTMCEmbeddedSimple (for Hongyang). git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@5777 bbc10eb1-c90d-0410-af57-cb519fbb1720 --- prism/src/explicit/DTMCEmbeddedSimple.java | 36 ++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/prism/src/explicit/DTMCEmbeddedSimple.java b/prism/src/explicit/DTMCEmbeddedSimple.java index 3e466950..dbaefa78 100644 --- a/prism/src/explicit/DTMCEmbeddedSimple.java +++ b/prism/src/explicit/DTMCEmbeddedSimple.java @@ -313,6 +313,42 @@ public class DTMCEmbeddedSimple extends DTMCExplicit return d; } + //@Override + public double mvMultRewJacSingle(int s, double vect[], MCRewards mcRewards) + { + int k; + double diag, d, er, prob; + Distribution distr; + + distr = ctmc.getTransitions(s); + diag = d = 0.0; + er = exitRates[s]; + // Exit rate 0: prob 1 self-loop + if (er == 0) { + return mcRewards.getStateReward(s); + } + // Exit rate > 0 + else { + // (rew(s) + sum_{j!=s} P(s,j)*vect[j]) / (1-P(s,s)) + // = (rew(s) + sum_{j!=s} (R(s,j)/E(s))*vect[j]) / (1-(P(s,s)/E(s))) + // = (rew(s) + sum_{j!=s} R(s,j)*vect[j]) / (E(s)-P(s,s)) + d = mcRewards.getStateReward(s); + for (Map.Entry e : distr) { + k = (Integer) e.getKey(); + prob = (Double) e.getValue(); + // Non-diagonal entries only + if (k != s) { + d += prob * vect[k]; + } else { + diag = prob; + } + } + d /= (er - diag); + } + + return d; + } + @Override public void vmMult(double vect[], double result[]) {