Exemplo n.º 1
0
        private bool IsIndependent(RandomVariable first, RandomVariable second)
        {
            var probDistribution = _probCalculator.CalculateProbabilityDistribution(new[] { first, second });

            Console.Out.WriteLine($"Variables {first.Name} and {second.Name} distribution: {string.Join(",", probDistribution)}");
            GC.Collect();

            return(AreValuesIndependent(first.TrueProbability, second.TrueProbability, probDistribution[0]) &&
                   AreValuesIndependent(first.TrueProbability, second.TrueProbability.Complement(), probDistribution[1]) &&
                   AreValuesIndependent(first.TrueProbability.Complement(), second.TrueProbability, probDistribution[2]) &&
                   AreValuesIndependent(first.TrueProbability.Complement(), second.TrueProbability.Complement(), probDistribution[3]));
        }
Exemplo n.º 2
0
 private void AddIndependency(RandomVariable first, RandomVariable second, IEnumerable <RandomVariable> conditions = null)
 {
     if (!_conditionalIndependencies.ContainsKey(first, second))
     {
         _conditionalIndependencies[first, second] = new List <ISet <RandomVariable> >();
     }
     if (conditions != null)
     {
         _conditionalIndependencies[first, second].Add(new HashSet <RandomVariable>(conditions));
     }
     else
     {
         _conditionalIndependencies[first, second].Add(new HashSet <RandomVariable>());
     }
 }
Exemplo n.º 3
0
 public ProbabilityDistribution(RandomVariable randomVariable, IList <RandomVariable> conditions, IList <Probability> distribution)
 {
     RandomVariable = randomVariable;
     Conditions     = conditions;
     Distribution   = distribution;
 }
Exemplo n.º 4
0
 /// <summary>
 /// Returns true if there is a meeting left - middle - right and left and right are not adjecent
 /// </summary>
 private bool IsUncoupledMeeting(RandomVariable left, RandomVariable middle, RandomVariable right)
 {
     return(_dag.AreAdjecent(left, middle) && _dag.AreAdjecent(middle, right) && !_dag.AreAdjecent(left, right));
 }
Exemplo n.º 5
0
 /// <summary>
 /// Calculate the conditional probability distribution of a random variable A given condition variables B1,...,Bn
 /// e.g. P(A|B,C) as [ P(a|b,c), P(a|b,!c), P(a|!b,c) P(a|!b!c), ...]
 /// </summary>
 /// <returns>A probability array of the distribution, the iteration order is last condition to first and to the variable</returns>
 public IList <Probability> CalculateConditionalProbabilityDistribution(RandomVariable randomVariable, IList <RandomVariable> conditions)
 {
     return(CalculateConditionalProbabilityDistribution(new List <RandomVariable> {
         randomVariable
     }, conditions));
 }