Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kontr_ZPA_Int.doc
Скачиваний:
115
Добавлен:
10.11.2018
Размер:
668.67 Кб
Скачать

3.1.2. Выполнение „Prolog”- программы

Как уже отмечалось выше, в основу Prolog”- программы положен аппарат автоматического доказательства теорем в исчислении предикатов первого порядка, который состоит в следующем. Логическая база знаний содержит истинные утверждения (правила), которые называются аксиомами или гипотезами. На основе двух или нескольких исходных аксиом можно доказать теорему, т.е. вывести очередное утверждение-следствие путем использования конечного числа правил вывода. Этот процесс называют логическим выводом на знаниях.

Метод автоматического доказательства теорем с использованием правил вывода следствий из набора исходных аксиом получил название метода резолюций. Теорема, выведенная из двух или нескольких аксиом путем использования метода резолюций, называется резольвентой.

Основной операцией, выполняемой над данными в Prolog- программе, является операция сопоставления (линейная резолюция) утверждений. Задача Prolog- программы состоит в определении значений аргументов, входящих в состав целевого утверждения, который согласуется с одной из аксиом базы знаний. Это утверждение с точки зрения компилятора Prolog- программы является запросом, который необходимо ввести в диалоговое окно после сообщения Goal, либо записать как часть текста программы в разделе goal.

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

Сложенный запрос создается из нескольких простых запросов, соединенных между собой:

  • запятой "," что означает логическое "и" ("and") ( &);

  • точкой с запятой ";", что соответствует логическому "или" ("or") (  ).

3.1.3. Примеры „Prolog”-программ

Пример №1. Рассмотрим Prolog”-программу построения базы знаний ЭС с использованием логической модели представления знаний (см. "Лабораторную работу №2").

Пусть предметной областью ЭС являются "Транспортные средства" с такими объектами (см. "Лабораторную работу №1"):

1. Самолет. 2. Вертолет. 3. Катер. 4. Танкер. 5. Грузовик. 6. Такси.

Указанные транспортные средства могут обладать следующими свойствами:

1. Иметь колеса. 2. Иметь винт. 3. Иметь крыло. 4. Возить грузы.

Связь между объектами и их свойствами представлена в табл. 3.1:

Табл. 3.1. Связь базы данных с базой знаний

1

2

3

4

Колеса

Винт

Крыло

Грузы

1

Самолет

+

+

+

+

2

Вертолет

+

+

-

+

3

Катер

-

+

-

-

4

Танкер

-

+

-

+

5

Грузовик

+

-

-

+

6

Такси

+

-

-

-

где: "+" – объект имеет соответствующее свойство;

"-" – объект не имеет указанного свойства.

Prolog- программа логической базы знаний ЭС имеет вид:

domains % Типы данных:

sml, vrt, ktr, tnk, grz, tks = symbol

kls, vnt, krl, vgr = symbol

x, y = symbol

predicates % Предикаты:

P(x, y), Q(x), R(y)

clauses % Правила (фразы Хорна):

not P(sml, kls); not P(sml, vnt); not P(sml, krl); not P(sml, vgr); Q(sml).

not P(vrt, kls); not P(vrt, vnt); not P(vrt, vgr); Q(vrt).

not P(ktr, vnt); not P(ktr, vgr); Q(ktr).

not P(tnk, vnt); not P(tnk, vgr); Q(tnk).

not P(grz, kls); not P(grz, vgr); Q(grz).

not P(tks, kls); Q(tks).

not P(sml, kls); not P(vrt, kls); not P(grz, kls); not P(tks, kls); R (kls ).

not P(sml, vnt); not P(vrt, vnt); not P(ktr, vnt); not P(tnk, vnt); R (vnt ).

not P(sml, krl); R (krl ).

not P(sml, vgr); not P(vrt, vgr); not P(ktr, vgr);not P(tnk, vgr)); not P(grz, vgr); R (vgr ).

Пример №2. Рассмотрим Prolog”-программу построения базы знаний ЭС с использованием семантической модели представления знаний (см."Лабораторную работу №2"):

domains % Типы данных:

объект = symbol

объекты = string

свойства = string

транспорт_средства = symbol

самолет, вертолет, катер, танкер, грузовик, такси = string

колеса, винт, крыло, грузы = string

predicates % Предикаты:

имеет_частью (объекты, объект )

