/** * Perform a query. * * @param line The query. * @return The probability. */ public double performQuery(String line) { if (this.query == null) { throw new BayesianError("This Bayesian network does not have a query to define."); } ParseProbability parse = new ParseProbability(this); ParsedProbability parsedProbability = parse.parse(line); // create a temp query BayesianQuery q = this.query.clone(); // first, mark all events as hidden q.reset(); // deal with evidence (input) for (ParsedEvent parsedEvent : parsedProbability.getGivenEvents()) { BayesianEvent event = this.requireEvent(parsedEvent.getLabel()); q.defineEventType(event, EventType.Evidence); q.setEventValue(event, parsedEvent.resolveValue(event)); } // deal with outcome (output) for (ParsedEvent parsedEvent : parsedProbability.getBaseEvents()) { BayesianEvent event = requireEvent(parsedEvent.getLabel()); q.defineEventType(event, EventType.Outcome); q.setEventValue(event, parsedEvent.resolveValue(event)); } q.locateEventTypes(); q.execute(); return q.getProbability(); }
/** * Define a relationship. * * @param line The relationship to define. */ public void defineRelationship(String line) { ParseProbability parse = new ParseProbability(this); ParsedProbability parsedProbability = parse.parse(line); parsedProbability.defineRelationships(this); }
/** * Define the probability for an event. * * @param line The event. * @param probability The probability. */ public void defineProbability(String line, double probability) { ParseProbability parse = new ParseProbability(this); ParsedProbability parsedProbability = parse.parse(line); parsedProbability.defineTruthTable(this, probability); }