Формат представления знаний

Рабочий план по созданию командного интерпретатора, который описывается в этой главе, приведен ниже.

1. Выбрать и уточнить формальный способ представления знаний в командном интерпретаторе.

2. Продумать детали реализации механизма логического вывода, который соот­ветствует выбранному способу формального представления.

3. Ввести средства взаимодействия с пользователем.

Начнем с пункта 1 - выбора формального способа представления знаний. В каче­стве такого способа будут использоваться правила вывода, имеющие синтаксис, ана­логичный описанному в главе 15. Но в эти правила потребуется ввести некоторую дополнительную информацию. Например, правилам необходимо присваивать имена. Эти дополнительные сведения можно найти в листинге 16.1, где показана база зна­ний в формате, выбранном для разрабатываемого командного интерпретатора. Эта база знаний состоит из простых правил, которые позволяют классифицировать жи­вотных по их основным характеристикам; при этом предполагается, что в задаче классификации рассматривается лишь несколько видов животных.


Листинг 16.1. Простая база знаний для классификации животных. Адаптировано из [170]. Отношение "askable" определяет, какие вопросы можно задавать пользователю. Операторы " : : ", i f, then, and, or определены, как показано в листинге 16.3

% Небольшая ваза знаний для классификации животных I- ор{ 100, xfx, ( has, gives, 'does not', eats, lays, isa]). :- op£ 100, xfr [ swims, flies] ) .

rulel :: if

Animal has hair

or

Animal gives milk
then

Animal isa mammal.

rule2 ;: if

Animal has feathers

or Animal flies and Animal lays eggs then

Animal isa bird.

rule3 :: if

Animal isa mammal and

( Animal eats meat or Animal has 'pointed teeth' and Animal has claws and Animal has "forward pointing eyes' ) then

Animal isa carnivore.

rule4 :; if

Animal isa carnivore and

Animal has 'tawny color' and

Animal has 'dark spots'

then

Animal isa cheetah.

rules :: if

Animal isa carnivore and Animal has 'tawny color' and Animal has 'black stripes' then

Animal isa tiger.

rule6 :: if

Animal isa bird and Animal 'does not' fly and Animal swims then

Animal isa penguin,

Eule7 :: if

Animal isa bird and Animal' isa 'good flyer1

then

Animal isa albatross.

358 Часть II. Применение ИЗЫКЭ Prolog в области искусственного интеллекта


fact :: X isa animal :-member{ X, [cheetah, tiger, penguin, albatross]).

askablet _ gives _, 'Animal' gives 'What')-

askablet _ flies, -Animal' flies) .

askablet _ lays eggs, 'Animal' lays eggs).

askable; _ eats _, 'Animal' eats 'What").

askable( _ has _, 'Animal' has 'Something').

askablet _ 'does nor.' _, 'Animal' 'does not' fly).

askablet _ swims, 'Animal' swims).

askablet isa 'good flyer1, "Animal' isa 'good flyer')

Правила в этой базе знаний имеют следующую форму: RuleKame :: if Condition then Conclusion.

где Condition (Условие) - множество простых высказываний, объединенных логи­ческими операторами and и or, a Conclusion (Заключение) — простое высказыва­ние, которое не должно содержать логических операторов. Кроме того, в условной части правил разрешается использовать оператор not, хотя и с некоторыми оговор­ками, В результате применения соответствующих определений операторов Prolog (см. листинг 16.1) эти правила становятся синтаксически допустимыми предложе­ниями Prolog. Оператор and связывает сильнее, чем or, что соответствует обычному соглашению.

Обратите внимание на то, что высказывания в правилах могут представлять собой термы, содержащие переменные. Приведенный ниже пример показывает, почему пе­ременные необходимы и в связи с чем их применение намного увеличивает вырази­тельную мощь системы представления знаний. Рассматриваемый здесь пример базы знаний позволяет находить неисправности в простой электрической сети, которая со­стоит из некоторых электрических приборов и плавких предохранителей. Пример такой сети показан на рис. 16.1. В качестве одного из правил может служить сле­дующее: if

light 1 is on and % Если светильник 1 включен и

lightl is not working and % светильник 1 не горит и проверка

fusel is proved intact % показала, что плавкий предохранитель 1 цел,
then

lightl is proved broken. 1 то следует считать, что светильник 1 неисправен

Еще одно правило приведено ниже. i f

heater is working % Если нагреватель работает, то следует

then

fusel is proved intact. % считать, что плавкий предохранитель 1 цел

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


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



т

дохраните ль цел, то неисправен сам прибор. Такую формулировку можно перевести на применяемый здесь язык формального определения правил следующим образом: broken rule :: if Device is on and

not [ Device is working) and

Device is connected to Fuse and

Fuse is proved intact then

Device is proved broken.

База знаний, представленная в этой форме, показана в листинге 16.2.


У-


light!


 


fusel


У-


1ight2


heater


У,


Iighl3


 


fuse2


У.


Iight4


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

Листинг 16.2. База знаний для поиска неисправности в электрической схеме, подобной приведенной на рис. 16.1

"Небольшая Саза знаний для поиска неисправности в"электрической"схеме"

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

broken rule :: if _

on(Device) and device! Device) and (not working(Device)) and connected( Device, Fuse) and

proved( intact! Fuse)) then

proved! broken! Device)) .


%


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


fuse ok rule ::

if

connected! Device, Fusel and

working! Device) then

proved! intact( Fuse))



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


% Если к одному плавкому предохранителя) подключены два разных прибора, оба они * включены и не работают, то плавкий предохранитель сгорел. Примечание: при этом хотя бы один из приборов должен Сыть исправным!

fused rule : :

if

connected< Devicel, Fuse) and onf Devicel) and [not working! Devicel)) and samefuse [ Device2, Devicelj and pn ( Device2) and [not working< Device2)) then

proved! failed( Fuse)) .

same_fuse_rule : :

if

connected; Devicel, Fuse) and connected; Device2, Fuse) and different! Devicel, Device2) then satnefuset Devicel, Device2) .

device on rule : :

if

working( Device) then

on( Device).


fact ;: different! X, Y)

fact :: device( heater) .

fact :: device! lightl).

fact : : device! lightZ) .

fact :: device! light3).

fact :: device! lights).


: -


not (X - Y)


 


fact fact fact fact fact


:

: :

:

: :

:


connected! lightl, fusel). connected! lightZ, fusel) . connected! heater, fusel). connected! Iight3, fuse2). connected!' lights fuse2).


askable( on[D), on('Device*))-

askable! working ID), working!'Device'])