Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

7344

.pdf
Скачиваний:
0
Добавлен:
23.11.2023
Размер:
1.06 Mб
Скачать

ЗВМ

ОВ

СВМ

ПВМ

ДВМ

РВМ

КВМ

Х

СС

 

М

 

 

 

 

 

Ш

 

 

 

 

 

 

 

 

 

 

Актив-

NIL

Актив-

Актив-

Возмож-

Актив-

Актив-

NIL

Откры-

на

 

но

но

но

на

на

 

та

 

 

 

 

 

 

 

 

 

Факт 6

 

Факт 14

Факт 12

Факт 9

Факт 10

Факт 7

 

Факт 11

 

 

 

 

 

 

 

 

 

Не все переменные получили свои значения, но мы обратились к пользователю 3 ра-

за, это – наш критерий останова, следовательно, прямая цепочка рассуждений за-

кончена.

Факты, которые определены пользователем:

Факт 3 (НС[находится на сайте]=да)

Факт 11 (СС[сессия]=открыта)

Факт 13 (ВМ[видеоматериал]=загружен)

Факты, которые выведены из правил:

Факт 4 (ВЛОГ[возможность войти на сайт под логином и паролем]=неактивно)

Факт 5 (ФПСК[форма поиска]=активна)

Факт 6 (ЗВМ[загрузить видеоматериал]=активно)

Факт 7 (КВМ[комментировать видеоматериал] =активно)

Факт 8 (ФРПСК[форма расширенного поиска]=активно)

Факт 9 (ДВМ[добавление видеоматериала]=возможно)

Факт 10 (РВМ[оценить видеоматериал]=активно)

Факт 12 (ПВМ[поделиться видеоматериалом через социальную сеть]=активно)

Факт 14 (СВМ[свои видеоматериалы на странице]=активно).

Общая схема алгоритма обратной цепочки рассуждений:

1.Определить переменную логического вывода.

2.Найти правило, заключительная часть которого содержит переменную выво-

да.

3.Если такое правило не найдено, то сообщить пользователю, что вывод невоз-

можен, и перейти к шагу 14, иначе поместить правило в стек.

4.Если переменная, соответствующая номеру условия правила в вершине стека,

определена, то увеличить номер условия на 1 и перейти к шагу 8.

31

5.Найти правило, в заключительной части которого встречается переменная, со-

ответствующая номеру условия.

6.Если правило не найдено или предыдущий вывод неверен (см. шаг 9), то за-

просить значение переменной у пользователя, увеличить номер условия на 1 и

перейти к шагу 8.

7.Поместить найденное правило в стек и вернуться к правилу 4.

8.Если номер условия меньше или равен числу фактов в условной части прави-

ла, то вернуться к шагу 4.

9.Если условная часть истинна, то присвоить значение переменной из заключи-

тельной части правила, иначе предыдущий вывод неверен.

10.Удалить правило из стека.

11.Если переменная вывода определена, то перейти к шагу 13.

12.Если стек пуст, то вернуться к шагу 2.

13.Сообщить пользователю окончательный вывод.

14.Конец алгоритма.

Алгоритм прекращает работу, если выполняется одно из двух условий:

1.Значение переменной вывода определено.

2.При полученных значениях переменных значение переменной вывода полу-

чить невозможно.

Приведем пошаговый вывод, реализующий алгоритм обратной цепочки рассужде-

ний на основе базы знаний. При этом нужно предусмотреть пошаговый логический

вывод на экран следующей информации:

Факты, которые были определены пользователем;

Факты, которые выведены из правил (с указанием номеров правил);

Содержимое стека правил (при пошаговом выводе);

Окончательный логический вывод, полученный экспертной системой.

Решение

Работа алгоритма начинается с задания пользователем переменной логического вы-

вода в форме запроса:

Поделиться видеоматериалом?

Следовательно, ЭС необходимо определить значение переменной ПВМ.

32

В базе знаний производится поиск правил, в заключительной части которых нахо-

дится переменная ПВМ. Первое такое правило П3 помещается в стек правил:

П3

