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




Скачать 96.64 Kb.
НазваниеЛабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog»
Дата публикации09.05.2013
Размер96.64 Kb.
ТипЛабораторная работа
vbibl.ru > Физика > Лабораторная работа
Лабораторная работа № 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. Нейлор «Как построить свою экспертную систему»

Добавить документ в свой блог или на сайт

Похожие:

Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog» iconЛабораторная работа №2
Ознакомление с технологией создания настольных приложений Windows Form на языке С# в среде разработки ms visual Studio. Net

Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog» iconСтруктура программы на языке пролог цель работы
...

Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog» iconЛабораторная работа №1
Создание и отладка консольных приложений в интегрированной среде ms visual Studio. Net 2005

Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog» iconЛабораторная работа №5
Программирование циклических вычислительных процессов с использованием массивов и матриц

Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog» iconПоляков Д. Б., Круглов И. Ю. Программирование в среде турбо паскаль (версия 5)
Зуев Е. А. Программирование на языке turbo pascal 0, М.: Радио и связь, 1993. 384

Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog» iconЛабораторная работа №2 простое наследование задание. Реализовать...
Задание. Реализовать классы на языке C++, описанные в вариантах заданий. На примере создания объектов этих классов продемонстрировать...

Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog» iconКафедра компьютерных систем и программных технологий Курсовая работа...
Целью данного проекта является разработка проекта с графическим интерфейсом на языке C++ на примере игры «Sunny Seeds»

Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog» iconЛабораторная работа №5
Ознакомление с Web сервисами (Web-службами) xml и получение практических навыков создания и использования Web-сервисов на базе asp....

Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog» iconЛабораторная работа Функции в C++
Повторить возможности по созданию программ интегрированной среды разработки программ C++ Builder; повторить основные принципы создания...

Лабораторная работа №6 Итоговое задание «Логическое программирование на языке Visual Prolog» iconМосковский государственный строительный университет
Контрольное мероприятиеПреподавательОтметка о зачетеПодписьЛабораторная работа 1Лабораторная работа 2Лабораторная работа 3Лабораторная...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
vbibl.ru
Главная страница