Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Министерство образования Российской Федерации
Пензенский государственный университет
Факультет заочного обучения
Кафедра «информационно- вычислительной системы»
Дисциплина «Системы искусственного интеллекта»
Отчет о лабораторных работах №1 и №2
Представление знаний и структура программы на языке Турбо Пролог.
Выполнил: ст. гр. 11ЗВЭ31
_______________Емашев В.Н.
Принял: к.т.н., доцент
______________Долгова И.А.
Г.Пенза 2014г.
Лабораторная работа № 1
Цель работы: Ознакомление со средой TurboProlog на примере простейшей программы
Описание программы:
Турбо Пролог является языком программирования ЭВМ пятого поколения, выводящим компьютерное программирование в новое измерение. Естественный логический подход Пролога к программированию позволяет начинающим и профессиональным программистам за удивительно короткое время создавать мощнейшие приложения. Теперь, благодаря Турбо Прологу, вы сможете разрабатывать такие программные продукты, как базы знаний, экспертные системы , пользовательские интерфейсы на естественном языке и системы искусственного интеллекта
Рассмотрим следующую простейшую программу Турбо Пролога. Вы будете использовать ее при изучении в общих чертах того, как создавать, запускать и редактировать программы на Турбо Прологе.
/*Ваша первая программа*/
Goal
Makewindow(1,7,7,”Моя первая программа”,4,56,14,22),nl,
Write(“Пожалуйста, введите свое\n имя, а затем нажмите\n Ввод.”),
Cursor(6,4), readln(Name),nl,
Write(“Добро пожаловать в\n Турбо Пролог,\n”, Name),nl.
Первое, что вы должны сделать - это ввести свою программу в редактор, поэтому необходимо активизировать окно редактирования. Нажмем Alt-E. По умолчанию, Турбо Пролог всегда запускает редактор с пустым файлом с
именем WORK.PRO. Заметим, что окно редактирования выделено двойной
рамкой, а нижняя строка соответствует "горячим" клавишам редактора. Как только мы убедитесь, что текст программы введен правильно, нажмем Alt-R. Если вы ввели программу правильно, она откомпилируется, затем запустится.
Трассирование- Это встроенное в Турбо Пролог диагностическое средство, позволяющее вам просматривать программу "по шагам". Используя трассирование вы "идете" по программе в соответствии с логикой работы Турбо Пролога, т. е. так, как он выполняет программу: вы можете непосредственно увидеть, что делает система, пытаясь разрешить задачу.
Каждый (трассированный шаг отображается в окне трассировки; для выполнения каждого следующего шага вы нажимаете F10. Для трассирования программы вы должны в начало своей программы вставить директиву компилятора "trace". Теперь попытайтесь выполнить трассировку этой программы. Для ее запуска нажмите Alt-R.
Текст программы приведен на рис 1.
Рис. 1 текст программы
Вывод: Ознакомились со средой Турбо Пролога, выполнили трассирование простой программы.
Лабораторная работа № 2
Лиса живет в лесу, волк тоже живет в лесу. Заяц живет там же где лиса и волк. Лиса и волк - хищники. Заяц травоядный. Заяц живет там же где и волк. Лиса ест то же что и волк.
Определить:
2 Техническое задание
Входные данные отсутствуют
Для контроля правильности работы программы необходимо ввести запрос в диалоговое окно Турбо Пролога, предварительно аналитическим образом получив результат. Если результаты совпадут, то это означает, что программа работает верно.
3 Описание программы
3.1 Общие сведения
Программа Lab2 разработана в среде ТУРБО ПРОЛОГ, ее текст содержится в каталоге D:\Лабораторки ИИС\laba2.pro и приведен в приложении А.
4.2 Функциональное назначение
Разработанная программа предназначена для получения ответов на запросы пользователя, запросы могут быть следующими:
1.Где живет заяц?
2. Что едят волк и лиса?
4.3 Описание логической структуры
Программа на языке Турбо Пролог может состоять из следующих
секций:
domains, predicates, clauses, goal, constans.
Программа lab2.pro написана с использованием следующих секций: В секции domains описаны следующие стандартные домены(типы): animal, les типа string, для объявления имени человека и предмета соответственно, так же volk, lisa, zayac типа integer для определения возраста.
В секции predicates объявляются предикаты, которые будут использоваться в секции clauses, задается имя предиката и аргументы предиката:
life(lisa,les)
est(lisazayac)
hishnic(volk,lisa)
Секция Clauses содержит факты и правила программы, с которыми будет работать Турбо Пролог, пытаясь разрешить цель программы.
Life (lisa, les)- Лиса живет в лесу.
Life (volk, les)- Волк живет в лесу.
Hishnik (volk)- Волк хищник.
Travoyadniy (zayac)- заяц травоядный.
Est (lisa, zayac)- Лиса ест зайца.
5 Программа и методика испытаний
Для проверки правильности работы программы в диалоговое окно Турбо Пролога нужно ввести 2 запроса, простой и составной, предварительно аналитическим способом получив результат.
Результаты работы приведены на рисунке Б1.
Таким образом, можно сделать вывод, что программа работает правильно.
6. ответы на контрольные вопросы.
7.1 Контрольные вопросы по второму разделу
1. Какие средства используются в языке Турбо Пролог для представления знаний?
Для представления знаний в языке Турбо Пролог используются факты и
правила. Пролог базируется на формальной системе, называемой исчислением
предикатов, которое является наиболее распространенной системой для
представления знаний в формальном виде. Для преобразования фразы
естественного языка в утверждение исчисления предикатов вы прежде всего
исключаете из предложения все несущественные слова. Затем вы
преобразуете это предложение, ставя на первое моего имя отношения, а после
нею (в скобках) - объекты, связанные этим отношением. Порядок следования имен объектов может быть произвольным, но выбрав в начале определенный порядок, необходимо следовать ему далее. Как предложения и факты должны завершаться точкой, факты помимо связей могут выражать и свойства.
2. Какая разница между внешней и внутренней целями?
Секция goal - это та, в которой вы задаете внутреннюю цель своей программы, что позволяет программе запускаться независимо от среды разработки. До сих пор вы вводили цели в ответ на приглашение в диалоговом окне "Goal:". Такие цели называются внешними, так как вы должны вводить их во время работы программы. Использование внешних целей весьма удобно в случаях, когда вы хотите запускать свои программы из среды разработки Турбо Пролога. Однако, если вы планируете получить автономную исполняемую программу, то при ее выполнении вы, очевидно, не увидите приглашения "Goal:" и вам необходимо включить секцию Goal в эту программу. Цели, заданные в этой секции, называются внутренними целями,
так как они являются частью исходного текста вашей программы и в ней же компилируются.
В Прологе имеется несколько возможностей сопоставления одной структуры с другой. Ясно, что идентичные структуры сопоставимы
(сравнимы) друг с другом:
est (lisa, zayac) сопоставимо с est (lisa, Н)
Однако сопоставление (сравнение) обычно использует одну или несколько свободных переменных. Например, если Н свободна, то est(lisa,H) сопоставимо с est( lisa, zayac) и Н принимает значение (связывается с)
Если же Н уже связана, то она действует так же, как и обычная константа.
Таким образом, если Н связана со значением «zayac», то est (lisa, H) сопоставимо с est(lisa,volk). Сопоставление не выполняется, так как, если переменные становятся связанной, то ее значения не может изменяться.
Как может переменная оказаться уже связанно при попытке Пролога сопоставления ее с чем либо? Переменные не могут хранить значения, так как они становятся связанными только на промежуток времени, необходимый для
отыскания (или попытки отыскания) одного решения, одной цели. Поэтому, имеется только одна возможность того, что переменная может оказаться связанной перед попыткой сопоставления - если цель требует больше одного шага, и переменная стала связанной на предыдущем шаге. Например,
est (lisa, H) and like (Н, volk) является корректной целью. Она означает:
"Найти того, кого ест лиса и того, кого ест волк". Здесь при достижении
подцели est (H, volk) переменная Н уже будет связана. Если для подцели est
(Н, volk) нет решений, - Пролог "освободит" переменную Н и вернется назад,
пытаясь найти новое решение для est(lisa,H), а затем проверит, будет ли
доказываться цель est(H, volk) с новым значением Н.
Две свободные переменные могут сопоставляться друг с другом. Например, est(lisa, Н) сопоставляется с est(lisa, О), связывая при этом переменные Н и О между собой. С момента "связывания" Н и О трактуются как одна переменная и любое изменение значения одной из них приводит к немедленному соответствующему изменению другой. В случае подобного "связывания" между собой нескольких свободных переменных - они называются связанными свободными переменными.
До тех пор, пока переменная не получила какого-либо значения, она называется "свободной". Когда же переменная примет значение - она становится "связанной". Однако она остается связанной только до определенною момента, после которого переменная "освобождается". Это очень важный момент: вы не можете хранить, информацию, задавая значения переменным. Переменные служат частью процесса "сопоставления образцов", а не "хранилищем" какого либо типа.
В Прологе связывание переменных (со значениями) производится двумя
способами; на входе и выходе. Направление, в котором передаются значения.
указывается в "шаблоне потока параметров". Когда переменная передается в
предложение - она считается входным параметром и обозначается i когда
же переменная возвращается из предложения - она является выходным параметром и обозначается (о).
6.2 Контрольные вопросы по третьему разделу
Обычно, программа на языке Турбо Пролог состоит из трех или четырех основных программных секций. К ним относятся: секции “clauses” (предложений), “predicates”, “domains” и, часто, секция “goal” (используется при создании автономных используемых программ).
Секция доменов служит для объявления всех используемых вами доменов, не являющихся стандартными доменами Турбо Пролога.
Секция предукаты это та, в которой вы обьявляете структуру своих предикатов. (Вам не нужно декларировать предикаты, встроенные в Турбо Пролог,) В этой секции программы просто перечисляются все предметы указания типов их аргументов.
Секция clauses - это ядро программы, содержащее факты и правила, с которыми будет работать Турбо Пролог, пытаясь разрешить цель программы.
Секция goal - это та, в которой вы сдаете внутреннюю цель своей программы, что позволяет программе запускаться независимо от среды разработки.
Язык Турбо Пролог поддерживает несколько директив компилятора, которые вы можете добавлять в свою программу для сообщения специальных
сведений по трактовке вашей программы при ее компиляции: include, trace, shorttrace.
З.Какие стандартные типы данных допускаются в языке Турбо Пролог?
Стандартные типы данных: char, integer, real, string, symbol.
Char - символ, заключенный между двумя одиночными кавычками,
String - строка, состоящая из любой последовательности символов.
записанных между парой удвоенных кавычек, Integer - целое число от -32,768 до 32,767,
Real - числа с необязательным знаком (+ или -), за которым следу* несколько цифр, затем - необязательная десятичная точка (.) и еще цифры . за которыми - необязательная экспоненциальная часть е+-,
Simbol индентификаторы, допускаются 2 формата:
4. Каким образом объявляются константы в языке Турбо Пролог? Секция для объявления констант обозначается ключевым словом constants, за которым следуют сами объявления, использующие следующий синтаксис:
<id> = <макроописание>,
где <Id> - имя символической константы, а <макроописание> - это то, что вы присваиваете этой константе.
Основная форма объявления доменов имеет следующий вид: domains
аргумент типа1,..., аргумент типа М = Стандартный домен> аргумент 1,..., аргумент N = <составной домен 1> <составной домен 2> <составной домен N>.
Заключение
В соответствии с результатами работы программы можно сделать вывод что разработанная программа laba2.рrо решает заложенные в нее ноли, а требования технического задания выполнены в полном объеме.
ТЕКСТ ПРОГРАММЫ
Приложение А
(обязательное)
domains
animal = string.
sreda = string.
volk, lisa, zayac = integer.
predicates
life(lisa,les).
life (volk,les).
hishnik (volk).
hishnik (lisa).
travoyadny (zayac).
est (lisa,zayac).
clauses
life (lisa,les).
life (volk,les).
life (zayac, Y) if life (volk, Y).
hishnik (volk).
travoyadny (zayac).
est (lisa, zayac).
est (volk, X) if est (lisa, X).
РЕЗУЛЬТАТ ИСПЫТАНИЙ
Приложение Б.
(Обязательное)
Рисунок Б.1 - Результат работы программы