- •Введение
- •1. Организация вычислительного процесса
- •2. Основные элементы языка
- •2.1. Имена
- •2.2. Типы данных
- •2.3. Константы и переменные
- •2.4. Программные секции Пролога
- •2.4.1. Секция Domains
- •2.4.2. Секция Ppredicates
- •2.4.3. Секция Database
- •2.4.4. Секция Clauses
- •2.4.5. Секция Goal
- •3. Примеры программ
- •3.1. Программы с фактами и простыми правилами
- •3.2. Рекурсии
- •3.3. Программирование циклов
- •3.4. Работа со списками
- •3.5. Нахождение пути на графе
- •3.6. Использование структур
- •Vife(X):–family(_,X,_). % X – жена
- •3.7. Динамическая база данных
- •It_is("хищник"),
- •Xpositive(X, y), !. % в базе данных
- •3.8. Обработка текстов
- •Verb( string ) % Глагол
- •4. Стандартные предикаты
- •4.1. Ввод/вывод
- •4.2. Управление экраном и оконная система
- •4.3. Обработка строк
- •4.4. Преобразование типов
- •4.5. Работа с базой данных
- •4.6. Управляющие предикаты
- •4.7. Прочие стандартные предикаты
- •4.8. Арифметические и логические предикаты
- •5. Использование языка Пролог для построения экспертных систем
- •5.1. Оболочка экспертной системыGeni
- •5.2. Оболочка экспертной системы pexpert
- •5.2.1. Синтаксис правил
- •5.2.2. Функции
- •5.2.3. Взгляд на работу программы
- •5.2.4. Команды верхнего уровня
- •5.2.5. Команды оценки правил
- •5.2.6. Команды, действующие во время ввода данных
- •Рекомендуемая литература
- •Приложение. Варианты лабораторных работ Лабораторная работа 1. Работа с простой базой данных
- •Лабораторная работа 2. Программа “Родственные отношения”
- •Лабораторная работа 3. Построение простой вопросно-ответной системы
- •Лабораторная работа 4. Работа со списками
- •Лабораторная работа 5. Нахождение пути на графе
- •Лабораторная работа 6. Работа с базой данных с использованием структур
- •Лабораторная работа 7. Построение экспертной системы
- •Лабораторная работа 8. Построение синтаксического анализатора
5.2.1. Синтаксис правил
Каждое правило базы данных может иметь следующую структуру, в которой строки, забранные в квадратные скобки, являются необязательными:
< type > < name >
DISPLAY < display string >
[ HELP < help string > ]
[ PRIOR < probability value > ]
< function name > < function parameters >
[ CONTEXT < context information > ]
где
< type > одно из hypothesis, intermediate или data;
< name >идентификатор правила, может быть любым допустимым именем Пролога;
< display string > строка, заключенная в кавычки, которая во время консультации отражает следующее:
data-правило показывает эту строку, чтобы подсказать пользователю, что он должен ввести, чтобы это правило оценивалось;
hypothesis-правило высвечивает эту строку как заключение гипотезы, если гипотеза достигла установленного уровня определенности;
для правил вcех трех типов эта строка показывается при выборе пункта трассировки заключения;
< help string > если нажата клавиша Esc во время ввода данных с использованием data-правила, эта строка, заключенная в кавычки, показывает текст помощи, записанный в теле этого правила;
< probabilityvalue>
с помощью параметра PRIORможно изменить ранее указанное соответствие между вероятностью и определенностью, чтобы показать, что это правило в оценке гипотезы предпочтительнее другого. Здесь указывается значение вероятности. Если этот параметр не указан, данное правило равновероятно может быть истинным или ложным и, следовательно, имеет значение вероятности, равное 0,5;
< function name > < function parameters >
задает функции экспертной системы и ее параметры, функции детально рассмотрены далее;
< contextinformation>
используется, чтобы быть уверенным, что правило оценивается в определенном контексте, т. е. в зависимости от результатов оценки других правил. В случае использования этого параметра можно остановить экспертную систему от дальнейшей оценки нерелевантных правил.
5.2.2. Функции
В PEXPERTимеется одиннадцать функций. Три из них:BAYES,ANDиORкомбинируют вероятности из одного или нескольких источников и возвращают новую вероятность.
BAYES
Параметры для BAYESдолжны быть заданы списком пар:
rulename1 inc i1 dec d1
rulename2 inc i2 dec d2
rulename3 inc i3 dec d3
Каждое значение inc должно быть по крайней мере 1 и каждое dec должно быть не больше 1. BAYES используется при обращении вероятностей в определенности, с которыми программа работает дальше.
AND и OR
Вероятность, возвращаемая AND-функцией, принимается самой низкой среди вводимых вероятностей; вероятностьOR-функции является наибольшей среди вводимых. Задаваемые параметры для этих функций имеют схожее представление:
AND rulename1
rulename2
rulename3
или
OR rulename1
rulename2
rulename3
NOT
Эта функция имеет единственный параметр:
NOT rulename
Если rulename связано с вероятностьюP,NOT-функция возвращает значение вероятности, равное1–P, ассоциированной с правиломrulename.
YESNO
Пользователь может давать прямые ответы в форме “да”, “нет” или “не знаю”, выбирая из меню. Эта возможность достигается использованиемYESNO-функции. Ответы транслируются в значения определенности как следующие:
Yes 5
Don’t know 0
No– 5
Пример правила, содержащего функцию YESNO:
data drive_yourself
display "Do you want to drive yourself?"
yesno
CERTAINTY
В некоторых случаях пользователь может ввести прямое значение определенности, которое затем конвертируется в вероятность. Значения определенности могут изменяться от –5 (определенно не верно) через 0 (не знаю) до +5 (определенно верно).
Пример:
data eats_meat
display "Does it eat meat?"
certainty
Если правило eats_meatоценивается во время выполнения программы, сообщение
Does it eat meat?
появится на экране и пользователь должен будет ввести значение определенности с клавиатуры.
VALUE
Пользователю также позволяется ввести численные значения, и они будут преобразовываться через подходящее соответствие в значения определенности. Такие значения допускаются использованием функции VALUE, имеющей форму:
VALUE loverlimit upperlimit ,
в которой loverlimit иupperlimitопределяют диапазон допустимых числовых значений. Также возможно представить пользователю перечислимый диапазон в виде меню; в этом случаеVALUE имеет форму:
VALUE option1 option2 option3 …
Например:
data sun
display "How much sun was there today?"
help "Enter hours of sunshine today"
value 0 24
При оценке этого правила появится сообщение:
How much sun was there today?
Если введенное значение выходит за пределы диапазона (0, 24), будет предложено еще раз ввести значение.
Пример перечислимого диапазона:
data select_frut
display "Which frut do you like most?"
value apple orange banana
тогда во время работы программы появится меню:
apple
orange
banana
don’t know
Из этого меню пользователю предлагается выбрать подходящий параметр.
MAP
Когда выбор делается из меню, как в вышеприведенном примере, такое data-правило может быть связано с промежуточным правилом (типаintermediate), использующим одну из формMAP-функции. Например:
intermediate healthy_transport_to_work
display "Means of transport is healthy"
PRIOR 0.4
map transport_mode ( walk 0.9 ) ( bike 0.7 ) ( car 0.3 )
data transport_mode
display "Which means of transport will you use?"
value walk bike car
Во время выполнения появится сообщение:
Which means of transport will you use?
и пользователь может выбрать walk, bike, car или don’t know из результирующего меню. Если выбран параметрbike, то правилоhealthy_transport_to_work будет ассоциировано с вероятностью 0.7. Если выбраноdon’t know, то это правило получит вероятность 0.4, так как имеет значение параметраPRIOR, равное 0.4.
Численные значения, введенные посредством VALUE, могут быть переведены в вероятность с помощью другой формыMAP-функции:
MAP rulename ( v1 p1 ) ( v2 p2 ) … ( vn pn ).
Здесь rulename является именемdata-правила, которое выдает числовое значение. Каждоеvi является этим значением и каждоеpi связано с ассоциированным с этим значением вероятностью. Еслиn > = 2, система вычисляет вероятность, соответствующую промежуточному значениюvi. При этом должно выполняться условие
v1 < v2 < … < vn.
Пример:
intermediate rail_speed
display "Desired journey speed permits rail use"
map speed ( 60 1 ) ( 150 0 )
Здесь значению скорости, равному 60, соответствует вероятность 1 и скорости, равной 150, – вероятность 0. На промежутке от 60 до 150 значение вероятности убывает линейно.
CONTEXT
Этот параметр используется, чтобы приостановить обработку экспертной системой правила, указанного в заголовке, если правило функции CONTEXTне достигло заданной определенности. В общем видеCONTEXTимеет следующую форму:
CONTEXT
rulename1 certainty_start1 certainty_stop1
rulename2 certainty_start2 certainty_stop2
. . .
rulenameN certainty_startN certainty_stopN ,
где rulenames – это правила, которые оцениваются с помощьюCONTEXT-функции;certainty_start и certainty_stop определяют диапазон, в котором должна находиться определенность правилаrulename.
Пример:
hypothesis tiger
display "Animal is a tiger"
and mammal tawny_colour carnivore black_stripes
context mammal 5 5 carnivore 5 5 cheetah – 5 0
Эта гипотеза идентифицирует животное как «тигр» при условии, что оно является млекопитающим (определенность mammal равна 5), хищником (carnivore) и в тоже время не является гепардом (определенность гипотезыcheetah от –5 до 0).