/// <summary> /// For the List of Arc Calculate the Conjunctive value (min) /// </summary> /// <param name="voArcs">List of Arc</param> /// <returns>Calculated Lambda</returns> public float CalculateCombinedConjunctive(BeliefNode voBeliefNode, Arcs voArcs) { float fValue = float.MaxValue; if (voArcs.InnerArcs != null) { foreach (Arcs arcs in voArcs.InnerArcs) { float fTest = EvaluateArcExpression(voBeliefNode, arcs); fValue = (fValue <= fTest ? fValue : fTest); } } foreach (Arc arc in voArcs.ArcList) { float fTest = CalculateEffectiveArcLambda(voBeliefNode, arc); fValue = (fValue <= fTest ? fValue : fTest); } return fValue; }
/// <summary> /// Construct the Belief Node given the input Xml /// </summary> /// <param name="vsXml">Xml Data</param> public BeliefNode(string vsXml) { XmlTextReader reader = new XmlTextReader(new StringReader(vsXml)); reader.Read(); Name = reader.GetAttribute("name"); PriorProbability = float.Parse(reader.GetAttribute("priorprob")); CurrentProbability = float.Parse(reader.GetAttribute("currentprob")); while(reader.Read()) { switch (reader.Name) { case "Arcs" : moArcs = new Arcs(reader.ReadOuterXml()); break; } } }
/// <summary> /// For a single Arc, this evalulate the expressions /// </summary> /// <param name="voArcs">Arcs</param> /// <returns>Arc Expression</returns> public float EvaluateArcExpression(BeliefNode voBeliefNode, Arcs voArcs) { switch (voArcs.ArcType) { case EnumArcType.Independent : return CalculateCombinedIndependent(voBeliefNode, voArcs); case EnumArcType.Conjunctive: return CalculateCombinedConjunctive(voBeliefNode, voArcs); case EnumArcType.Disjunctive : return CalculateCombinedDisjunctive(voBeliefNode, voArcs); default: throw new Exception(string.Format("Invalid arc type {0}",voArcs.ArcType.ToString())); } }
/// <summary> /// For the List of Arc Calculate the Combined Independent value /// </summary> /// <param name="voArcs">List of Arc</param> /// <returns>Calculated Lambda</returns> public float CalculateCombinedIndependent(BeliefNode voBeliefNode, Arcs voArcs) { float fCombined = 1.0f; if (voArcs.InnerArcs != null) { foreach (Arcs arcs in voArcs.InnerArcs) { fCombined *= EvaluateArcExpression(voBeliefNode, arcs); } } foreach (Arc arc in voArcs.ArcList) { fCombined *= CalculateEffectiveArcLambda(voBeliefNode, arc); } return fCombined; }