@Override public DTMCSimple buildEmbeddedDTMC() { DTMCSimple dtmc; Distribution distr; int i; double d; dtmc = new DTMCSimple(numStates); for (int in : getInitialStates()) { dtmc.addInitialState(in); } 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<Integer, Double> e : distr) { dtmc.setProbability(i, e.getKey(), e.getValue() / d); } } } return dtmc; }
@Override public DTMCSimple buildUniformisedDTMC(double q) { DTMCSimple dtmc; Distribution distr; int i; double d; dtmc = new DTMCSimple(numStates); for (int in : getInitialStates()) { dtmc.addInitialState(in); } for (i = 0; i < numStates; i++) { // Add scaled off-diagonal entries distr = trans.get(i); for (Map.Entry<Integer, Double> e : distr) { dtmc.setProbability(i, e.getKey(), e.getValue() / q); } // Add diagonal, if needed d = distr.sumAllBut(i); if (d < q) { dtmc.setProbability(i, i, 1 - (d / q)); } } return dtmc; }