public void UpdateOutcomes() { Node[] parents = Parents.ToArray(); string[] parentNames = new string[0]; string[][] outcomes = new string[0][]; foreach (Node parent in parents) { Array.Resize(ref parentNames, parentNames.Length + 1); parentNames[parentNames.Length - 1] = parent.Name; Array.Resize(ref outcomes, outcomes.Length + 1); outcomes[outcomes.Length - 1] = parent.Definitions; } var conditionCombinations = CartesianCompute.CartesianProduct(outcomes); HashSet <ValueOutcome> values = new HashSet <ValueOutcome>(); if (conditionCombinations != null && conditionCombinations.Count() > 0) { foreach (var comb in conditionCombinations) { string[] combArr = comb.ToArray(); ValueOutcome value = new ValueOutcome(combArr.ToArray(), parents, 0); Console.WriteLine("ValueOutcome: " + value.ToString()); values.Add(value); } } this.outcomes = values.ToArray(); }
public void UpdateProbabilities() { Node[] parents = Parents.ToArray(); string[] parentNames = new string[0]; string[][] outcomes = new string[][] { Definitions }; bool hasEventParent = false; foreach (Node parent in parents) { if (parent.Type == NodeType.Event) { hasEventParent = true; } Array.Resize(ref parentNames, parentNames.Length + 1); parentNames[parentNames.Length - 1] = parent.Name; Array.Resize(ref outcomes, outcomes.Length + 1); outcomes[outcomes.Length - 1] = parent.Definitions; } var conditionCombinations = CartesianCompute.CartesianProduct(outcomes); HashSet <Probability> probs = new HashSet <Probability>(); foreach (var comb in conditionCombinations) { string[] combArr = comb.ToArray(); Probability prob = null; if (hasEventParent) { prob = new Probability(new string[] { combArr[0] }, new Node[] { owner }, combArr.Skip(1).ToArray(), parents); } else { prob = new Probability(combArr, new Node[] { owner }.Concat(parents).ToArray(), new string[0], new Node[0]); } Console.WriteLine("Probability: " + prob.ToString()); probs.Add(prob); } probabilities = probs.ToArray(); }