1(НС)

 

 

Определяем переменные из условной части правила П3. Первая переменная – НС

(на сайте). В БЗ производим поиск правил, в заключительной части которых встре-

чается переменная НС. Переменная НС не определена и нигде не встречается, зна-

чит, спрашиваем о ней у пользователя:

Находитесь на сайте?

Допустим, что пользователь ответил:

Да.

Имеем: НС = да. Номер условия правила П3 увеличиваем на 1, что соответствует переменной РЕГ (зарегистрирован).

П3

2(РЕГ)

В БЗ производим поиск правил, в заключительной части которых встречается пере-

менная РЕГ. Находим ее в П4, помещаем это правило на вершину стека:

П4

1(ФРЕГ)

П3

2(РЕГ)

Определяем переменные из условной части правила П4. Первая переменная – ФРЕГ

(форма регистрации). В БЗ производим поиск правил, в заключительной части кото-

рых встречается переменная ФРЕГ. Переменная ФРЕГ не определена и нигде не встречается, значит, спрашиваем о ней у пользователя:

ФРЕГ?

Допустим, что пользователь ответил:

Да.

Имеем: НС = да, ФРЕГ = да. Номер условия правила П4 увеличиваем на 1, что соот-

ветствует переменной ОФРЕГ (отправка формы регистрации):

П4

2(ОФРЕГ)

П3

2(РЕГ)

В БЗ производим поиск правил, в заключительной части которых встречается пере-

менная ОФРЕГ. Переменная ОФРЕГ не определена и нигде не встречается, значит,

спрашиваем о ней у пользователя:

ОФРЕГ?

33

Допустим, что пользователь ответил:

Да.

Имеем: НС = да, ФРЕГ = да, ОФРЕГ = да. Признаем условную часть П4 истинной,

значение РЕГ определяем, как да. Убираем П4 из стека.

Имеем: НС = да, ФРЕГ = да, ОФРЕГ = да, РЕГ = да.

Номер условия правила П3 увеличиваем на 1, что соответствует переменной СС

(сессия в соцсети).

П3

3(СС)

В БЗ производим поиск правил, в заключительной части которых встречается переменная СС. Переменная СС не определена и нигде не встречается, значит,

спрашиваем о ней у пользователя:

СС?

Допустим, что пользователь ответил:

Да.

Имеем: НС = да, ФРЕГ = да, ОФРЕГ = да, РЕГ = да, СС = да. Признаем условную часть П3 истинной, значение ПВМ определяем, как активно.

Необходимое значение переменной было установлено, значит обратная цепочка рассуждений завершена.

Факты, которые были определены пользователем:

НС = да – ФРЕГ = заполнена;

ОФРЕГ = да – СС = открыта.

Факты, которые были выведены:

Правило 3: РЕГ = да.

Задачи для раздела 2.

Задача 1. Программа будет содержать информацию о военнослужащих некоторо-

го воинского подразделения и их званиях: “Павлов генерал”, “Сабо полковник”, “Денисов капитан”, “Матвеев капитан”, “Кулёмин сержант”, “Николаев сержант”.

Сформулировать на Прологе следующие вопросы: 1) Павлов генерал? 2) Кто явля-

ется полковником? 3)Кем является Денисов? 4)мВ подразделение есть военный в

34

звание сержанта? 5) В подразделение есть военный в звание подполковника? 6) Вы-

вести военных, имеющих одинаковые звания.

В программе каждого военного мы представим предикатом military размерности

2, каждый компонент – атом, первый представляет фамилию, а второй – его звание.

Программа 1. База данных «Военная часть»

Domains

s=symbol

Predicates

military(s,s)

Clauses

military(pavlov, general). military(sabo, polkovnik). military(denisov, kapitan). military(matveev, kapitan). military(kulemin, serzhant). military(nikolaev, serzhant).

Сформулируем запросы:

1)? military(pavlov, general)

Ответ: yes

2)? military(X, polkovnik)

Ответ: X= sabo

3)? military(denisov, X)

Ответ: X= kapitan

