Формат представления знаний
Рабочий план по созданию командного интерпретатора, который описывается в этой главе, приведен ниже.
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'])