Чтение онлайн

ЖАНРЫ

Программирование на языке Пролог для искусственного интеллекта

Братко Иван

Шрифт:

14.4.3. Формирование ответа на вопрос "как"

Получив ответ на свой вопрос, пользователь возможно захочет увидеть, как система пришла к такому заключению. Один из подходящих способов ответить на вопрос "как" — это представить доказательство, т.е. те правила и подцели, которые использовались для достижения полученного заключения. Это доказательство в случае нашего языка записи правил имеет вид решающего И/ИЛИ-дерева. Поэтому наша машина логического вывода будет не просто отвечать на вопрос, соответствующий цели самого верхнего уровня — этого нам недостаточно, а будет выдавать в качестве ответа решающее И/ИЛИ-дерево, составленное из имен правил и подцелей. Затем это

дерево можно будет отобразить на выходе системы в качестве объяснения типа "как". Объяснению можно придать удобную для восприятия форму, если каждое поддерево печатать с надлежащим отступом, например:

питер это хищник

 было выведено по прав3 из

питер это млекопитающее

было выведено по прав1 из

питер имеет шерсть

было сказано

и

питер ест мясо

было сказано

14.5. Реализация

Теперь мы приступим к реализации нашей оболочки, следуя тем идеям, которые обсуждались в предыдущем разделе. На рис. 14.9 показаны основные объекты, которыми манипулирует оболочка.

Цель
 — это вопрос, подлежащий рассмотрению;
Трасса
 — это цепочка, составленная из "целей-предков" и правил, находящихся между вершиной
Цель
и вопросом самого верхнего уровня;
Ответ
 — решающее дерево типа И/ИЛИ для вершины
Цель
.

Рис. 14.9. Отношение

рассмотреть( Цель, Трасса, Ответ).

Ответ
 — это И/ИЛИ решающее дерево для целевого утверждения
Цель
.

Основными процедурами оболочки будут:

рассмотреть( Цель, Трасса, Ответ)

Эта процедура находит ответ

Ответ
на вопрос
Цель
. Процедура

ответпольз( Цель, Трасса, Ответ)

порождает решения для тех вопросов

Цель
, которые можно задавать пользователю. Она спрашивает пользователя об истинности утверждения
Цель
, а также отвечает на вопросы "почему". Процедура

выдать( Ответ)

выводит результат и отвечает на вопросы "как". Все эти процедуры приводятся в действие процедурой-драйвером

эксперт
.

14.5.1. Процедура 

рассмотреть

Центральной процедурой оболочки является процедура

рассмотреть( Цель, Трасса, Ответ)

которая будет находить ответ

Ответ
на заданный вопрос
Цель
, используя принципы, намеченные в общих чертах в разд. 14.4.1: найти
Цель
среди фактов базы знаний, или применить правило из базы знаний, или спросить пользователя, или же обработать
Цель
как И/ИЛИ-комбинацию подцелей.

Аргументы имеют следующий смысл и следующую структуру:

Цель

 вопрос, подлежащий

рассмотрению, представленный как И/ИЛИ-комбинация простых утверждений, например

 X имеет перья или X летает или

 X откладывает яйца

Трасса

 цепочка, составленная из целей-предков и правил, расположенных между

Цель
и исходной целью самого верхнего уровня. Представляется как список, состоящий из элементов вида

 Цель по Прав

 что означает: 

Цель
рассматривалась с использованием правила 
Прав
. Например, пусть исходной целью будет "питер это тигр", а текущей целью — "питер ест мясо". В соответствии с базой знаний рис. 14.5 имеем трассу

 [( питер это хищник) по прав3,

( питер это тигр) по прав5 ]

 Смысл ее можно выразить так:

 Я могу использовать "питер ест мясо" для того, чтобы проверить по прав3, что "питер это хищник".

 Далее, я могу использовать "питер это хищник" для того, чтобы проверить по прав5, что "питер это тигр".

Ответ

 решающее И/ИЛИ-дерево для вопроса 

Цель
. Общая форма представления для объекта
Ответ
:

 Заключение было Найдено

где

Найдено
 — это обоснование для результата
Заключение
. Следующие три примера иллюстрируют различные варианты ответов:

(1)

( соед( радиатор, предохр1) это правда) было
 

'найдено как факт'

(2)

 (питер ест мясо) это ложь было сказано
 

(3)

 (питер это хищник) это правда было
 

( 'выведено по' прав3 из

(питер это млекопитающее) это правда было

( 'выведено по' прав1 из

(питер имеет шерсть) это правда было сказано)

и

(питер ест мясо) это правда было сказано )

На рис. 14.10 показана прологовская программа для процедуры

рассмотреть
. В этой программе реализованы принципы разд. 14.4.1 с использованием только что описанных структур данных.

% Процедура

%

% рассмотреть( Цель, Трасса, Ответ)

%

% находит Ответ на вопрос Цель. Трасса - это цепочка

% целей-предков и правил. "рассмотреть" стремится найти

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

% только в том случае, когда рассмотрены все возможности,

% и все они дали результат "ложь".

:- op( 900, xfx, :).

:- op( 800, xfx, было).

:- op( 870, fx, если).

:- op( 880, xfx, то).

:- op( 550, xfy, или).

:- op( 540, xfy, и).

:- op( 300, fx, 'выведено по').

:- op( 600, xfx, из).

:- op( 600, xfx, по).

% В программе предполагается,что op( 700, хfх, это), op( 500, fx, не)

Поделиться с друзьями: