Browse Source

Add mvMultRewJacSingle method for DTMCEmbeddedSimple (for Hongyang).

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@5777 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 13 years ago
parent
commit
9373bc0b11
  1. 36
      prism/src/explicit/DTMCEmbeddedSimple.java

36
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<Integer, Double> 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[])
{

Loading…
Cancel
Save