Exemple #1
0
        /// <summary>
        /// Returns the probability for the given random variables. If it is not present yet, it is calculated first.
        /// All access to _probs should be through this method!
        /// </summary>
        /// <param name="variables">random variables for the distribution</param>
        /// <returns></returns>
        private Probability GetProbability(ICollection <RandomVariable> variables)
        {
            var index = SubsetUtils.GetIndex(variables, _randomVariables);

            if (!_probs.ContainsKey(index))
            {
                _probs[index] = CalculateProbability(variables.ToList());
                if (!string.IsNullOrWhiteSpace(_config.ProbabilitySerializationFilePath))
                {
                    SerializeCurrentProbabilities();
                }
            }
            return(_probs[index]);
        }
Exemple #2
0
 private void DeserializeProbabilities()
 {
     using (var file = File.OpenText(_config.ProbabilityDeserializationFilePath))
     {
         var serializer = new JsonSerializer();
         var probs      = (ProbabilitySerialization)serializer.Deserialize(file, typeof(ProbabilitySerialization));
         foreach (var keyValuePair in probs.Probs)
         {
             var storedIndex           = keyValuePair.Key;
             var storedRandomVariables = SubsetUtils.FromIndex(probs.RandomVariables, storedIndex);
             var realRandomVariables   = _randomVariables.Where(rvar => storedRandomVariables.Contains(rvar.Name)).ToList();
             _probs[SubsetUtils.GetIndex(realRandomVariables, _randomVariables)] = keyValuePair.Value;
             if (realRandomVariables.Count == 1)
             {
                 realRandomVariables[0].Probability = new[] { keyValuePair.Value, keyValuePair.Value.Complement() };
             }
         }
     }
 }
Exemple #3
0
 /// <summary>
 /// Calculates all probability distributions of all subsets of the random variables.
 /// Use with caution!
 /// </summary>
 public void CalculateTrueProbabilities()
 {
     // Iterate through all 2^n random variables
     for (var i = 1; i < (1 << _randomVariables.Count); i++)
     {
         var currentVars = new HashSet <RandomVariable>();
         for (var j = 0; j < _randomVariables.Count; j++)
         {
             // is the jth random variable present in the current subset?
             // it is, if there is a 1 at the jth bit from the right side
             // so 'and' i and 2^j and test if the result is greater than zero
             if ((i & (1 << j)) > 0)
             {
                 currentVars.Add(_randomVariables[j]);
             }
         }
         _probs[SubsetUtils.GetIndex(currentVars, _randomVariables)] = CalculateProbability(currentVars.ToList());
     }
     WriteProbsToConsole();
 }