![](/user_photo/_userpic.png)
отчет2
.docxМинистерство образования Республики Беларусь
УО «Полоцкий государственный университет»
Факультет информационных технологий
Кафедра вычислительных систем и сетей
ОТЧЕТ
О выполнении лабораторной работы №2 по дисциплине
«Интеллектуальные информационные системы»
на тему «Знакомство со средой CLIPS. Работа с фактами в среде CLIPS»
Выполнил студент группы
Проверил
Полоцк
Цель работы: научиться общим приемам работы в среде CLIPS. Научиться использовать имеющиеся возможности CLIPS для работы с правилами. Изучить представление правил и их внутренние алгоритмы обработки, стратегии разрешения конфликтов, синтаксис левой части (LHS). Научиться использовать команды и функции для работы с правилами.
Задание: Используя условные элементы test, and, or, not, exist, forall, logical составьте 10 правил, описывающих предметную область, заданную преподавателем.
Определим правило при помощи конструктора defrule, которое будет выводить список людей, имеющих кредит. Определение правила и его выполнение представлено на рисунке 1. Для тестирования правил будем использовать факты из лабораторной работы №1.
Данный конструктор имеет следующий вид:
(defrule
<имя-правила>
[<комментарии>]
[<определение-свойства-правила>]
<предпосылки> ; левая часть правила
=>
<следствие> ; правая часть правила
)
Для реализации правила используем условный элемент test, который предоставляет возможность наложения дополнительных ограничений на слоты фактов или объектов. Элемент test удовлетворяется, если вызванная в нем функция возвращает значение не-FALSE. Как и в случае предикатных ограничений образца в условном элементе test, можно использовать переменные, уже связанные со своими значениями. Внутри элемента test могут быть выполнены различные логические операции, например сравнения переменных.
Условный элемент test определяем следующим образом:
<условный-элемент-test> ::= (test <вызов-функции>)
Рисунок 1 – Определение правила «borrowers» и его выполнение.
Аналогичным образом определим правило для вывода списка вкладчиков (рисунок 2).
Рисунок 2 – Определение правила «depositors» и его выполнение.
Используя условный элемент or, зададим правила для вывода хороших и плохих заёмщиков (рисунки 3 и 4). Условный элемент or позволяет активировать правило любым из нескольких заданных условных элементов. Если какой-нибудь из условных элементов, объединенных с помощью or, удовлетворен, то и все выражение or считается удовлетворенным. В этом случае, если все остальные условные элементы, входящие в левую часть правила (но не входящие в or), также удовлетворены, правило будет активировано. Условный элемент or может объединять любое количество элементов.
Синтаксис условного элемента or:
<условный-элемент-оr> ::= (or <условный-элемент>+)
Рисунок 3 – Определение правила «bad-borrowers» и его выполнение.
Рисунок 4 – Определение правила «good-borrowers» и его выполнение.
Определим правило при помощи конструктора defrule, которое будет выводить список людей, имеющих недвижимость в количестве не менее 4. Такие люди будут иметь VIP статус при обслуживании. Определение правила и его выполнение представлено на рисунке 5. Для определения правила будем использовать уже известный условный элемент test.
Рисунок 5 – Определение правила «vip» и его выполнение.
Следующим определим правило проверяющее список фактов на наличие неиспользуемых — фактов со значением 0 (рисунок 6). Если таких фактов нет будет выведено сообщение «All right». Для его реализации используем условные элементы forall и not. Условный элемент forall позволяет определить, что некоторое заданное условие выполняется для всех заданных условных элементов.
Синтаксис условного элемента forall:
<условный-элемент-forall> ::=(forall <условный-элемент>
<условный-элемент>+)
Когда необходимо запустить правило, если образец или другой условный элемент не удовлетворяется (например, факт не существует) можно использовать условный элемент not, который предоставляет эту возможность. Элемент not удовлетворяется, только если условный элемент, который он содержит, не удовлетворяется.
Синтаксис условного элемента not:
<условный-элемент-not> ::=(not <условный-элемент>)
Рисунок 6 – Определение правила «useless-facts» и его выполнение.
Реализуем правило, удаляющее факты о задержках по возвратам кредитов «delete-delays». Определение и выполнение представлено на рисунке 7.
Рисунок 7 – Определение правила «delete-delays» и его выполнение.
Реализуем правило «bad-credits», выводящее кредиты заёмщики которых потеряли работу. Используем условный элемент exists. Условный элемент exists позволяет определить, существует ли хотя бы один набор данных (фактов или объектов), которые удовлетворяют условным элементам, заданным внутри элемента exists. Для тестирования также добавим новый факт при помощи команды assert. Определение и выполнение правила представлено на рисунке 8.
Синтаксис условного элемента exists:
<ycлoвный-элeмeнт-exists> ::=(exists <условный-элемент>+)
Рисунок 8 – Определение правила «bad-credits» и его выполнение.
Определим правило, находящее людей, которые выплачивали кредит досрочно и при этом не задерживали выплат ранее. Таким людям будет выдан кредит на более выгодных условиях. Определение и выполнение правила представлено на рисунке 9.
Рисунок 9 – Определение правила «discount» и его выполнение.
Создадим правило, находящее факты с одинаковыми «rule» и объединяющее факты в один, складывая значения. Определение и выполнение правила представлено на рисунке 10.
Рисунок 10 – Определение правила «combine-facts» и его выполнение.
Определим правило «add-data», находящее заёмщиков, которые просрочили выплату по кредиту и не имеющих записей о наличии кредита. Правило будет исправлять такую ошибку добавляя запись о кредите. После удаления записи о просрочке, запись о кредите также будет удаляться. Для реализации правила используем условный элемент logical.
Условный элемент logical предоставляет механизм поддержки достоверности для созданных правилом данных (фактов или объектов), удовлетворяющих образцам. Данные, созданные в правой части правила, могут иметь логическую зависимость от данных, удовлетворивших образцы в левой части правила. Такая зависимость называется логической поддержкой. Данные могут зависеть от группы данных или нескольких групп данных, удовлетворивших одно или несколько правил. Если удаляются данные, которые поддерживают некоторые другие данные, то зависимые данные также автоматически удаляются.
Синтаксис условного элемента logical:
<условный-элемент-logical> ::=(logical <условный-элемент>+)
Рисунок 11 – Определение правила «add-data» и его выполнение.
Определим правило «richman», определяющее богатых людей. Для его реализации используем символьное, связывающее, предикатное и возвращающее значение ограничения.
Рисунок 12 – Определение правила «richman» и его выполнение.
Вывод: при выполнении лабораторной работы научились общим приемам работы в среде CLIPS, использовать имеющиеся возможности CLIPS для работы с правилами. Изучили представление правил и их внутренние алгоритмы обработки, стратегии разрешения конфликтов, синтаксис левой части (LHS). Научились использовать команды и функции для работы с правилами.