Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

3130

.pdf
Скачиваний:
1
Добавлен:
08.01.2021
Размер:
484.01 Кб
Скачать

Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

«Воронежский государственный лесотехнический университет им. Г.Ф. Морозова»

Интеллектуальные системы и технологии

Методические указания к лабораторным работам для студентов по направлению подготовки 09.03.02 – Информационные системы и технологии

Воронеж 2016

УДК 681.3

Юдина, Н. Ю. Интеллектуальные системы и технологии Текст : методические указания к лабораторным работам для студентов по направлению подготовки 09.03.02 – Информационные системы и технологии / Н. Ю. Юдина ; М-во образования и науки РФ, ФГБОУ ВО «ВГЛТУ». – Воронеж, 2016. – 32 с.

Печатается по решению учебно-методического совета ФГБОУ ВО «ВГЛТУ им. Г.Ф. Морозова» (протокол № __ от ____ 2016 г.)

Рецензент заведующий кафедрой электротехники и автоматики ФГБОУ ВО Воронежский ГАУ д-р техн. наук, проф. Д. Н. Афоничев

2

Оглавление

 

ЛАБОРАТОРНАЯ РАБОТА №1. «Экспертные оболочки» ...................................

4

2.1. Общие сведения о CLIPS..............................................................................

4

2.2. Программирование в CLIPS .........................................................................

4

ЛАБОРАТОРНАЯ РАБОТА №2. «Логическое программирование»..................

10

ЛАБОРАТОРНАЯ РАБОТА №3. «Разработка экспертной оболочки»...............

19

ЛАБОРАТОРНАЯ РАБОТА №4: «Нечеткая логика» ...........................................

22

ЛАБОРАТОРНАЯ РАБОТА №5: «Алгоритмы нейронных сетей» .....................

25

Многослойные сети прямого распространения ..............................................

26

Алгоритм обратного распространения ................................................................

27

СПИСОК РЕКОМЕНДУЕМОЙ ЛИТЕРАТУРЫ ...................................................

29

3

ЛАБОРАТОРНАЯ РАБОТА №1. «Экспертные оболочки» Цель работы:

1.Изучение языка процедурного программирования оболочки CLIPS.

2.Создание экспертной системы в оболочке CLIPS, содержащей базу правил, начальные факты и возможные исходы.

Теоретическое введение. 2.1. Общие сведения о CLIPS

CLIPS (С Language Integrated Production System) является одним из рас-

пространенных инструментальных средств разработки экспертных систем (ЭС). CLIPS использует продукционную модель представления знаний и поэтому содержит три основных элемента:

1.список фактов (представляет исходное состояние проблемы)

2.базу знаний (преобразуют состояние проблемы к решению)

3.блок вывода Отличием данной системы от аналогов является то, что она полностью

реализована на языке С. В CLIPS используется оригинальный LIPS-подоб-ный язык программирования, ориентированный на разработку ЭС. Кроме того, CLIPS поддерживает еще две парадигмы программирования: объектноориентированную и процедурную. Аспекты объектно-ориентированного программирования в CLIPS рассматриваться не будут.

2.2. Программирование в CLIPS 2.2.1. Простые типы данных

В CLIPS предусмотрено восемь простых типов данных: float, integer, symbol, string, external-address, fact-address, instance-name и instance-address.

Для числовой информации используются типы float и integer, символьной

symbol и string. При записи числа используются цифры (0-9), десятичная точка (.), знак (+) или (-) и (е) при экспоненциальном представлении. Количество значащих цифр зависит от аппаратной реализации. Примеры целых чисел: 237, 15, +12, -32. Примеры чисел с плавающей точкой: 237е3, 15.09, +12.0, -32.3е-7.

Последовательность символов, которая не удовлетворяет числовым типам, обрабатывается как тип данных symbol. Тип данных symbol в CLIPS – последовательность символов, состоящая из одного или нескольких любых печатных символов кода ASCII. Примеры выражений символьного типа: foo,

Hello, B76-HI, bad_value, 127А, 742-42-42, @+=-%, Search. Тип данных string -

это последовательность символов, состоящая из нуля и более печатных символов и заключенная в двойные кавычки. Если внутри строки встречаются двой-

4

ные кавычки, то перед ними необходимо поместить символ (\). Например:

"foo", "a and b", "I number", "a\"quote".

2.2.2. Переменные

Идентификатор переменной всегда начинается с вопросительного знака, за которым следует ее имя. Примеры переменных: , ?sensor, ?noun, ?color.

Переменные описываются

