Beispiel #1
0
            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);
                }
            }
Beispiel #2
0
        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();
            }
        }
Beispiel #3
0
        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("}");
        }