Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
        }