Exemple #1
0
function main($argc, $argv)
{
    if ($argc < 2 || $argc > 3) {
        usage($argv[0]);
    }
    // Als '-v' is meegegeven tijdens het starten, ga in verbose mode
    if ($argv[1] == '-v') {
        verbose(true);
        $argc--;
        array_shift($argv);
    } else {
        verbose(false);
    }
    // Reader voor de XML-bestanden
    $reader = new KnowledgeBaseReader();
    // Parse een xml-bestand (het eerste argument) tot knowledge base
    $state = $reader->parse($argv[1]);
    // Start de solver, dat ding dat kan infereren
    $solver = new Solver();
    // leid alle goals in de knowledge base af.
    $goals = $state->goals;
    // Begin met de doelen die we hebben op de goal stack te zetten
    foreach ($goals as $goal) {
        $state->goalStack->push($goal->name);
    }
    // Zo lang we nog vragen kunnen stellen, stel ze
    while (($question = $solver->solveAll($state)) instanceof AskedQuestion) {
        $answer = cli_ask($question);
        if ($answer instanceof Option) {
            $state->apply($answer->consequences, Yes::because("User answered '{$answer->description}' to '{$question->description}'"));
        }
    }
    // Geen vragen meer, print de gevonden oplossingen.
    foreach ($goals as $goal) {
        printf("%s: %s\n", $goal->description, $goal->answer($state)->description);
    }
}
Exemple #2
0
<?php

require '../util.php';
require '../solver.php';
$test_description = "Testing a variable in the fact value side in the knowledege state facts dict.";
$rule = new Rule();
$rule->condition = new FactCondition('a', 'c');
$rule->consequences = ['test' => 'passed'];
$rule->inferred_facts->push('test');
$state = new KnowledgeState();
$state->facts = ['a' => '$b', 'b' => 'c'];
$state->rules->push($rule);
$state->goalStack->push('test');
$solver = new Solver();
$solver->solveAll($state);
// The fact that c is true should have been recorded
assert('$state->value("test") == "passed"');