Главная страница

кр. Ю. Ю. Громов, О. Г. Иванова, В. В. Алексеев, М. П. Беляев, Д. П. Швец, аи. Елисеев интеллектуальные информационные системы и технологии


Скачать 2.03 Mb.
НазваниеЮ. Ю. Громов, О. Г. Иванова, В. В. Алексеев, М. П. Беляев, Д. П. Швец, аи. Елисеев интеллектуальные информационные системы и технологии
Дата17.02.2023
Размер2.03 Mb.
Формат файлаpdf
Имя файлаgromov2-a.pdf
ТипДокументы
#941483
страница16 из 20
1   ...   12   13   14   15   16   17   18   19   20

6.2. Использование семантических сетей для представления знаний на языке CLIPS Данный пример наглядно демонстрирует работу с фактами и правилами. Описание структуры. Создадим шаблон для неупорядоченных фактов. Для описания структуры генеалогического дерева (рис. 6.1) достаточно четыре слота
(deftemplate person
(slot name)
(slot gender)
(slot father)
(slot wife)) Для проверки добавления шаблона можно воспользоваться специальным инструментом Deftemplate Manager (Менеджер шаблонов, доступным в версии среды CLIPS. Для запуска менеджера шаблонов воспользуйтесь меню Browse и выберите пункт Deftemplate
Manager.

166 Рис. 6.1. Пример генеалогического дерева Менеджер шаблонов позволяет в отдельном окне просматривать список всех шаблонов, доступных в текущей базе знаний, удалять выбранный шаблон и отображать все его свойства. На основе шаблона PERSON добавим список фактов, описывающих элементы структуры.
(deffacts people
(PERSON (name Vasya) (gender male) (wife Liza))
(PERSON (name Liza) (gender female))
(PERSON (name Vladimir) (gender male) (father Vasya))
(PERSON (name Natasha) (gender female) (father Vasya))
(PERSON (name Viktor) (gender male) (father Vasya))
(PERSON (name Misha) (gender male) (wife Natasha))
(PERSON (name Kostya) (gender male) (father Misha) (wife Liza))
(PERSON (name Masha) (gender female) (father Misha))) Для проверки добавления шаблона можно воспользоваться специальным инструментом Deffacts Manager (Менеджер предопределён- ных фактов. Для запуска менеджера шаблонов воспользуйтесь меню
Browse и выберите пункт Deffacts Manager. Определение отношений. Определим отношение Мать (рис. 6.2). Создадим шаблон Василий Лиза Владимир Виктор
Наташа
Михаил Костя Маша

167
(deftemplate mother
(slot namel)
(slot name2)) Создадим правило, описывающее отношение
(defrule Mother
(PERSON (name ?x) (wife ?y))
(PERSON (name ?z) (father ?x))
=>
(printout t ?y " is mother of " ?z crlf)
(assert (mother (namel ?y) (name2 ?z)))) Выполним команды
CLIPS> (reset)
CLIPS> (run) Результат
CLIPS>Natasha mother of Masha
Natasha mother of Kostya
Liza mother of Viktor
Liza mother of Natasha
Liza mother of Vladimir Рис. 6.2. Отображение отношения Мать Василий Лиза Владимир Виктор
Наташа
Михаил Костя Маша

168 Рис. 6.3. Отображение отношения Брат Определим отношение Брат (рис. 6.3). Создадим шаблон
(deftemplate brother
(slot namel)
(slot name2)) Создадим правило, описывающее отношение
(defrule Brother
(PERSON (name ?x) (gender male) (father ?y&

nil))
(PERSON (name ?z&?x) (gender male) (father ?y&nil))
(not (brother (namel ?x) (name2 ?z)))
(not (brother (namel ?z) (name2 ?x))) =>
(printout t ?x " brother of " ?z crlf)
(assert (brother (namel ?x) (name2 ?z)))) Ограничение ?z&?x запрещает выводить бессмысленные пары одинаковых имён. Ограничение ?y&nil запрещает выводить пары, поля отец которых не определены (нулевое значение. Условные элементы
(not (brother (namel ?x) (name2 ?z)))
(not (brother (namel ?z) (name2 ?x))) Василий Лиза Владимир Виктор
Наташа
Михаил Костя Маша

169 проверяют наличие фактов типа brother и, тем самым отслеживают, была ли уже обработана данная пара или её перестановка. Если эти факты отсутствуют, то это означает, что обработка ещё не была выполнена. В этом случае правило активируется, и выполняются действия, описанные в правой части правила. А именно выводится на экран сообщение о найденной паре братьев и добавляется соответствующий факт brother, утверждающий, что данная пара уже была обработана. Выполним команды
CLIPS> (reset)
CLIPS> (run) Результат
CLIPS>Viktor brother of Vladimir
6.3. Пример учёта неопределённости на языке CLIPS В языке CLIPS непосредственно не предусмотрены какие-либо возможности учёта неопределённости. Тем не менее в программу
CLIPS несложно включить средства учёта неопределённости, помещая информацию, касающуюся неопределённости, непосредственно в факты и правила [4]. В качестве примера достаточно указать, что с помощью языка CLIPS может быть эмулирован механизм учёта неопреде- лённости, применяемый в системе MYCIN. Ниже будет показано, как можно перезаписать на языке CLIPS следующее правило MYCIN:
IF
The stain of the organism is gramneg and
The morphology of the organism is rod and
The patient is a compromised host
THEN
There is suggestive evidence (0.6) that the identity of the organism is pseudomonas В системе MYCIN фактическая информация представлена в виде троек «объект

атрибут

значение» (Object

Attribute

Value – OAV). Такие тройки OAV могут быть представлены в языке CLIPS с помощью следующей конструкции deftemplate (эта конструкция будет помещена в собственный модуль в целях создания повторно применимого программного компонента
(defmodule OAV (export deftemplate oav))
(deftemplate OAV::oav
(multislot object (type SYMBOL))

170
(multislot attribute (type SYMBOL))
(multislot value)) Эта конструкция deftemplate позволяет представить некоторые факты, требуемые для части IF приведённого выше правила MYCIN, следующим образом
(OAV (object organism)
(attribute stain)
(value gramneg))
(OAV (object organism)
(attribute morphology)
(value rod))
(OAV (object patient)
(attribute is a)
(value compromised host)) Кроме того, в системе MYCIN с каждым фактом ассоциируется коэффициент достоверности (Certainty Factor – CF), который характеризует степень доверия к факту. Коэффициент достоверности может иметь значение от –1 до 1; значение –1 показывает, что факт является заведомо ложным, значение 0 говорит о том, что какая-либо информация об этом факте отсутствует (налицо полная неопределённость), а значение 1 свидетельствует, что факт является заведомо истинным. В системе CLIPS коэффициенты достоверности не учитываются автоматически, поэтому необходимо обеспечить сопровождение и данной информации. В этих целях в каждом факте будет использоваться дополнительный слот, представляющий коэффициент достоверности. После этого конструкция deftemplate с именем OAV для каждого факта принимает такой вид
(deftemplate OAV::oav
(multislot object (type SYMBOL))
(multislot attribute (type SYMBOL))
(multislot value)
(slot CF (type FLOAT) (range -1.0 +1.0))) В качестве примеров фактов можно привести следующее
(OAV (object organism)
(attribute stain)
(value gramneg)
(CF 0.3))
(oav (object organism)
(attribute morphology)

171
(value rod) (CF 0.7))
(OAV (object patient)
(attribute is a)
(valuecompromisedhost)
(CF 0.8)) Для того чтобы факты OAV функционировали должным образом, в программу на языке CLIPS необходимо внести ещё одну модификацию. Система MYCIN позволяет осуществить логический вывод одних и тех же троек OAV с помощью отдельных правил. Затем эти тройки
OAV комбинируются для получения единственной тройки OAV, в которой комбинируются коэффициенты достоверности исходных троек
OAV. Применяемая в настоящее время конструкция deftemplate с именем позволяет вносить в список фактов две идентичные тройки
OAV только в том случае, если в них имеются различные коэффициенты достоверности (поскольку система CLIPS в обычных условиях не позволяет вносить в список фактов два дублирующихся факта. Для того чтобы обеспечить возможность внесения в список фактов идентичных троек OAV, имеющих одинаковые коэффициенты достоверности, можно использовать команду set-fact-duplication для отмены применяемого в системе CLIPS принципа работы, согласно которому предотвращается внесение дублирующихся фактов в список фактов. Указанный принцип действия отменяется с помощью команды, имеющей следующий синтаксис (set-fact-duplication TRUE) Аналогичным образом, команда, имеющая следующую форму, исключает возможность внесения в список фактов дублирующихся фактов
(set-fact-duplication FALSE) Как уже было сказано, в системе MYCIN две идентичные тройки
OAV комбинируются в одну тройку OAV, имеющую комбинированное значение коэффициента достоверности. Для вычисления нового коэффициента достоверности в системе MYCIN используется следующая норма, если оба коэффициента достоверности двух фактов обозначенные как Си) больше или равны нулю
New Certainty = (CF1 + CF2) – (CF1 * CF2) Например, предположим, что в списке фактов имеются следующие факты
(OAV (object organism)
(attribute morphology)

172
(value rod)
(CF 0.7))
(oav (object organism)
(attribute morphology)
(value rod)
(CF 0.5)) Допустим, что CF1 обозначает коэффициент достоверности первого факта, равный 0.7, a CF2 – коэффициент достоверности второго факта, равный 0.5; в таком случае новый коэффициент достоверности для комбинации этих двух фактов вычисляется таким образом
New Certainty = (0.7 + 0.5) – (0.7 * 0.5) = 1.2 – 0.35 = 0.85, а новый факт, заменяющий два первоначальных факта, принимает следующий вид
(OAV (object organism)
(attribute morphology) (value rod) (CF 0.85)) Как уже было сказано, система CLIPS не обрабатывает автоматически коэффициенты достоверности, относящиеся к фактам. Из этого следует, что CLIPS также не комбинирует автоматически две тройки
OAV, полученные с помощью разных правил. Но комбинирование троек OAV можно легко обеспечить с помощью правила, которое осуществляет поиск в списке фактов идентичных троек OAV, подлежащих комбинированию. Ниже показано правило и описан метод, которые демонстрируют, как осуществляются указанные действия применительно к таким попарно обрабатываемым тройкам OAV, в которых коэффициенты достоверности больше или равны нулю.
(defmethod OAV::combine-certainties С NUMBER (> С С NUMBER (> С 0)))
(- (+ С С С С)
(defrule OAV::combine-certainties (declare (auto-focus TRUE))
?factl <- (oav (object $?o)
(attribute $?a) (value $?v)
(CF ?C1))
?fact2 <- (oav (object $?o)
(attribute $?a) (value $?v) (CF ?C2))
(test (neq ?factl ?fact2))
=>
(retract ?factl) (modify ?fact2 (CF (combine-certainties ?C1 ?C2))))

173 Обратите внимание на то, что идентификаторы фактов ?factl и
?fact2 сравниваются друг с другом в условном элементе test. Такая операция применяется для получения гарантий того, что правило не согласовано с фактом с использованием точно такого же факта для первых двух шаблонов. Адреса фактов позволяют сравнить функции eq и neq. Кроме того, следует отметить, что для данного правила раз- решён атрибут auto-focus. Это позволяет гарантировать, что две тройки
OAV будут скомбинированы, прежде чем будет разрешён запуск других правил, шаблонам которых соответствуют обе эти тройки. Следующим шагом на пути к внедрению средств поддержки коэффициентов достоверности в систему CLIPS является связывание коэффициентов достоверности фактов, согласующихся с левой частью правила, с коэффициентами достоверности фактов, внесённых в список фактов с помощью правой части правила. В системе MYCIN логический вывод коэффициента достоверности, ассоциирующегося с левой частью правила, осуществляется с использованием следующих формул
CF(P1 or Р) = max{CF(P1),CF(P2)}
CF(P1 and P2) = min{CF(P1),CF(P2)}
CF(notP) = -CF(P) В этих формулах P, P1 и P2 обозначают шаблоны из левой части правила. Кроме того, если коэффициент достоверности в левой части правила меньше 0.2, то правило рассматривается как неприменимое и запуск его не происходит. Логический вывод значения коэффициента достоверности факта, внесённого в список фактов под действием правой части правила, осуществляется путём умножения коэффициента достоверности вносимого факта на коэффициент достоверности, заданный в левой части правила. Ниже приведён результат преобразования правила MYCIN. Это правило показывает, как вычисляются коэффициенты достоверности в левой и правой частях правила. Правило помещается в модуль
IDENTIFY, который импортирует конструкцию deftemplate с именем
OAV из модуля OAV.
(defmodule IDENTIFY (import OAV deftemplate oav))
(defrule IDENTIFY::MYCIN-to-CLIPS-translation
(OAV (object organism) attribute stain) value gramneg) CF ?C1))
(OAV (object organism) attribute morphology) value rod) CF ?C2))
(OAV (object patient) attribute is a) value compromised host) CF ?C3))
(test (> (min ?C1 ?C2 ?C3) 0.2))
=>