имеет_свойство (свойства, объект)

clauses % Правила:

имеет частью (самолет, вертолет, катер, танкер, грузовик, такси, транспорт_средства)

% Связь базы данных с базой знаний

имеет_свойство ("колеса", "винт", "крыло", "грузы ", "Самолет")

имеет_свойство ("колеса", "винт", " ", "грузы ", "Вертолет")

имеет_свойство (" ", "винт", " ", "грузы ", "Катер")

имеет_свойство (" ", "винт", " ", "грузы ", "Танкер")

имеет_свойство ("колеса", " ", " ", "грузы ", "Грузовик")

имеет_свойство ("колеса", " ", " ", " ", "Такси")

Пример №3. Рассмотрим Prolog”-программу построения базы знаний ЭС с использованием фреймовой модели представления знаний (см."Лабораторную работу №2"):

domains % Типы данных:

Фрейм, имя_фрейма, имя_слота, транспорт_средства = symbol

фреймы = string

значения_слота = string

самолет, вертолет, катер, танкер, грузовик, такси = string

колеса, винт, крыло, грузы = string

predicates % Предикаты:

структура (фреймы, Фрейм)

фрейм (имя_фрейма, имя_слота, значения_слота)

clauses % Правила:

структура (самолет, вертолет, катер, танкер, грузовик, такси, транспорт_средства)

% Связь базы данных с базой знаний

фрейм ("Самолет", имеет, "колеса", "винт", "крыло", "грузы ")

фрейм ("Вертолет", имеет, "колеса", "винт", " ", "грузы ")

фрейм ("Катер", имеет, " ", "винт", " ", "грузы ")

фрейм ("Танкер", имеет, " ", "винт", " ", "грузы ")

фрейм ("Грузовик", имеет, "колеса", " ", " ", "грузы ")

фрейм ("Такси", имеет, "колеса", " ", " ", " ")

Пример №4. Рассмотрим Prolog”-программу построения базы знаний ЭС с использованием продукционной модели представления знаний (см."Лабораторную работу №2").

domains % Типы данных:

sml, vrt, ktr, tnk, grz, tks = symbol

kls, vnt, krl, vgr = symbol

x, y = symbol

predicates % Предикаты:

P(x, y), Q(x), R(y)

clauses % Правила:

Q (sml) :- P(sml, kls), P(sml, vnt), P(sml, krl), P(sml, vgr).

Q (vrt). :- P(vrt, kls), P(vrt, vnt), not P(vrt, krl), P(vrt, vgr).

Q (ktr) :- P(ktr, kls), P(ktr, vnt), not P(ktr, krl), P(ktr, vgr).

Q (tnk) :- not P(tnk, kls), P(tnk, vnt), not P(tnk, krl), P(tnk, vgr).

Q (grz) :- P(grz, kls), not P(grz, vnt), not P(grz, krl), P(grz, vgr).

Q (tks) :- P(tks, kls), not P(tks, vnt), not P(tks, krl), not P(tks, vgr).

R (kls ) :- P(sml, kls), P(vrt, kls), not P(ktr, kls), not P(tnk, kls), P(grz, kls), P(tks, kls).

R (vnt ) :- P(sml, vnt), P(vrt, vnt), P(ktr, vnt), P(tnk, vnt), not P(grz, vnt), not P(tks, vnt).

R (krl ) :- P(sml, krl), not P(vrt, krl), not P(ktr, krl), not P(tnk, krl), not P(grz, krl), not P(tks, krl).

R (vgr ) :- P(sml, vgr); P(vrt, vgr), P(ktr, vgr), P(tnk, vgr); P(grz, vgr), not P(tks, vgr).

Пример №5. Рассмотрим пример Prolog-программы решения задачи ЭС (см. "Лабораторную работу №1") в среде программирования "Turbo-Prolog" версии 2.0. Запрос пользователя ЭС состоит в определении названия объекта с такими свойствами:

  • имеет колеса;

  • не имеет винта;

  • не имеет крыльев;

  • возит грузы.

ЭС будет задавать вопросы, на которые должен отвечать пользователь. Вопросы формируются в порядке следования свойств в базе знаний:

1) "Объект имеет колеса?" "Да".

2) "Объект имеет винт?" "Нет".

3) "Объект имеет крыло?" "Нет".

4) "Объект возит грузы?" "Да".

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]