示例#1
0
        private static void ExportCid(NestedMarkovDecisionProcess nmdp, TextWriter sb, string fromNode, long currentCid)
        {
            NestedMarkovDecisionProcess.ContinuationGraphElement cge = nmdp.GetContinuationGraphElement(currentCid);
            if (cge.IsChoiceTypeUnsplitOrFinal)
            {
                var cgl = nmdp.GetContinuationGraphLeaf(currentCid);
                sb.WriteLine($" {fromNode} -> {cgl.ToState} [label=\"{Probability.PrettyPrint(cgl.Probability)}\"];");
            }
            else if (cge.IsChoiceTypeDeterministic)
            {
                // only forward node (no recursion)
                var cgi    = nmdp.GetContinuationGraphInnerNode(currentCid);
                var toNode = $"cid{cgi.ToCid}";
                sb.WriteLine($" {fromNode}->{toNode} [ style =\"dashed\"];");
            }
            else
            {
                var cgi       = nmdp.GetContinuationGraphInnerNode(currentCid);
                var arrowhead = "normal";
                if (cge.IsChoiceTypeProbabilitstic)
                {
                    arrowhead = "onormal";
                }

                for (var i = cgi.FromCid; i <= cgi.ToCid; i++)
                {
                    var toNode = $"cid{i}";
                    sb.WriteLine($" {toNode} [ shape=point,width=0.1,height=0.1,label=\"\" ];");
                    sb.WriteLine($" {fromNode}->{toNode} [ arrowhead =\"{arrowhead}\"];");
                    ExportCid(nmdp, sb, toNode, i);
                }
            }
        }
示例#2
0
 private double CalculateMinimumProbabilityOfCid(double[] stateProbabilities, long currentCid)
 {
     NestedMarkovDecisionProcess.ContinuationGraphElement cge = Nmdp.GetContinuationGraphElement(currentCid);
     if (cge.IsChoiceTypeUnsplitOrFinal)
     {
         var cgl = Nmdp.GetContinuationGraphLeaf(currentCid);
         var transitionProbability  = cgl.Probability;
         var targetStateProbability = stateProbabilities[cgl.ToState];
         var probabilityToSatisfyStateWithThisTransition = transitionProbability * targetStateProbability;
         return(probabilityToSatisfyStateWithThisTransition);
     }
     else
     {
         var cgi = Nmdp.GetContinuationGraphInnerNode(currentCid);
         if (cge.IsChoiceTypeDeterministic)
         {
             return(CalculateMinimumProbabilityOfCid(stateProbabilities, cgi.FromCid));
         }
         if (cge.IsChoiceTypeNondeterministic)
         {
             var smallest = double.PositiveInfinity;
             for (var i = cgi.FromCid; i <= cgi.ToCid; i++)
             {
                 var resultOfChild = CalculateMinimumProbabilityOfCid(stateProbabilities, i);
                 if (resultOfChild < smallest)
                 {
                     smallest = resultOfChild;
                 }
             }
             return(smallest);
         }
         else if (cge.IsChoiceTypeProbabilitstic)
         {
             var sum = 0.0;
             for (var i = cgi.FromCid; i <= cgi.ToCid; i++)
             {
                 var resultOfChild = CalculateMinimumProbabilityOfCid(stateProbabilities, i);
                 sum += resultOfChild;
             }
             return(sum);
         }
     }
     return(double.NaN);
 }