Процедура explore

Основой командного интерпретатора является процедура explore; Goal, Trace, Answer)

Эта процедура находит в стиле обратного логического вывода ответ Answer на указанный вопрос Goal с использованием принципов, описанных в разделе 16.2.2. Для этого она находит Goal как факт в базе знаний, или применяет к базе знаний некоторое правило, или запрашивает пользователя, или обрабатывает Goal как ком­бинацию подцелей, соединенную операторами AND или OR

366 Часть II. Применение языка Prolog в области искусственного интеллекта


• Назначение и структура параметров этой процедуры описаны ниже.

• Goal. Это - рассматриваемый вопрос, представленный в виде комбинации простых высказываний, связанных операторами AND/OR, например, следую­щим образом:

(X has feathers) or {X flies} and (X lays eggs)

• Trace. Это — цепочка дочерних целей и правил, соединяющая текущую цель
Goal с первоначальной целью верхнего уровня и представленная как список
элементов в форме:

Goal by Rule Это означает, что выполнена проверка цели Goal с помощью правила Rule. На­пример, допустим, что целью верхнего уровня является "peter isa tiger" (Питер - тигр), а проверяемой в данный момент целью является "peter eats meat" (Питер питается мясом). Соответствующая трассировка, сформированная со­гласно базе знаний, которая приведена в листинге 16.1, показана ниже. t (peter isa carnivore) by rule3, (peter isa tiger) by rule5 ]

Эта трассировка означает следующее.

• Я могу использовать правило "peter eats meat", чтобы проверить с помо­щью правила rule3 истинность высказывания "peter isa carnivore" (Питер — плотоядное животное). Кроме того, я могу использовать высказыва­ние "peter isa carnivore", чтобы проверить с помощью правила ruleS ис­тинность высказывания "peter isa tiger".

• Answer. Это — дерево доказательства (т.е. дерево решения AND/OR) для во­проса Goal. Общая форма ответа Answer состоит в следующем:

Conclusion was Found

где Found представляет обоснование для заключения Conclusion. Ниже при­ведены три примера ответов, иллюстрирующих различные ситуации, возни­кающие при формировании ответов.

1. Обнаружен факт:

( connected| heater, fusel) is true ) was 'found as a fact1

2. Получен ответ на запрос к пользователю; ( peter eats neat) is false was told

3. Сформирован логический вывод на основании имеющихся и полученных све­дений:

( peter isa carnivore ) i3 true was ('derived by' rule3 from ( peter isa mammal) is true was ('derived by- rulel from ( peter has hair ) is true was told ) and ( peter eats meat) is true was told )

Код процедуры explore на языке Prolog приведен в листинге 16.3. В этом коде реализованы принципы, описанные в разделе 16.2.2, с использованием структур данных, указанных выше.

Листинг 16.3. Основная процедура командного интерпретатора экспертной системы

Процедура t % explore( Goal, Trace, Answer)

% находит ответ Answer, соответствующий заданной цели Goal, где Trace - цепочка

% родительских целей и правил, с помошьп которых процедура explore пытается

% кайти содержательный ответ на вопрос. Ответ Answer может принять ложное

I значение, только если ОЫЛИ проверены все варианты и для всех ник получен

I ложный результат

:- ор( 900, xfx, : : ) .


Глава 16. Командный интерпретатор экспертной системы



 

- op ( 800, xfx, was) .
- op ( 870, fx,  
- op ( 880, xfx, then).
- Op ( 550, xf у, or) .
- op ( 540, xfy, and) .
- op( 300, fx, 'derivedby')
- op ( 600, xfx, from).
- op( 600, xfx, by) .

% в этой программе предполагается, что директивы ор( 700, xfx, is) 4 и op! 900, fx, not) уже введены

explore! Goal, Trace, Goal is true was ' found as a fact') :-fact :: Goal.

Ь Предполагается, что для цели каждого типа предусмотрено только одно правило


Goall

explore! Goal, Trace,

•derived by' Rule from Answer] :- Правило Rule, соответствующее цели Goal Trace] , Answer) ,

Goal is TruthValue was

Rule :: if Condition then Goal,

explore [ Condition, [Goal by Rule

! ,

truth{ Answer, TruthValue) . explore) Goall and Goal2, Trace, Answer)

explore С Goall, Trace, Answerl),

continues Answerl, Goall and Goal2, Trace, Answer). explore! Goal] or Goal2, Trace, Answer]:-

exploreyes! Goall, Trace, Answer) - Ответ, соответствующий


exploreyes! Goal2, Trace, Answer). l Ответ, соответствующий цел:' Goal2 explore( Goall or Goal2, Trace, Answerl and Answer2) :- !, not exploreyes ! Goall, Trace, J),

not exploreyes i Goal2 , Trace, _~) , ': Соответствующий ответ отсутствует explore( Goall, Trace, Answerl), Ответ Answerl должен Сыть ложным explore ( Goal2, Trace, Answer2). % Ответ Answer; должен быть ложным explore! Goal, Trace, Goal is Answer was -old) :-

useransweri Goal, Trace, Answer). ! Ответ, предоставленный пользователем

exploreyes! Goal, Trace, Answer) :-

explore! Goal, Trace, Answer) ,

positive! Answer). continue! Answerl, Goall and Goal2, Trace, Answer) :-

positive! Answerl),

explore! Goal2, Trace, Answer2), {positive С Answer2!,

Answer = Answerl and Answer2


: -

TruthValue)

negative!. Answer2) ,

Answer = Answer2

) . continue; Answerl, Goall and Goal2, _, Answerl)

negative! Answerl). trutht Question is TruthValue was Found, truth [ Answerl andAnswer2, TruthValue)

truth( Answerl, true) ,

truth! Answer2r true], I,

TruthValue - true


: -


! .


TruthValue = false. positive( Answer) :-

truth I Answer, true) . negative{ Answer) :-

truth С Answer, false) .


getreply! Reply) :-read ( Answer) , means С Answer, Reply),!


% Ответ имеет смысл для программы?


 



Часть II.Применение языка Prolog в области искусственного интеллекта


i

nl, write( 'Answer unknown, try again please') , nl, % Нет

getreply( Reply) . % Сделать еще одну попытку

means( yesr yes) . means { y, yes ) ,. means { no, no) . means in, no) . means! why, why) . meansI w, why) .