ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 16.05.2021
Просмотров: 2455
Скачиваний: 23
СОДЕРЖАНИЕ
.1.Основные элементы программирования в CLIPS
.2.Наблюдение за процессом интерпретации программы
.4.Задачи на планирование действий
.5.Пример программы по планированию действий робота – "Робот и ящик"
.6.Порядок выполнения работы. Задания
.7.Элементы математической логики. Логика высказываний
.8.Примеры программ логического доказательства
.10.Эвристический алгоритм поиска в пространстве состояний
.11.Пример решения задачи поиска в пространстве состояний
.13.Использование объектно-ориентированных средств в CLIPS
.14.Пример объектно-ориентированного программирования в CLIPS.
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
“ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ”
Вахтин А.А., Гаршина В.В.
ЛАБОРАТОРНЫЙ
ПРАКТИКУМ
ПО ПРОГРАММИРОВАНИЮ НА
ЯЗЫКЕ CLIPS
ДЛЯ КУРСА «ПРЕДСТАВЛЕНИЕ ЗНАНИЙ
В
ИНФОРМАЦИОННЫХ СИСТЕМАХ»
Учебно-методическое пособие для вузов
Воронеж 2010
Утверждено научно-методическим советом факультета компьютерных наук, 19 марта 2010 г., протокол №20
Рецензент: д.ф.м.н., проф. зав каф. Программного обеспечения и администрирования информационных систем ВГУ , Артемов М.А.
Учебно-методическое пособие подготовлено на кафедре программирования и информационных технологий факультета компьютерных наук Воронежского государственного университета.
Рекомендовано для проведения лабораторных занятий по предметам ”Представление знаний информационных систем”, “Разработка экспертных систем”, ”Интеллектуальные информационные системы” со студентами 4 и 5 курсов дневного отделения факультета компьютерных наук.
Для специальностей 230201 (071900) – информационные системы и технологии и 230200 (654700)- информационные системы (бакалавр)
Введение
Название языка CLIPS — аббревиатура от С Language Integrated Production System. Язык был разработан в Центре космических исследований NASA (NASA's Johnson Space Center) в середине 1980-х годов и во многом сходен с языками, созданными на базе LISP, в частности OPS5 и ART. Использование С в качестве языка реализации объясняется тем, что компилятор LISP не поддерживается частью распространенных платформ, а также сложностью интеграции LISP-кода в приложения, которые используют отличный от LISP язык программирования. Хотя в то время на рынке уже появились программные средства для задач искусственного интеллекта, разработанные на языке С, специалисты из NASA решили создать такой продукт самостоятельно. Разработанная ими система в настоящее время доступна во всем мире, и нужно сказать, что по своим возможностям она не уступает множеству гораздо более дорогих коммерческих продуктов (http://www.ghgcorp.com/clips/CLIPS.html).
-
Основные теоретические сведения
CLIPS использует продукционную модель представления знаний, которая реализуется следующими основными компонентами языка описания правил:
-
база фактов (fact base);
-
база правил (rule base):
-
блок вывода (машина логического вывода).
На них возлагаются следующие функции: база фактов представляет исходное состояние проблемы, база правил содержит операторы, которые преобразуют состояние проблемы, приводя его к решению. Машина логического вывода CLIPS сопоставляет эти факты и правила и выясняет, какие из правил можно активизировать. Это выполняется циклически, причем к цикл состоит из трех шагов:
(1) сопоставление фактов и правил;
(2) выбор правила, подлежащего активизации;
(3) выполнение действий, предписанных правилом.
Такой трехшаговый циклический процесс иногда называют "циклом распознавание‑действие".
Принципиальным отличием данной системы от аналогов является то, что она полностью реализована на языке С. Причем исходные тексты ее программ опубликованы в Internet.
В CLIPS используется оригинальный LISP – подобный язык программирования, ориентированный на разработку экспертных систем (ЭС). CLIPS поддерживает две парадигмы программирования: объектно-ориентированную и процедурную.
.1.Основные элементы программирования в CLIPS
CLIPS предоставляет три основных элемента для написания программ:
Простые типы данных;
Конструкции для пополнения базы знаний;
Функции для манипулирования данными.
-
Простые типы данных
Для представления информации в CLIPS предусмотрено восемь простых типов данных: Float, integer, symbol, string, external-address, fact-address, instance-name, instance-address.
При записи числа используются цифры (0-9), десятичная точка (.), знак (-,+), (е).
Любое число, состоящее только из цифр, перед которыми стоит знак, сохраняется как целое (В CLIPS – integer, в С – long integer). Все остальные числа сохраняются как Float (в С – double Float). Symbol – последовательность символов кода ASCII, причем как только в этой последовательности встречается символ-разделитель, symbol заканчивается. Символы-разделители: пробел, табуляция, двойные кавычки, (, ), &, |, <, >, ~, ;.
String – последовательность символов, заключенных в двойные кавычки (“a and b”). Причем, если внутри строки встречаются двойные кавычки, то перед ними надо поместить символ (\) (“a and \”b”).
-
Работа с базой знаний в CLIPS. Факты
Факт представляет собой основную единицу данных, используемую правилами. Факты помещаются в текущий список фактов fact-list. Количество фактов с списке и объем информации, содержащейся в факте ограничивается только размером памяти компьютера.
Факт может описываться индексом или адресом. Всякий раз, когда факт добавляется (изменяется) ему присваивается уникальный целочисленный индекс. Индексы в fact-list начинаются с нуля.
Идентификатор факта – это короткая запись факта, которая состоит из символа факта – f и индекса факта (f-10). Например:
f-0 (today is Sunday)
f-1 (weather is warm)
Факты представимы в двух форматах: позиционные и непозиционные.
Позиционные факты – состоят из выражения символьного типа, за которым следует последовательность (возможно, пустая) из полей, разделенных пробелами. Вся запись заключается в скобки. Для того чтобы обратиться к информации, содержащейся в позиционном факте, пользователь должен знать какие данные содержаться в факте и в каком поле они хранятся.
Пример:
(altitude is 10000 feet)
(grocery_list bread milk eggs)
(today is Sunday)
(weather is warm)
Поля в позиционных фактах могут быть любого простого типа, за исключением первого поля, которое всегда должно быть типа symbol.
В тексте программы факты можно включать в базу не по одиночке, а целым массивом. Для этого в CLIPS имеется команда deffacts.
(deffacts today
(today is Sunday)
(weather is warm)
)
Выражение начинается с команды deffacts, затем приводится имя списка фактов, который программист собирается определить (в нашем примере – today), а за ним следуют элементы списка, причем их количество не ограничивается.
В CLIPS существуют следующие зарезервированные слова, которые не могут использоваться как первое поле любого факта: test, and, or, not, declare, logical, object, exists, forall.
Непозиционные факты (шаблонные факты) – реализуются через конструкцию, подобную структуре или записи в языках С и Паскаль. Шаблонные факты позволяют задавать имена каждому из полей факта.
Для задания шаблона, который затем может использоваться при доступе к полям по именам, используется конструкция
(deftemplate <name>)
(slot-1)
(slot-2)
. . . . . . . . . .
(slot-N)
где <name> – имя шаблона, (slot-N) – именованное поле (или слот). Слоты могут быть ограничены по типу, значению, числовому диапазону, могут содержать значение по умолчанию. Порядок следования слотов значения не имеет.
Пример:
(deftemplate student
“a student record”
(slot name (type STRING))
(slot age (type NUMBER) (default 18))
)
Каждое определение шаблона состоит из произвольного имени шаблона, необязательного комментария и некоторого количества определений слотов (начинаются с ключевого слова slot или field). Слот включает поле данных, например name, и тип данных, например STRING. Можно указать и значение по умолчанию, как в приведенном выше примере, где возраст студента по умолчанию равен 18.
Если в программу включено приведенное выше определение шаблона, то выражение
(deffacts students
(student (name “fred”))
(student (name “jack”) (age 19))
)
приведет к тому, что в базу фактов после выполнения команды reset будет добавлено
(student (name “fred”) (age 18))
(student (name “jack”) (age 19))
-
Операции над фактами
Факты можно добавлять к списку фактов (assert), удалять из списка фактов (retract), изменять (modify), дублировать (duplicate)
Рассмотрим работу с базой фактов в CLIPS на практике. Сразу после запуска CLIPS-приложения (clipswin.exe) на выполнение на экране появится сообщение, извещающее пользователя, что он работает с интерпретатором.
CLIPS>
В режиме интерпретатора пользователь может использовать множество команд, так можно включить в базу фактов прямо из командной строки с помощью assert, например:
CLIPS> (assert (today is Sunday))
<Fact-0>
CLIPS> (assert (weather is warm))
<Fact-l>
Для вывода списка фактов, имеющихся в базе, используется команда facts:
CLIPS> (facts)
f-0 (today is Sunday)
f-1 (weather is warm)
Для удаления фактов из базы используется команда retract.
CLIPS> (retract 1)
CLIPS> (facts)
f-0 (today is Sunday)
Эти же команды, assert и retract, используются в выполняемой части правила (заключении правила) и с их помощью выполняется программное изменение базы фактов.
Часто приходится пользоваться и другой командой интерпретатора, clear, которая очищает базу фактов (как правило, эта команда доступна в одном из выпадающих меню).
CLIPS> (clear)
CLIPS> (facts)
Массив фактов можно удалить из базы командой undeffacts. Например, если в программе был введен массив фактов с именем today:
(deffacts today
(today is Sunday)
(weather is warm)
)
который необходимо удалить, то в командной строке необходимо ввести следующую команду:
CLIPS> (undeffacts today)
Выражение deffacts можно вводить и в командную строку интерпретатора, но лучше записать его в текстовый файл с помощью редактора CLIPS или любого другого текстового редактора (файлы имеют расширение .clp). Загрузить этот файл в дальнейшем можно с помощью команды в меню File либо из командной строки.
CLIPS> (load “my file”)
Однако после загрузки файла факты не передаются сразу же в базу фактов CLIPS. Команда deffacts просто указывает интерпретатору, что существует массив today, который содержит множество фактов. Собственно загрузка выполняется командой reset.
CLIPS> (reset)
Команда reset сначала очищает базу фактов, а затем включает в нее факты из всех ранее загруженных массивов. Она также добавляет в базу единственный определенный системой факт:
f-0 (initial-fact)
Это делается по умолчанию, поскольку иногда имеет смысл включить в программу правило start rule, которое может быть сопоставлено с этим фактом и позволит выполнить какие-либо инициализирующие операции.
Можно проследить, как выполняется команда reset, если перед выполнением приведенных выше команд установить режим слежения среды разработки. Для этого нужно вызвать команду Watch из меню Execution и установить в ней флажок Facts.
-
Работа с базой правил. Правила