Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Представление знаний в ИС / Лабораторные работы (1).doc
Скачиваний:
35
Добавлен:
22.05.2015
Размер:
882.18 Кб
Скачать

Задание на лабораторную работу

Пусть множество Е={1, 2, …, 100} определяет возраст человека. Подмножество А «Молодой» можно задать функцией принадлежности:

.

Написать программу, которая по возрасту человека определяет, к какой категории он относится:

  1. молодой: ;

  2. среднего возраста: ;

  3. старый: .

Программа должна содержать две функции:

  1. функция запрашивает у пользователя возраст человека, получает значение возраста, вызывает функцию, реализующую функцию принадлежности, и выводит на экран категорию, к которой принадлежит человек;

  2. реализует функцию принадлежности, получает в качестве аргумента возраст человека, вычисляет степень принадлежности данного возраста подмножеству молодой и возвращает данный результат.

Порядок выполнения работы

  1. В редакторе CLIPSсоздать функцию, которая получает в качестве аргумента возраст человека, вычисляет степень принадлежности данного возраста подмножеству молодой и возвращает данный результат.

  2. В редакторе CLIPSсоздать функцию, которая функция запрашивает у пользователя возраст человека, получает значение возраста, вызывает функцию из п.1, выводит на экран категорию, к которой принадлежит человек

  3. Проверить результат работы программы для разных входных данных.

Требования к отчету

  1. Разработанный программный модуль на языке CLIPSс комментариями

  2. Результаты выполнения программного модуля

  3. Выводы.

Контрольные вопросы

  1. Какие логические функции используются в языке CLIPS?

  2. Назовите операторы ввода/вывода.

  3. Как организуется в CLIPSконструкция «если-то»?

Лабораторная работа №4

Работа с основными функциями в CLIPS

Цель: изучить конструктор языка CLIPSдля создания правил, функции для реализации цикла

Вопросы для предварительного изучения

1. Изучить материал лекции 4.

2. Ознакомиться с материалом основной литературы.

3. Ознакомиться с материалами дополнительной литературы.

Краткие теоретические сведения

(while<выражение> [do] <действие>*)

Для задания условия в выражении цикла while могут быть использованы любые предикатные функции. В теле цикла может содержаться произвольное количество действий, включая вложенные циклы или функцию if. Проверка условия выполняется перед выполнением тела цикла. Цикл вы­полняется до тех пор, пока условие остается истинным. Определение цикла while может содержать необязательный символ do между условием и пер­вым действием тела цикла. Для прерывания работы цикла могут быть ис­пользованы функции break и return, описанные ниже. Если для прерыва­ния работы цикла не использовалась функция return, функция while возвращает значение false.

Помимо функции while CLIPS предоставляет также функцию loop-for-count, которая реализует концепцию простого итеративного цикла, выпол­няющего определенные действия заданное число раз.

(loop-for-count <диапазон> [do] <действие>*)

<диапазон>::= <максимальное-значение-индекса>| (<переменная-цикла> [<минимальное-

значение-индекса><максимальное-значение-индекса>] ) |(<переменная-цикла> [<максимальное-значение-индекса>] )

<минимальное-значение-индекса> ::= <целочисленное-выражение>

<максимальное-значение-индекса> ::= <целочисленное-выражение>

Цикл loop-for-count производит указанные действия некоторое количество раз согласно заданному параметру <диапазон>. Если параметр <минимальное-значение-индекса> не задан, ему автоматически присваивается 1. CLIPS пре­дусматривает наличие параметра <переменная-цикла>, определяющего имя локальной переменной, которая может использоваться в теле цикла для оп­ределения текущего числа итераций. В теле цикла могут быть указаны лю­бые внешние по отношению к циклу переменные (как глобальные, так и локальные). Однако при совпадении имени переменной цикла с какой-нибудь внешней переменной внешняя переменная скрывается. Использова­ние переменной цикла после завершения работы функции loop-for-count вне тела цикла запрещено. Определение цикла может содержать необяза­тельный символ do между условием и первым действием тела цикла. Если параметр <минимальное-значение-индекса> изначально больше параметра <максимальное-значение-индекса>, тело цикла не будет выполнено ни разу. Функции break и return могут быть использованы для экстренного преры­вания работы цикла. В теле цикла может содержаться произвольное количе­ство действий, включая вложенные циклы или функцию if. Функция loop-for-count возвращает значение false, если для экстренного прерывания ее работы не использовалась функция return. Пример функции loop-for-count приведен ниже (см. также рис. 15.19).

Для добавления новых правил в базу знаний CLIPS предоставляет специ­альный конструктор defrule. В общем виде синтаксис данного конструктора можно представить следующим образом:

(defrule

<имя-правила>

[<комментарии>]

[<определение-свойства-правила>]

<предпосылки > ; левая часть правила

=>

<следствие> ; правая часть правила

)

Имя правила должно быть значением типа symbol. В качестве имени прави­ла нельзя использовать зарезервированные слова CLIPS, которые были пе­речислены ранее. Повторное определение существующего правила приводит к удалению правила с тем же именем, даже если новое определение содер­жит ошибки.

Комментарии являются необязательными, и, как правило, описывают на­значения правила. Комментарии необходимо заключать в кавычки. Эти комментарии сохраняются и в дальнейшем могут быть доступны при про­сматривании определения правила.

Определение правила может содержать объявление свойств правила, кото­рое следует непосредственно после имени правила и комментариев. Более подробно свойства правила будут рассмотрены ниже.

В справочной системе и документации по CLIPS для обозначения предпо­сылок правила чаще всего используется термин "LHS of rule", а для обозна­чения следствия "RHS of rule", поэтому в дальнейшем мы будем использо­вать аналогичную терминологию — левая и правая часть правила.

Левая часть правила задается набором условных элементов, который обычно состоит из условий, примененных к некоторым образцам. Заданный набор образцов используется системой для сопоставления с имеющимися фактами и объектами. Все условия в левой части правила объединяются с помощью неявного логического оператора and. Правая часть правила содержит список действий, выполняемых при активизации правила механизмом логического вывода. Для разделения правой и левой части правил используется сим­вол =>. Правило не имеет ограничений на количество условных элементов или действий. Единственным ограничением является свободная память ва­шего компьютера. Действия правила выполняются последовательно, но то­гда и только тогда, когда все условные элементы в левой части этого прави­ла удовлетворены.

Если в левой части правила не указан ни один условный элемент, CLIPS автоматически подставляет условие-образец initial-fact или initial-object. Если в правой части правила не определено ни одно действие, правило может быть активировано и выполнено, но при этом ни­чего не произойдет.