4)? military(_, serzhant)

Ответ: yes

5)? military(_, podpolkovnik)

Ответ: no

6)? military(X,Y), military(Z, Y), X<>Z

Ответ: X= denisov Z= matveev Y= kapitan X= kulemin Z= nikolaev Y= serzhant

35

Задача 2. Данные о крупных реках России сведены в таблицу:

Данные о крупных реках России

 

 

Годо-

Площадь

 

 

Назва-

Длина,

вой

 

Куда

бассейна,

Истоки

ние реки

км

сток,

впадает

тыс. км2

 

 

 

км3

 

 

 

 

 

 

 

 

 

 

 

Яблоневый хре-

Татар-

Амур

4416

350

1855

ский про-

 

 

 

 

бет

лив

 

 

 

 

 

Лена

4400

488

2490

Байкальский

Море

хребет

Лаптевых

 

 

 

 

Обь

4070

400

2990

Предгорья Ал-

Карское

тая

море

 

 

 

 

Иртыш

4248

323

1643

Китай

Обь

Енисей

3487

600

2580

Восточный Са-

Карское

ян

море

 

 

 

 

Волга

3530

255

1360

Валдайская воз-

Каспий-

вышенность

ское море

 

 

 

 

 

 

 

 

Хребет Черско-

Восточ-

Колыма

2129

44

643

носибир-

 

 

 

 

го

ское море

 

 

 

 

 

Урал

2428

54

231

Южный Урал

Каспий-

ское море

 

 

 

 

 

Дон

2200

45

504

Среднерусская

Азовское

возвышенность

море

 

 

 

 

 

 

 

 

Верхне — Кам-

 

Кама

1805

130

507

ская возвышен-

Волга

 

 

 

 

ность

 

Печора

1809

130

322

Северный Урал

Баренце-

 

 

 

 

 

во море

Ангара

1779

62

1039

Байкал

Енисей

Селенга

1024

14

447

Монголия

Байкал

Кубань

870

11

58

Кавказ

Азовское

море

 

 

 

 

 

Составить базу данных и ответить на следующие вопросы:

1)Определить реки, впадающие в Азовское море.

2)Определить реки, исток которых находится на Валдайской возвышенности?

3)Какие реки короче Камы?

4)Какие реки длиннее Иртыша?

5)Как задать вопрос, определяющий все данные о реке Кама?

36

Программа 2. База данных «Реки России»

Domains S=symbol N=integer

Predicates reka(S,N,N,N,S,S)

Clauses

reka(amur, 4416, 350, 1855,yablonevi_hrebet,tatar_proliv). reka(lena, 4400, 488, 2490, baikal_hrebet, more_laptevih). reka(ob, 4070, 400, 2990, altai, more_karskoe).

reka(irtish, 4248, 323, 1643, kitai, ob).

reka(enisei, 3487, 600, 2580, vost_cain, more_karskoe). reka(volga, 3530, 255, 1360, valdais_vozvishennost, more_kaspi). reka(kolima, 2129, 44, 643, hrebet_cherskogo, vost_sibir_more). reka(ural, 2428, 54, 231, yuzhni_ural, more_kaspi).

reka(don, 2200, 45, 504, sredn_rus_vozvvishennost, more_azov). reka(kama, 1805, 130, 507, verhne_kamsk_ vozvvishennost, volga). reka(pechora, 1809, 130, 322, sever_ural, barenzevo_more). reka(angara, 1779, 62, 1039, baikal, enisei).

reka(selenga, 1024, 14, 447, mongolia, baikal). reka(kuban, 870, 11, 58, kavkaz, more_azov).

Запросы:

reka(X, _, _, _, _, more_azov)

reka(X, _, _, _, valdais_vozvishennost,_)

reka(X, Y, _, _, _, _), reka(lena, Z, _, _, _, _), Y<Z reka(X, Y, _, _, _, _), reka(irtish, Z, _, _, _, _), Y>Z reka(kama, A,B,C,D,E)