174
(bind ?C4 (* (min ?C1 ?C2 ?C3) 0.6))
(assert (OAV (object organism) (attribute identity) (value pseudomonas)
(CF ?C4))))
6.4. Примеры экспертных систем, написанных на языке CLIPS У каждого специалиста, занимающегося диагностикой и устранением неисправностей принтеров, накоплен уникальный опытно он не является исчерпывающим. Возникает необходимость объединения подобного опыта для качественного улучшения диагностирования и устранения неисправностей принтеров. В Приложении А приведён код экспертной системы диагностики неисправностей принтеров. Используемый язык для создания внешнего интерфейса – Python. Разработанная экспертная система позволяет объединить различные алгоритмы диагностирования принтеров. Данную экспертную систему могут использовать мастерские, занимающиеся ремонтом принтеров. Система позволит специалистам ускорить процесс поиска неисправности устройства. Содержащиеся в экспертной системе знания помогут начинающим специалистам получить опыт в диагностике и устранении неисправностей принтеров. В Приложении Б приведён код экспертной системы, которая помогает пользователю с выбором вакансии. Пользователю предлагается заполнить анкету – ему задаются вопросы, ответы на которые система посылает в виде сообщений объекту, представляющего пользователя. После опроса в системе накапливаются знания об объекте-пользова- теле, по которым определяется список подходящих ему вакансий. В итоге пользователю выдаётся результат в виде списка вакансий, на которые он может быть устроен, либо отказ в свободной вакансии. Для создания внешнего интерфейса используются языки HTML, CSS, PHP.
6.5. Контрольные вопросы и задания В режиме командной строки вычислите значения выражений а) (4 2
– 5) * (3 + 4). б) sin 1 + 1/(cos (1 – 2)). в) min (max (4 3
, 6 2
), min (2 5
,5 2
)). г) (7 + 9) * tan 5. д) (5 * (5 + 6 + 7)) – ((3 * 4/9 + 2) / 9). Создайте функцию для вычисления длины отрезка поза- данным координатам его концов
)
,
(
2 и
)
,
(
2 1
b
b
,
2 2
2 2
1 1
)
(
)
(
a
b
a
b
D

+

=

175 Создайте функцию для вычисления площади треугольника по длинам его сторон,
)
(
)
(
)
(
c
p
b
p
a
p
p
S



=
(использовать отдельную функцию для вычисления полупериметра). Напишите программу CLIPS, которая складывает два двоичных числа без использования каких-либо арифметических функций. Используйте для представления двоичных чисел следующую конструкцию. Напишите программу CLIPS, которая запрашивает у пользователя значения цветов, а затем выводит список всех государств, флаги которых содержат все указанные цвета. Напишите программу, которая будет считывать файл данных, содержащий список имён людей с указанием возрастов, и создавать новый файл, в котором содержится тот же список, отсортированный в порядке увеличения возрастов. Напишите программу, которая после получения значений координат двух точек на плоскости определяет наклон прямой, проходящей через эти две точки. Программа должна выполнять проверку для определения того, что координаты точек заданы числами и что одна и та же точка не указана дважды. Линии, направленные перпендикулярно горизонтальной оси, следует рассматривать как имеющие бесконечный наклон. Напишите программу для поиска решения задачи с ханойскими башнями, в которой необходимо переместить ряд колец, имеющих разный наружный диаметр и одинаковый внутренний диаметр, с одного колышка на другой колышек, ни разу не насаживая на колышек кольцо с большим наружным диаметром поверх кольца с меньшим наружным диаметром. Напишите программу, позволяющую определить цифровые значения букв, после подстановки которых следующая задача решается правильно. Каждой из букв НОС, РЕ и Т соответствует уникальная цифра от 0 до 9.
HOCUS
+ POCUS
= PRESTO Напишите программу, позволяющую определить простые множители числа. Например, простыми множителями числа 15 являются и 5. Напишите программу для преобразования сообщения, заданного в виде азбуки Морзе, в эквивалентный этому сообщению ряд знаков алфавита.

176 Напишите программу для ведения игры Жизнь. Пусть множество Е = {1, 2, …, 100} определяет возраст человека. Подмножество А Молодой можно задать функцией принадлежности Напишите программу, которая по возрасту человека определяет, к какой категории он относится молодой
1
)
(
=
µ
A
; среднего возраста
1
)
(
03
,
0
<
µ

A
; старый Напишите программу, определяющую является ли число n номер варианта) простым. Постройте генеалогическое дерево своей семьи для трёх поколений. Определить следующие отношения мать, брат, сестра, дедушка, бабушка, тёща, шурин (брат жены, свояченица (сестра жены, свояк (муж свояченицы, свёкор (отец мужа, золовка (сестра мужа, деверь (брат мужа, сноха (жена сына для его матери, невестка (жена сына для его отца. Предположим, что дана шахматная доска размерами N
×
N, где N – целое число. Напишите программу, которая расставляет
N ферзей на шахматной доске таким образом, что ни один ферзь не может напасть на другого. Напишите конструкцию deffunction, которая определяет все простые числа от 1 до указанного целого числа и возвращает эти простые числа в виде многозначного значения. Напишите конструкцию deffunction, которая определяет количество вхождений одной строки в другой строке. Напишите конструкцию deffunction, которая построчно сравнивает два файла и выводит информацию об обнаруженных различиях в файл, указанный логическим именем. Напишите конструкцию deffunction, которая принимает от нуля и больше параметров и возвращает многозначное значение, содержащее значения параметров в обратном порядке.

1   ...   12   13   14   15   16   17   18   19   20


написать администратору сайта