Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog» - polpoz.ru o_O
Главная
Поиск по ключевым словам:
страница 1
Похожие работы
Название работы Кол-во страниц Размер
В. П. Грибанов Лабораторный практикум по дисциплине "Информатика... 1 184kb.
Лабораторная работа №1 Тема работы: Ознакомление с принципами организации... 1 109.39kb.
Учебно-методический комплекс по дисциплине Функциональное и логическое... 4 432.76kb.
Учебно-методический комплекс по дисциплине по выбору дв2 «логическое... 1 351.89kb.
Задание к контрольной работе по дисциплине «Функциональное и логическое... 1 88.42kb.
Лабораторная работа №6 Задание №1. Составьте схемы 1 82.17kb.
Программа по дисциплине визуальное программирование маслянкин В. 1 56.07kb.
Вопросы к экзамену по дисциплине «Функциональное и логическое программирование» 1 13.5kb.
Лабораторная работа. Программирование базовых алгоритмов сортировки 1 145kb.
Лабораторная работа №9 структура программы. Скалярные типы данных. 4 863.77kb.
Взаємодія програм в Visual Basic і Visual C++ 1 63.45kb.
Почвенные ресурсы россии 1 39.05kb.
1. На доске выписаны n последовательных натуральных чисел 1 46.11kb.

Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual - страница №1/1

Лабораторная работа № 6

Итоговое задание «Логическое программирование на языке Visual Prolog»
Цели работы:

Получить практические навыки применения систем и языков логического программирования для построения систем, основанных на знаниях. Создать экспертную систему по диагностике и ремонту компьютеров с использованием среды VisualProlog


Задачи работы:

На языке Пролог реализовать базу знаний на выбранную тему, с использованием прямого либо обратного логического вывода. База знаний должна обязательно включать несколько уровней рассуждений (т.е. окончательные выводы не должны напрямую следовать из комбинаций входных данных, необходимо использовать промежуточные выводы) и демонстрировать некоторую интеллектуальность в принятии решений. Ориентировочное количество правил если-то – около 100 шт.



1. Теоретическую часть

PROLOG - (PROgramming in LOGic) язык описания фактов, и правил для создания новых фактов. Предложен в районе 1972 года Alain Colmerauer и Philippe Roussel. На данный момент не стандартизован — существует много реализаций данного языка: Visual Prolog, PDC Prolog, Turbo Prolog, Prova, InterProlog, GNU Prolog. В рамках занятий используется GNU Prolog (доступен для скачивания на http://www.gprolog.org/). Возможно выполнение заданий на любой другой реализации языка.
Синтаксис:

ТЕРМЫ — единица данных, объект данных в Prolog.

Подразделяются: Атомы, Числа, Переменные, Составные термы

Атом - любая последовательность символов, заключенная в одинарные кавычки.


Исключения:

1) атом, состоящий только из чисел, букв и символа подчеркивания и начинающийся со строчной буквы;

2) атом, состоящий целиком из специальных символов. К специальным символам относятся: +-*/^=:;?@$&
Числа — в привычном понимание целые и действительные числа.

Пролог не производит вычисления автоматически, т.е. «2+3» будет восприниматься как терм. Для осуществления вычислений используется оператор «is»: X is 2+3.


Арифметические операторы:

+ сложение, - вычитание, * умножение, / деление, // целочисленное деление, mod остаток от деления, ^ возведение в степень


Переменные - объекта, на который нельзя сослаться по имени.

Переменные должны начинаться с прописной буквы или символа подчёркивания и содержать только буквы, цифры, символы подчёркивания. Переменная действует только в рамках утверждения, кроме анонимных переменных(с именем «_»). Именованные переменные — все переменные отличные от анонимных. Свободные переменные — переменные которым не было присвоено значение.


Утверждения — единица программы на Prolog, обеспечивающие её функционирование.

Утверждения делятся на два подтипа: Факт — одиночная цель, всегда истина. Правило — состоит из одной головной цели и одной или более хвостовой целей, которые истины при некоторых условиях.

