ИИС. Интеллектуальные информационные системы,. Отчет по дисциплине Интеллектуальные информационные системы студентка группы 19зис веденяпина Ю. Р
Скачать 21.49 Kb.
|
Министерство науки и высшего образования Российской Федерации Пензенский казачий институт технологий (филиал) ФГБОУ ВО «Московский государственный университет технологий и управления им. К.Г. Разумовского (Первый казачий университет)» Отчет по дисциплине: «Интеллектуальные информационные системы» Выполнила: студентка группы 19ЗИС Веденяпина Ю.Р. Проверил: к.п.н. доц. Акимова И.В. Пенза 2022 Динамические предикаты в Prolog. Динамический класс - класс, способный порождать объекты (экземпляры или точные копии), Динамические классы могут содержать как статические, так и динамические предикаты, а также статические и динамические факты. Каждый экземпляр динамического класса содержит свою копию динамического предиката и свою копию динамического раздела фактов. Создание объекта (экземпляра или копии класса) осуществляется вызовом предиката-конструктора. Как правило, это предикат-функция new(), но может быть и любой другой, объявленный как конструктор в разделе constructors декларации класса. Например, класс dynamicClass является динамическим классом, что определяется конструкцией dynamicClass:justInterface. class dynamicClass:justInterface end class dynamicClass implement dynamicClass end implement dynamicClass interface justInterface end interface justInterface Опять-таки, синтаксически все правильно, но практически бесполезно. Теперь добавим какие-нибудь полезности и вынесем вперед декларацию интерфейса. interface justInterface predicates visibleDynamicPred:(). end interface justInterface class dynamicClass:justInterface predicates visibleStaticPred:(). end class dynamicClass implement dynamicClass clauses visibleStaticPred():- invisibleStaticPred(), clauses visibleDynamicPred():- invisibleStaticPred(), class predicates invisibleStaticPred:(). clauses invisibleStaticPred():- predicates invisibleDynamicPred:(). clauses invisibleDynamicPred():- end implement dynamicClass Работа с базами данных в Prolog. Пролог-программу можно рассматривать как реляционную базу данных: описание отношений частично присутствует в ней в явном виде (факты), а частично – в неявном (правила). База данных Пролога содержит набор основных, заранее определённых отношений. Кроме того, резервируется пространство для добавления предикатов, которые будут объявлены пользователем. Встроенные предикаты дают возможность корректировать базу данных в процессе выполнения программы. Операции для работы с утверждениями, заданными пользователем, классифицируются следующим образом: 1. Добавление утверждений из диалога с пользователем и удаление существующих утверждений. 2. Добавление утверждений из файла и замена имеющихся утверждений на находящиеся в файлах утверждения для того же самого предиката. Для предиката базы данных существуют связанные с ним факты. В любой момент времени факт содержит в точности такие значения аргументов, для которых предикат является истинным. В программе на Прологе существует специальная секция, обозначаемая ключевым словом database, которое определяет начало последовательности объявлений описывающих базу данных предикатов. Доменные имена аргументов предиката базы данных должны быть объявлены в секции domains. Соответствующие предикатам базы данных факты помещаются в специальную область оперативной памяти, которая называется внутренней базой данных. По умолчанию ей присваивается стандартное имя dbasedom. Допускается наличие нескольких секций database. В этом случае только одна секция может быть безымянной, для остальных – следует явно указать имя. Имена секций и предикатов во внутренней базе данных должны быть уникальными. В различных секциях запрещено использование одинаковых имен предикатов. Предикаты динамической базы данных можно использовать в программе точно так же, как и другие предикаты Пролога. Пространство состояний задачи. Пространством состояний задачи называется граф такой, что решение задачи сводится к поиску в нем пути с определенными свойствами. В пространстве состояний задачи вершины графа соответствуют ситуациям, а дуги — переходам от одних ситуаций к другим - этапам решения задачи. Одному или нескольким начальным состояниям, соответствующим исходной информации поставленной задачи, сопоставляется система корневых вершин графа. Граф также включает одну или несколько целевых вершин, соответствующих завершающей ситуации решения исходной задачи. Поиск в пространстве состояний характеризует решение задачи как процесс нахождения пути от начального состояния к целевому. Поиск в глубину и его реализация в Prolog. Поиск в глубину является естественным для языка Пролог, он используется машиной вывода Пролога для вычисления целей. Поэтому поиск в глубину путей на графах реализуется в языке Пролог наиболее просто. Мы говорим "в глубину", имея в виду тот порядок, в котором рассматриваются альтернативы в пространстве состояний. Всегда, когда алгоритму поиска в глубину надлежит выбрать из нескольких вершин ту, в которую следует перейти для продолжения поиска, он предпочитает самую "глубокую" из них. Самая глубокая вершина — это вершина, расположенная дальше других от стартовой вершины. Поиск в глубину наиболее адекватен рекурсивному стилю программирования, принятому в Прологе. Причина этого состоит в том, что, обрабатывая цели, пролог-система сама просматривает альтернативы именно в глубину. Поиск в глубину прост, его легко программировать, и он в некоторых случаях хорошо работает. Программа для решения задачи о восьми ферзях фактически была примером поиска в глубину. Для того, чтобы можно было применить к этой задаче описанную выше процедуру решить, необходимо сформулировать задачу в терминах пространства состояний. Это можно сделать так: • вершины пространства состояний — позиции, в которых поставлено 0 или более ферзей на нескольких последовательно расположенных горизонтальных линиях доски; • вершина-преемник данной вершины может быть получена из нее после того, как в соответствующей позиции на следующую горизонтальную линию доски будет поставлен еще один ферзь, причем таким образом, чтобы ни один из уже поставленных ферзей не оказался под боем; • стартовая вершина — пустая доска (представляется пустым списком); • целевая вершина — любая позиция с восемью ферзями (правило получения вершины-преемника гарантирует, что ферзи не бьют друг друга). Поиск в ширину и его реализация в Prolog. В противоположность поиску в глубину стратегия поиска в ширину предусматривает переход в первую очередь к вершинам, ближайший к стартовой вершине. В результате процесс поиска имеет тенденцию развиваться более в ширину, чем в глубину. Поиск в ширину программируется не так легко, как поиск в глубину. Причина состоят в том, что нам приходится сохранять все множество альтернативных вершин-кандидатов, а не только одну вершину, как при поиске в глубину. Более того, если мы желаем получить при помощи процесса поиска решающий путь, то одного множества вершин недостаточно. Поэтому мы будем хранить не множество вершин-кандидатов, а множество путей-кандидатов. Эвристический поиск Prolog Поиск в графах при решении задач, как правило, невозможен без решения проблемы комбинаторной сложности , возникающей из-за быстрого роста числа альтернатив. Эффективным средством борьбы с этим служит эвристический поиск. Один из путей использования эвристической информации о задаче - это получение численных эвристических оценок для вершин пространства состояний. Оценка вершины указывает нам, насколько данная вершина перспективна с точки зрения достижения цели. Идея состоит в том, чтобы всегда продолжать поиск, начиная с наиболее перспективной вершины, выбранной из всего множества кандидатов. Именно на этом принципе основана программа поиска с предпочтением. Программу поиска с предпочтением можно получить как результат усовершенствования программы поиска в ширину. Подобно поиску в ширину, поиск с предпочтением начинается со стартовой вершины и использует множество путей-кандидатов. В то время, как поиск в ширину всегда выбирает для продолжения самый короткий путь (т.е. переходит в вершины наименьшей глубины), поиск с предпочтением вносит в этот принцип следующее усовершенствование: для каждого кандидата вычисляется оценка и для продолжения выбирается кандидат с наилучшей оценкой. |