Exemplo n.º 1
0
        public void SetInferenceResults(
            IDictionary<string, DiscreteDistribution> results,
            int scenarioId,
            FAI.Bayesian.Observation evidence)
        {
            if (scenarioId <= 0)
            {
                throw new ArgumentOutOfRangeException("ScenarioId");
            }

            if (results != null && results.Count != 0)
            {
                foreach (var node in _nodes)
                {
                    FRandomVariable variable = (FRandomVariable)node.Tag;
                    DiscreteDistribution distribution;

                    // See if this variable has a result in the incoming results.
                    if (results.TryGetValue(variable.Name, out distribution))
                    {
                        bool isEvidence = evidence.TryValueForVariable(variable.Name) != null;

                        var slices
                            = distribution
                            .Masses
                            .OrderBy(p => p.Key)
                            .Select(p => p.Value)
                            .ToArray();

                        node.SetSlices(slices, scenarioId, isEvidence);
                    }
                }
            }
            else
            {
                foreach (var node in _nodes)
                {
                    FRandomVariable variable = (FRandomVariable)node.Tag;
                    bool isEvidence
                        = evidence != null
                        && evidence.TryValueForVariable(variable.Name) != null;
                    node.SetSlices(new double[0], scenarioId, isEvidence);
                }
            }
        }