Пример: собака(рекc). родитель(голди,рекс). собака (X) :- родитель (X,Y),собака (Y).
Пример 1. Факты

animals(cat).

animals(dog).

animals(pig).


colors(cat,[black,white]).

colors(dog,brown).

colors(pig,pink).
Например, тот факт, что в русском языке существует окончание -ой на ПРОЛОГе запишется так:


Ending ("ой").

Но одних фактов для решения задачи обычно недостаточно (если мы не пишем базу данных). Фактами нужно ещё уметь пользоваться для доказания других фактов. Для этого в ПРОЛОГе существуют правила. Например, высказывание "слово получается добавлением к основе окончания" можно написать так:




decline (Base, Word) :- ending (Ending), concat (Base,Ending,Word).

Или дословно: "слово Word получается из основы Base, если (:-) существует такое окончание Ending, сложение (concat) которого с основой даёт слово". concat -- встроенная функция, она просто сцепляет строки. Эти две строчки уже являются вполне работоспособной программой. Теперь мы можем задавать интерпретатору ПРОЛОГа вопросы. Например, спросим:




Goal> decline ("стран", X)

Что означает "выдай слово с основой стран". Здесь X обозначена неизвестная величина, та, которую необходимо получить. Вообще, любое имя с заглавной буквы считается переменной (неизвестной). В ответ на наш запрос получим:




X="страной"

1 Solution

Goal> _

Теперь выполним данный пример в программной среде VisualProlog (рис.3.1).


Рис.3.1. Пользовательский интерфейс Visual Prolog.


Усложним задачу:

ending ("ою"). ending ("а").

ending ("е"). ending ("у").

ending ("ами"). ending ("ах").

И повторим запрос:



Goal> decline ("стран", X)

X="страной"

X="страною"

X="страна"

X="стране"

X="страну"

X="странами"

X="странах"

7 Solutions

Goal> _

В результате система уже умеет склонять существительные (т.е. выполняет морфологический синтез). Но это ещё не всё. Очень полезное свойство ПРОЛОГа состоит в том, что одна и та же программа на ПРОЛОГе может быть использована для решения как прямой, так и обратной задачи. Пускай нам нужно получить основу слова программой. Для этого укажем его в качестве второго аргумента, а первый сделаем неизвестным:

Goal> decline (Base, "программой")

Base="программ"

1 Solution

Goal> _


В итоге данная программа умеет делать морфологический анализ.
Пример 2. Утверждения (опсиание окончания «ой») с использвоанием GNU Prolog.

ending('ой').

decline(Base,Word) :-

ending(Ending),atom_concat(Base,Ending,Word).


Одной из реализаций языка Prolog является GNU Prolog:

Основные команды:

[файл]. - загрузить файл с кодом программы(файл указывается без расширения «pl»)‏

trace. - включить режим трассировки программы.

notrace. - выключить режим трассировки программы.

halt. - завершить выполнение программы.

[user]. - войти в режим интерактивного ввода программы.

Control+D выход из режима интерактивного ввода программы
Трассировка программы:

В качестве примера, рассмотрим трассировку программы быстрой сортировки.


qsort( IN, OUT ) :- qsort_dl( IN, OUT, [] ).

qsort_dl( [X|M], R, R0 ) :-

partition( M, X, M1, M2 ),

qsort_dl( M2, R1, R0 ),

qsort_dl( M1, R, [X|R1] ).

qsort_dl( [], R, R ).

partition( [X|M], Y, [X|M1], M2 ) :-

X

partition( [X|M], Y, M1, [X|M2] ) :-

partition( M, Y, M1, M2 ).

partition( [], _, [], [] ).
Загрузка программы


Режим пошагового выполнения




Вклейте листинг исходного кода вашей программы

_______________________________________________________________________________


_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________

_______________________________________________________________________________


_______________________________________________________________________________
_______________________________________________________________________________
_______________________________________________________________________________


2. Обоснуйте использование метода логического вывода (прямой/обратный) в вашем проекте ________________________________________________________________________________

