void OnScenarioInferenceUpdated(IScenario scenario)
{
if (scenario.BayesianNetwork != Model.BayesianNetwork)
{
// Old inference result.
return;
}
// Grab a copy of the results.
var marginals = scenario.PosteriorMarginals;
FObservation evidence = scenario.Evidence;
var abbreviations = scenario.Workbench.BayesianNetworkVariableAbbreviations;
Dispatcher.Invoke(delegate
{
// Make sure the scenario still exists by the time this is invoked.
if (!Model.Scenarios.Any(s => s.Id == scenario.Id))
{
return;
}
// Recover scenario id.
int scenarioId = Convert.ToInt32(scenario.Id);
// Update graph inspector with posteriors.
xGraphInspector.SetInferenceResults(
scenario.PosteriorMarginals,
scenarioId,
evidence);
// Update distribution inspectors.
if (Model.SelectedVariable != null && scenario.Id == "1")
{
var selectedVariable
= Model
.BayesianNetwork
.GetVariable(Model.SelectedVariable);
var selectedVariableParents
= selectedVariable
.Parents
.Select(p => Model.BayesianNetwork.GetVariable(p))
.ToList();
DiscreteDistribution distribution;
scenario.PosteriorMarginals.TryGetValue(
Model.SelectedVariable,
out distribution);
xMarginalPosteriorDistributions.SetDistribution(
selectedVariable,
abbreviations,
selectedVariableParents,
distribution);
}
WriteMessage("updating posteriors...");
});
}