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

ЖАНРЫ

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

Братко Иван

Шрифт:

прав2: если

 Животное имеет перья

 или

 Животное летает и

 Животное откладывает яйца

то

 Животное это птица.

прав3: если

 Животное это млекопитающее и

 ( Животное ест мясо

или

Животное имеет 'острые зубы' и

Животное имеет когти и

Животное имеет

'глаза, направленные вперед' )

то

 Животное это хищник.

прав4: если

 Животное это хищник и

 Животное имеет

'рыжевато-коричневый цвет' и

 Животное имеет 'темные пятна'

то

 Животное это гепард.

прав5: если

 Животное это хищник и

 Животное имеет

'рыжевато-коричневый цвет' и

 Животное имеет 'черные полосы'

то

 Животное это тигр.

прав6: если

 Животное это птица и

 Животное 'не может' летать и

 Животное плавает

то

 Животное это пингвин.

прав7: если

 Животное это птица и

 Животное летает хорошо

то

 Животное это альбатрос.

факт: X это животное :-

 принадлежит( X, [гепард, тигр, пингвин, альбатрос]).

можно_спросить( _ 'кормит детенышей' _,

 'Животное' 'кормит детенышей' 'Чем').

можно_спросить( _ летает, 'Животное' летает).

можно_спросить( _ откладывает яйца,

 'Животное' откладывает яйца).

можно_спросить( _ ест _, 'Животное' ест 'Что').

можно_спросить( _ имеет _,'Животное' имеет 'Нечто').

можно_спросить( _ 'не может' _,

 'Животное' 'не может' 'Что делать').

можно_спросить( _ плавает, 'Животное' плавает).

можно_спросить( _ летает хорошо,

 'Животное' летает хорошо).

Рис. 14.5. Простая база знаний для идентификации животных. Заимствовано из Winston (1984). Отношение "можно_спросить" определяет вопросы, которые можно задавать пользователю. Операторы 

если
то
,
и
или
определены на рис. 14.10.

Рассмотрим еще одну небольшую базу знаний, которая может помочь локализовать неисправности в простой электрической схеме, состоящей из электрических приборов и предохранителей. Электрическая схема показана на рис. 14.6. Вот одно из возможных правил:

если

 лампа1 включена и

 лампа1 не работает и

 предохранитель1 заведомо цел

то

 лампа1 заведомо неисправна.

Вот

другой пример правила:

если

 радиатор работает

то

 предохранитель1 заведомо цел.

Рис. 14.6. Соединения между предохранителями и приборами в простой электрической схеме.

Эти два правила опираются на некоторые факты (относящиеся к нашей конкретной схеме), а именно что лампа1 соединена с предохранитель1 и что лампа1 и радиатор имеют общий предохранитель. Для другой схемы нам понадобится еще один набор правил. Поэтому было бы лучше сформулировать правила в более общем виде (используя прологовские переменные) так, чтобы они были применимы к любой схеме, а затем уже дополнять их информацией о конкретной схеме. Например, вот одно из полезных правил: если прибор включен, но не работает, а соответствующий предохранитель цел, то прибор неисправен. На наш формальный язык это транслируется так:

правило_поломки:

 если

Прибор включен и

не (Прибор работает) и

Прибор соединен с Предохранитель и

Предохранитель заведомо цел

 то

Прибор заведомо неисправен.

База знаний такого рода показана на рис. 14. 7.

% Небольшая база знаний для локализации неисправностей в

% электрической схеме

% Если прибор включен, но не работает, и предохранитель цел,

% то прибор неисправен.

правило_поломки:

 если

вкл( Прибор) и

прибор( Прибор) и

не работает( Прибор) и

соед( Прибор, Предохр) и

доказано( цел( Предохр) )

 то

доказано( неиспр( Прибор) ).

% Если устройство работает, то его предохранитель цел

правило_цел_предохр:

 если

соед( Прибор, Предохр)

и работает( Прибор)

 то

доказано( цел( Предохр) ).

% Если два различных прибора подключены к одному и тому же

% предохранителю, оба включены и не работают, то предохранитель

% сгорел.

% ЗАМЕЧАНИЕ: предполагается, что из двух приборов неисправных -

% не более одного!

правило_предохр:

 если

соед( Прибор1, Предохр) и

вкл( Прибор1) и

не работает( Прибор1) и

общ_предохр( Прибор2, Прибор1) и

вкл( Прибор2) и

не работает( Прибор2)

 то

доказано( сгорел( Предохр) ).

правило_общ_предохр:

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