/// <summary> /// Define a relationship. /// </summary> /// <param name="line">The relationship to define.</param> public void DefineRelationship(String line) { var parse = new ParseProbability(this); ParsedProbability parsedProbability = parse.Parse(line); parsedProbability.DefineRelationships(this); }
/// <summary> /// Define the probability for an event. /// </summary> /// <param name="line">The event.</param> /// <param name="probability">The probability.</param> public void DefineProbability(String line, double probability) { var parse = new ParseProbability(this); ParsedProbability parsedProbability = parse.Parse(line); parsedProbability.DefineTruthTable(this, probability); }
/// <summary> /// Perform a query. /// </summary> /// <param name="line">The query.</param> /// <returns>The probability.</returns> public double PerformQuery(String line) { if (Query == null) { throw new BayesianError("This Bayesian network does not have a query to define."); } var parse = new ParseProbability(this); ParsedProbability parsedProbability = parse.Parse(line); // create a temp query IBayesianQuery q = Query.Clone(); // first, mark all events as hidden q.Reset(); // deal with evidence (input) foreach (ParsedEvent parsedEvent in parsedProbability.GivenEvents) { BayesianEvent e = RequireEvent(parsedEvent.Label); q.DefineEventType(e, EventType.Evidence); q.SetEventValue(e, parsedEvent.ResolveValue(e)); } // deal with outcome (output) foreach (ParsedEvent parsedEvent in parsedProbability.BaseEvents) { BayesianEvent e = RequireEvent(parsedEvent.Label); q.DefineEventType(e, EventType.Outcome); q.SetEventValue(e, parsedEvent.ResolveValue(e)); } q.LocateEventTypes(); q.Execute(); return(q.Probability); }