public UnderlyingDigraph(LabeledTransitionMarkovChain markovChain) { // Assumption "every node is reachable" is fulfilled due to the construction // Except maybe the stuttering state _transitionTargetNo = markovChain.Transitions; _stateNo = markovChain.SourceStates.Count; _baseGraph = new BidirectionalGraph(); var enumerator = markovChain.GetInitialDistributionEnumerator(); AddStatesFromEnumerator(null, enumerator); foreach (var sourceState in markovChain.SourceStates) { enumerator = markovChain.GetTransitionEnumerator(sourceState); markovChain.GetTransitionEnumerator(sourceState); AddStatesFromEnumerator(sourceState, enumerator); } }
public void ConvertTransitions(LabeledTransitionMarkovChain ltmc) { for (var i = 0; i < States; i++) { var sourceEntry = _backMapper[i]; MarkovChain.StartWithNewDistribution(i); var enumerator = ltmc.GetTransitionEnumerator(sourceEntry.StateStorageState); while (enumerator.MoveNext()) { var targetEntry = new StateStorageEntry(enumerator.CurrentFormulas, enumerator.CurrentTargetState); var targetState = _mapper[targetEntry]; MarkovChain.AddTransition(targetState, enumerator.CurrentProbability); } MarkovChain.FinishDistribution(); } }
public static void ExportToGv(this LabeledTransitionMarkovChain markovChain, TextWriter sb) { sb.WriteLine("digraph S {"); //sb.WriteLine("size = \"8,5\""); sb.WriteLine("node [shape=box];"); var initialStateName = "initialState"; sb.WriteLine($" {initialStateName} [shape=point,width=0.0,height=0.0,label=\"\"];"); var initialDistribution = markovChain.GetInitialDistributionEnumerator(); ExportDistribution(markovChain, sb, initialStateName, initialDistribution); foreach (var state in markovChain.SourceStates) { sb.Write($" {state} [label=\"{state}"); sb.WriteLine("\"];"); var distribution = markovChain.GetTransitionEnumerator(state); ExportDistribution(markovChain, sb, state.ToString(), distribution); } sb.WriteLine("}"); }