Задача 3. Известно, что Лене нравится теннис, Денису нравится футбол, Борису – бейсбол, Эдику – плавание, Марку нравится теннис, а Фёдору то, что нравится Борису. Записать факты на Прологе и ответить на вопросы: 1) Кому нравится теннис? 2) Что нравится Федору? 3) Кто занимается одинаковыми видами спорта?

Программа 3. База знаний «Предпочтения»

Predicates likes(symbol,symbol)

Clauses

likes(lenа, tennis). likes(denis, football). likes(boris, baseball). likes(edic, swimming).

37

likes(mark, tennis).

likes(fedor, Activity):- likes(boris, Activity). /* Activity играет роль переменной*/ Запросы

1) ? likes(X, tennis)

Ответ:

X= lenа

X= mark

2) ? likes(fedor, X)

Ответ:

X= baseball

3) ? likes(X, T), likes(Y, T)

Ответ:

X= lenа Y= mark T= tennis

X= mark Y= lenа T= tennis

X= boris Y= fedor T= baseball

X= fedor Y= boris T= baseball

Задача 4. Лена, Анна, Денис и Борис – люди, лада и нисан – автомобили, Лене нравится лада, Анне – пицца, Денису – футбол, а Борис – Мерседес, Ваське – рыбка. Пицца, лада, мерседес продаются. Человек может купить машину, если она продается, и она ему нравится. Сформулировать на прологе вопросы: 1) Какую машину может купить Лена? 2) Кто-нибудь может купить мерседес? 3) какие машины продаются, и ответить на них.

Программа 4. База знаний «Предпочтения и возможности»

Domains s=symbol

Predicates human(s) car(s) likes(s,s) can_by(s,s) cells(s)

Clauses

human( lena ). human( anna ).

38

human( denis ). human( boris ). car( lada ). car( nissan ).

likes( lena, lada ). likes( anna, pizza ). likes( denis, football ). likes( boris, mersedes ). likes( vasya, ribka ). cells(pizza). cells(lada). cells(mersedes).

can_by(X,Y):-human(X), car(Y), likes(X,Y), cells(Y).

Запросы:

1)can_by(lena, X) X=lada

2)can_by(_,mersedes) no

3)car(X),cells(X)

X=lada

Задача 5. Программа иллюстрирует различные способы ввода данных.

Программа 5. Ввод данных

Predicates vvod_int vvod_ch vvod_s

Clauses

vvod_int:- readint(N1), readint(N2), N=N1+N2, write(N). vvod_ch:- readchar(N1), readchar(N2), N=N1+N2, write(N). vvod_s:- readln(N1), readln(N2), concat(N1,N2,N), write(N).

Задача 6. Вывести в каждой строке сообщения: Леонард – отец Катерины, Карл –

отец Джейсона, Карл – отец Марины.

Программа 6. База знаний «Семья»

Domains

name = symbol Predicates

father(name, name)

39

everybody clauses

father(leonard, katherine). father(carl, jason). father(carl, marinа). everybody :-

father(X, Y),

write(X, " is ", Y, "s father\n"), fail.

В некоторых случаях может быть необходимым продолжение поиска дополни-

тельных решений, для этого можно использовать встроенный предикат fail. Он не

имеет аргументов, всегда считается ложным.

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

Отрицание задается с помощью предиката not.

Задача 7. У нас есть информация о странах-партнерах Европы, имеющих общую

границу. Предположим, нас интересуют какие страны-партнеры не имеют общей

границы.

Программа 7. База знаний «Страны Европы»

Domains country=symbol

Predicates

euro_pair(country, country) border(country, country) find_non_border_pair

Clauses

euro_pair(”France”, ”Germany”). euro_pair(”France”, ”Spain”). euro_pair(”France”, ”Italy”). euro_pair(”Germany”, ”Spain”). euro_pair(”Germany”, ”Italy”). euro_pair(”Spain”, ”Italy”). border(”France”, ”Germany”). border(”France”, ”Spain”). border (”France”, ”Italy”). find_non_border_pair:-

euro_pair(X,Y), not(border(X,Y)), write(X,” – “,Y),fail,nl.

40

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