________________________________________________________________________________

________________________________________________________________________________
3. Дайте описание используемых принципов логического вывода и представления продукционных правил на языке логического программирования, описание методов и алгоритмов решения в вашем проекте

________________________________________________________________________________

________________________________________________________________________________

________________________________________________________________________________


4. Опишите особенности примененного подхода к извлечению знаний с необходимыми рисунками, диаграммами (деревья И/ИЛИ, деревья решений) и т.д.









_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________

_______________________________________


_______________________________________
_______________________________________
_______________________________________













_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________
_______________________________________

_______________________________________


_______________________________________





  1. Приведите полный текст программы согласно заданию в начале работы и протокол ее работы

При проектировании системы реализовать:

  • Построение системы по принципу отделения механизма логического вывода и представления знаний, т.е. реализация оболочки экспертной системы на языке логического программирования с последующим наполнением знаниями

  • Построение привлекательного (графического) пользовательского интерфейса с экспертной системой.

  • Использование смешанного (прямой + обратный) логического вывода

  • Обеспечить дополнение системы средствами ответов на вопросы КАК и ПОЧЕМУ, либо построение протокола логического вывода, содержащего обоснование принятых решений (т.е. какие правила были применены и почему).




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

(пример программы «FRUITS» на Прологе
%trace

/* Экспертная система FRUITS Автор: Смирнов Антон */


database

yes(string)

no(string)

maybe(string)


predicates

repeat


run

primacy(string)

fruit(string)

plod(string)

vegetables(string)

otvet(string)

positive(string)

negative(string)

xpositive(string)

xnegative(string)

ask(string, char)

remember(string, char)

delete_all
clauses

repeat.


Repeat:-repeat.

%--------------------------------------------------------------------------------

% Описание знаний о приматах

%--------------------------------------------------------------------------------

primacy(“Чикки”):-positive(“Живет в африке”),positive(“ест фрукт”), otvet(“Чикки”).

primacy(“Марк”):-positive(“Живет в Аризоне”),positive(“ест плод”), otvet(“Марк”).

primacy(“Решений не найдено”).

%--------------------------------------------------------------------------------


otvet(“Чикки”):-write(“Это Чикки \n”),delete_all,repeat,fruit(X), write(“Это ”, X, “\n”).

otvet(“Марк”):-write(“Это Марк \n”),delete_all,repeat,vegetables(X), write(“Это ”, X, “\n”).

%--------------------------------------------------------------------------------
%--------------------------------------------------------------------------------

fruit(“банан”):-positive(“имеет сладкий вкус”),positive(“имеет форму вытянутую”),positive(“имеет цвет желтый”),positive(“растет на пальме”).

fruit(“лимон”):-positive(“имеет вкус кислый”),positive(“имеет форму круглую”),positive(“имеет цвет желтый”),positive(“растет на дереве”).

fruit(“яблоко”):-positive(“имеет кисло-сладкий вкус”),positive(“имеет форму круглую”),positive(“имеет цвет светофорный”),positive(“растет на дереве”).

fruit(“киви”):-positive(“имеет вкус кислый”),positive(“имеет форму круглую”),positive(“имеет цвет зеленый”),positive(“растет на дереве”).
fruit(“Это не фрукт.”):-delete_all,reperat.

%--------------------------------------------------------------------------------


vegetables(“лук”):-positive(“имеет горький вкус”),positive(“имеет форму круглую”),positive(“имеет цвет золотистый”),positive(“растет в земле”).

vegetables(“картошка”):-positive(“имеет вкусный вкус”),positive(“имеет форму круглую”),positive(“имеет цвет нитратный”),positive(“растет в земле”).

vegetables(“капуста”):-positive(“имеет вкусный вкус”),positive(“имеет форму круглую”),positive(“имеет цвет зеленый”),positive(“растет на земле”).
vegetables(“Решений не найдено”).

%--------------------------------------------------------------------------------


% Работа с динамической базой знаний

positive(X):-xpositive(X),!; xnegative(X),!,fail; ask(X, ‘y’).

nagative(X):-xnegative(X),!; xpositive(X),!,fail; ask(X, ‘n’).

ask(X,R):-write(X,”(y/n)? :”),readchar(Reply), write(Reply,”\n”),

remember(X,Reply),R=Reply.
% Проверка присутствия фактов

xpositive(X):-yes(X).

xnegative(X):-no(X).
% Запоминание фактов

remember(X,’y’):-asserta(yes(X)).

Remember(X,’n’):-assertz(no(X)).
% Очищаем память от старых фактов

delete_all:-retract(yes(_)),delete_all.

delete_all:-retract(no(_)),delete_all.

delete_all.

%----------------------------------------------------------------
run:-delete_all,

repeat,


primacy(X),

write(“”),readchar(Z),

write(Z),nl,

Z=’y’.
goal

makewindow(1,10,12,”Экспертная система”,0,0,25,80),

write(“Лабораторная работа №2. выполнил студент ИУ4-82 Смирнов Антон”),nl,

write(“База знаний FRUITS”),nl,

write(“”),nl,

run.


Вклеить скриншоты с результатами работы программы











Контрольные вопросы
1. Формальная логика. Понятие. Суждение. Высказывание. Формальный язык, грамматика формального языка.

2. Логика предикатов. Интерпретация и унификация. Фразы Хорна. Принцип резолюции.

3. Парадигма декларативного программирования. Представление знаний с помощью фактов и правил. Управление вычислениями.

4. Простые и составные запросы. Понятие анонимной переменной.

5. Объекты данных. Структурирование множества объектов данных.

6. Рекурсивные вычисления.

7. Итерационные вычисления.

8. Рекурсивные структуры данных: списки. Способы обработки и примеры использования.

9. Рекурсивные структуры данных: деревья. Способы обработки и примеры использования.

10. Встроенные предикаты обработки символьных данных.

11. Встроенные предикаты управления вычислениями.

12. Способы представления баз знаний.

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

14. Создание графических изображений средствами языка Пролог.

15. Поиск на графах пространства состояний. Поиск в глубину и ширину.

16. Поиск на графах пространства состояний. Эвристический поиск.

17. Применение Пролога в естествознании.

18. Экспертные системы на правилах.

19. Экспертные системы на логике.

Список литературы

1. Адаменко А. Логическое программирование и Visual Prolog (+CD-ROM). BHV.

2. Попов Э.В. Экспертные системы: решение информационных задач в диалоге с ЭВМ. М.: Наука, 1987. 283 с.

3. Астаппн Н.И., Матвеев М.Г. Синтез задач ситуационного управления перерабатывающим предприятием // Научно-техн. сб. мясной и холодильной промышленности РА сельскохоз. наук. 1994. № 2. С. 19-22.

4. Айзерман М.А., Алесекров Ф.Т. Выбор вариантов. Основы теории. М.: Наука, 1990. 240 с.

5. Месарович М., Такахара Я. Общая теория систем: математичес­кие основы. М.: Мир, 1978. 311с.

6. Шоломов Л.А. Логические методы исследования дискретных моделей выбора. М.: Наука, 1989. 288 с.

7. Матвеев М.Г., Сысоев В.В. Концепция информационных технологий управления перерабатывающими производствами // Информационная бионика и моделирование. М.: ГОСИФТП РАН, 1995. С. 25-31.

8. Минский М. Фреймы для представления знаний. М., 1979.

9. Робототехника и гибкие автоматизированные производства: В 9 кн. Кн. б. Техническая имитация интеллекта / В.М. Назаретов. Д.П. Ким. Под ред. И.М. Макарова. М.: Высш. шк., 1986. 144 с.

10. Марселлус Д. Программирование экспертных систем на Турбо-ПРОЛОГЕ. М.: Финансы и статистика, 1994. 256 с.

Иван Братко «Программирование на языке Пролог для систем искусственного интеллекта»



11. Марселлус «Программирование экспертных систем на Прологе»

12. Нейлор «Как построить свою экспертную систему»


izumzum.ru