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);
}
}
}