(defrule make-quack

и получают значения

(duck-sound ?sound)

в левой части правила.

=>

 

(assert (sounds-is ?sound) )

Значение переменной

(defrule addition

изменяется в правой части

(numbers ?x ?y)

при помощи функции bind.

=>

 

(assert (answer (+ ?x ?y)))

 

(bind ?answer (+ ?x ?y)

 

(printout t "answer is " ?answer crlf))

Переменной может быть

(defrule get-married

присвоено значение адреса факта.

?duck <- (bachelor Dopey)

Это может оказаться удобным

=>

при необходимости манипули-

(retract ?duck))

ровать фактами непосредственно из правила. Для такого присвоения используется комбинация "<-".

Для определения глобальных переменных, которые видны всюду в среде CLIPS, используется конструкция defglobal. К глобальной переменной можно обратиться в любом месте, и ее значение остается независимым от других конструкций.

2.2.3. Функции

Существует несколько типов функций. Пользовательские и системные функции - это фрагменты кода, написанные на внешних языках (например, на С) и связанные со средой CLIPS. Системными называются те функции, которые были определены изначально внутри среды CLIPS. Пользовательскими называются функции, которые были определены вне CLIPS.

в CLIPS предусмотрен ряд стандартных арифметических и математических функций. Среди них: + (сложение ), - (вычитание ), * (умножение), / (деление), ** (возведение в степень), Abs (определение абсолютного значения), Sqrt (вычисление квадратного корня), Mod (взятие по модулю), Min (нахождение минимума), Мах

5

(нахождение максимума). Конструкция deffunction позволяет пользователю определять новые функции непосредственно в среде CLIPS.

2.2.4. Конструкции

В CLIPS существует несколько описывающих конструкций: defmodule, defrule, deffacts, deftemplate, defglobal, deffunction, defclass, definstances, defmes- sage-handler, defgeneric. При записи все они заключаются в скобки. Определение конструкции отличается от вызова функции главным образом по производимому эффекту. В отличие от функций конструкции никогда не возвращают значений.

2.2.5. Факты

Факты являются одной из основных форм представления информации в системе CLIPS. Каждый факт представляет фрагмент информации, который был помещен в текущий список фактов, называемый fact-list.

Сразу после запуска CLIPS-приложения на выполнение на экране появится приглашение, извещающее пользователя, что он работает с интерпретато-

ром: CLIPS>.

 

Факты можно включить в базу

CLIPS> (assert (today is Sunday))

фактов прямо из командной строки

<Fact-0>

с помощью команды assert

CLIPS> (assert (weather is warm))

 

<Fact-l>

Для вывода списка фактов,

CLIPS> (facts)

имеющихся в базе, используется

f-0 (today is Sunday)

команда facts

f-1 (weather is warm)

Для удаления фактов из базы

CLIPS> (retract 1)

используется команда retract

CLIPS> (facts)

 

f-0 (today is Sunday)

Команда clear очищает

CLIPS> (clear)

базу фактов

CLIPS> (facts)

В тексте программы факты

(deffacts today

можно включать в базу массивом.

(today is Sunday)

Используется команда deffacts

(weather is warm))

Выражение начинается с команды deffacts, затем приводится имя списка фактов, который программист собирается определить (в примере — today), за

ним следуют элементы списка.

 

Этот массив фактов можно

CLIPS> (undeffacts today)

удалить из базы командой undef facts

 

6

Выражение deffacts лучше

CLIPS> (load "my file")

записать в текстовый файл, а

CLIPS> (reset)

затем загрузить. Команда reset сначала очищает базу фактов, а затем включает

внее факты из всех ранее загруженных массивов.

2.2.6.Правила

Блок вывода постоянно отслеживает все правила, условия которых выполняются, и, таким образом, правило может быть выполнено в любой момент,

как только оно становится применимым.

 

В языке CLIPS правила имеют формат:

Например:

(defrule <имя правила>

(defrule chores

< необязательный комментарий >

"Things to do on Sunday"

< необязательное объявление >

(salience 10)

< предпосылка_1 >

(today is Sunday)

< предпосылка_т > =>

(weather is warm) =>

< действие_1 >

(assert (wash car))

< предпосылка_п >)

(assert (chop wood))

В этом примере Chores — произвольно выбранное имя правила. Предпосылки в условной части правила (today is Sunday), (weather is warm) сопоставляются затем интерпретатором с базой фактов, а действия, перечисленные в выполняемой части правила (она начинается после пары символов =>), вставят в базу два факта (wash car), (chop wood) в случае, если правило будет активизировано. Приведенный в тексте правила комментарий "Things to do on Sunday" ("Что сделать в воскресенье") поможет в дальнейшем вспомнить, для чего это правило включено в программу.

Выражение (salience 10) указывает на степень важности правила. Пусть, например, в программе имеется другое правило:

Поскольку предпосылки обоих правил

(defrule fun

одинаковы, то при выполнении оговоренных

"Better things to do on Sunday"

условий они будут "конкурировать" за

(salience 100)

внимание интерпретатора. Предпочтение

(today is Sunday)

будет отдано правилу, у которого параметр

(weather is warm) =>

salience имеет более высокое значение,

(assert (drink beer))

в данном случае — правилу fun.

(assert (play guitar)))

Параметру salience может быть присвоено любое целочисленное значение в диапазоне [-10 000, 10 000]. Если параметр salience в определении правила опущен, ему по умолчанию присваивается значение 0.

7

Обычно в определении правила

(defrule pick-a-chore

присутствуют и переменные. Если,

"Allocating chores to days"

например, правило

(today is ?day)

 

(chore is ?job) =>

 

(assert (do ?job on ?day)) )

будет сопоставлено с фактами

(today is Sunday) (chore is carwash)

то в случае активизации оно включит

 

в базу новый факт

(do carwash on Sunday)

Аналогично, правило

(defrule drop-a-chore

отменит выполнение работ

"Allocating chores to days"

по дому (a chore). Оба эк-

(today is ?day)

экземпляра переменной

?chore <- (do ?job on ?day) =>

?day должны получить

(retract ?chore) )

одно и то же значение. Переменная ?chore в результате сопоставления должна получить ссылку на факт, который мы собираемся исключить из базы. Таким образом, если это правило будет сопоставлено с базой фактов, в которой со-

держатся

(today is Sunday)

то при активизации правила

(do carwash on Sunday)

из базы будет удален факт

(do carwash on Sunday)

Отметим, что факт

(do carwash on Sunday)

будет сопоставлен с любым из представленных ниже образцов

Учтите, что префикс $?

(do ? ? Sunday)

является признаком

(do ? on ?)

сегментной переменной,

(do ? on ?when)

которая будет связана

(do $?)

с сегментом списка.

(do $? Sunday)

 

(do ?chore $?when)

Например, в приведенном выше примере переменная $?when будет связана с (on Sunday). Если за префиксами ? и $? не следует имя переменной, они рассматриваются как универсальные символы подстановки, которым соответственно может быть сопоставлен любой элемент или сегмент списка.

2.3. Наблюдение за процессом интерпретации

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

8

(defrule start (initial-fact)

(printout t "hello, world" crlf) )

Выполните команду reset. Для этого либо введите эту команду в командной строке интерпретатора

CLIPS> (reset)

либо выберите в меню команду Execution=>Reset, либо нажмите <CTRL+U> (последних два варианта возможны в версии, которая работает под Windows).

Затем запустите интерпретатор. Для этого либо введите эту команду run в командную строку интерпретатора

CLIPS> (run)

либо выберите в меню команду ExecutionORun, либо нажмите <CTRL+R> (последних два варианта возможны в версии, которая работает под Windows).

Вответ программа должна вывести сообщение hello, world, знакомое всем программистам мира. Для повторного запуска программы повторите команды reset и run.

Если в меню Execution^Watch ранее был установлен флажок Rules или перед запуском программы на выполнение вы ввели в командную строку команду watch rules, то на экране появится результат трассировки процесса выполнения

CLIPS> (run) FIRE 1 start: f-0 hello, world

Вэтом сообщении в строке, начинающейся с FIRE, выведена информация об активизированном правиле: start — это имя правила, а f-0 — имя факта, который "удовлетворил" условие в этом правиле. Команда watch позволяет организовать несколько разных режимов трассировки, с деталями которых вы можете познакомиться в Руководстве пользователя. Если перед запуском программы вы ввели

CLIPS> (dribble-on "dribble.dp") TRUE

то выведенный протокол трассировки будет сохранен в файле dribble.dp. Сохранение протокола прекратится после ввода команды

CLIPS> (dribble-off) TRUE

Это очень удобная опция, особенно на этапе освоения языка.

2.4. Использование шаблонов

9

объекты данных

Для определения фактов можно использовать не только списочные структуры, но и шаблоны, которые напоминают простые записи. (Шаблоны в CLIPS не имеют ничего общего с шаблонами C++.) Шаблон выглядит примерно так:

(deftemplate student "a student record"

(slot name (type STRING)) (slot age (type NUMBER) (default 18))

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

Если в программу включено приведенное выше определение шаблона, то выражение

(deffacts students (student (name fred))

(student (name freda) (age 19)) )

приведет к тому, что в базу фактов после выполнения команды reset будет добавлено

(student (name fred) (age 18)) (student (name freda) (age 19))

ЛАБОРАТОРНАЯ РАБОТА №2. «Логическое программирование» Цель работы:

1.Изучение языка логического программирования Турбо-Пролог.

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

Теоретическое введение.

Синтаксис и семантика Пролог-программ

3.1. Объекты данных

На Рис.3.1. приведена классификация объектов данных Пролога. Прологсистема распознает тип объекта по его синтаксической форме в тексте программы.

Рис.3.1. Обьекты данных Пролога.

простые объекты

 

структуры

 

 

 

константы переменные

атомы

 

числа

 

 

 

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]