русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Экспертные системы, базирующиеся на логике

В экспертных системах, базирующихся на логике, база знаний состоит из утверждений в виде предложений логики предикатов.

Такие предложения могут группироваться, образуя базу данных Пролога. Правила могут либо описывать данные, либо управлять процессом внутренней унификации Пролога.

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

Интерпретатор выполняет различные функции внутри системы на основе следующей схемы:

1. Система имеет предложения в базе знаний, которые управляют поиском и сопоставлением. Интерпретатор сопоставляет эти предложения с элементами данных в базе данных.

2. Если может быть вызвано более одного правила, то система использует возможности Пролога для разрешения конфликта. Следовательно, программисту не нужно рассматривать потенциально возможные конфликты.

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

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

Красота и большие возможности системы, основанной на логике, заключаются в том, что она отражает структуру самого Пролога. Этим объясняется тот факт, что система очень эффективна в работе.

Наиболее важным аспектом для базы знаний в системе, основанной на логике, является проектирование базы знаний, ее утверждений и их структуры. База знаний должна  иметь недвусмысленную логическую организацию, и она должна содержать минимум избыточной информации. Так же как и в системе, базирующейся на правилах, минимально достаточное количество данных образуют наиболее эффективную систему. Утверждения базы знаний для гончей и дога выглядят так:

rule(1,"dog","Beagle",[1,2,3,4]).

rule(2,"dog","Great Dane",[1,5,3,4,6]).

cond(1,"short-haired").

cond(2,"height under 22 inches").

cond(3,"longer ears").

cond(4,"good natured personality").

cond(5,"low-set tail").

сond(6,"weight over 100 lb").

В каждом предложении типа rule первый аргумент - номер правила, второй аргумент - тип объекта "dog" и третий аргумент - порода собаки. В нашем случае это гончая или дог. Список целых чисел задает номера условий из предложений типа cond (условие). Предложения типа cond содержат все характеристики породы, представленной в базе знаний.

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

Добавление и обновление предложений базы знаний являются простыми  операциями retract и assert. Экспертные системы, базирующиеся на логике, легко проектировать, развивать и поддерживать в Турбо-Прологе, так как по мере расширения  базы знаний программа не требует модификации. Расширение, прежде всего, заключается в постепенном добавлении новых утверждений.

Классификация в базе знаний может основываться на древовидной структуре (Рисунок 4.9). Согласно этой древовидной классификации породы разделены на короткошерстные и длинношерстные. Английский бульдог, гончая, дог и американский фокстерьер являются короткошерстными, а коккер спаниель, ирландский сеттер, колли и сенбернар - длинношерстные.

Рисунок 4.9 Древовидная структура базы знаний ЭС для выбора породы собаки

Для идентификации породы внутри каждого подмножества можно использовать список атрибутов. Количество характеристик будет определять степень точности классификации. Различающей не обязательно является какая-нибудь единственная характеристика - все множество атрибутов используется для достижения целей в строящихся правилах. Из восьми перечисленных ниже, три являются необходимыми, так как ни один из них не характерен для всех пород  одновременно. Атрибут, который характеризует все объекты одновременно, возможно, не является необходимым в множестве данных. В нашей экспертной системе используются следующие атрибуты:

  1. короткая шерсть;
  2. длинная шерсть;
  3. рост меньше 22 дюймов;
  4. рост меньше 30 дюймов;
  5. низко посаженный хвост;
  6. длинные уши;
  7. хороший характер;
  8. вес больше 100 фунтов.

Для каждой породы справедливы следующие характеристики:

Порода

Характеристики

Английский бульдог

1,3,5,7

Гончая

1,3,6,7

Дог

1,4,6,7,8

Американская гончая

1,5,6,7,

Коккер спаниель

2,3,5,6,7

Ирландский сеттер

2,4,6

Колли

2,4,5,7

Сенбернар

2,5,7,8,

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

Текст программы экспертизы по породам собак, базирующейся на логике приведен в приложении 4.

Вначале ввод пользователем слова dog приводит к тому, что переменная Mygoal (моя цель) получает значение "dog" (собака).

Применяется утверждение базы знаний rule(1,"dog","short-haireddog",[1]) и  списочная  переменная COND получает значение 1.

Далее правило rule передает этот параметр правилу  check (проверка). В свою очередь правило check осуществляет доступ к правилу cond базы знаний с параметром BNO равным 1. Правило check передает это значение предикату fronttoken, чтобы создать значение _COND. Это правило дает неуспех.

Правило check возвращается к правилу cond и COND содержит значение параметра. Затем правило check осуществляет доступ к значению "short-haired" (короткошерстный) и передает его в переменной TEXT правилу inpq. Правило inpq выдает на экран текстовую строку:

Question:- short-haired? (Вопрос:- короткошерстный?)

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

Процесс продолжается со следующим утверждением rule базы знаний, т.е. RNO равным 2. Теперь правило check использует значение CON равное 2 для текущего правила rule, повторяет цикл построения списка значений COND и запрашивает пользователя о дополнительном вводе.

Основываясь на вводимых ответах пользователя, доступ к утверждениям rule и cond происходит в следующим порядке:

rule(1),  cond(1),

rule(2),  cond(2),

rule(7),  cond(3),

rule(7),  cond(5),

rule(7),  cond(6),

rule(7),  cond(7).

В конце этого процесса переменная COND типа список имеет значение 3,5,6,7. Этот список сопоставляется со списком условий в правиле 7. Сопоставление связывается с классифицированным объектом "Cocker Spaniel" (коккер спаниель) в утверждении rule, и механизм вывода, таким образом, нашел требуемый результат.

Рассмотрим программу поиска выхода из лабиринта [59]. Опишем лабиринт (Рисунок 4.10 )с помощью предиката а:

a(1,1,стена).a(1,2,стена).a(1,3,стена).a(1,4,стена).

a(2,1,пусто).a(2,2,пусто).a(2,3,пусто).a(2,4,пусто).

a(3,1,выход).a(3,1,пусто).a(3,2,стена).a(3,3,пусто). a(3,4,стена).

a(4,1,стена).a(4,2,стена).a(4,3,пусто).a(4,4,пусто).

a(5,1,стена).a(5,2,пусто).a(5,3,пусто).a(5,4,стена).

 

Рисунок 4.10 Лабиринт

Место стартовой точки в лабиринте задаем в цели (клетка 4 2):

путь(a(4,2,пусто),P,[a(4,2,пусто)]), write(P).

P - список позиций, ведущих к выходу.

Ищем путь из исходной позиции в северном направлении. Если пути нет то идем на юг. Если пути нет идем на запад. Если нельзя, идем на восток. Если соседняя позиция является стеной (правило можем_идти), то делаем поворот на 90 градусов (проверка следующего правила путь). Чтобы не ходить кругами, ведем список позиций в которых побывали (список Были).

Результат работы программы:

Выход31[a(4,2,"пусто"),a(5,2,"пусто"),a(5,3,"пусто"),a(4,3,"пусто"),

a(3,3,"пусто"),

a(2,3,"пусто"),a(2,2,"пусто"),a(2,1,"пусто"),a(3,1,"пусто")]

Описанная процедура не обязательно находит кротчайший путь к выходу.

Полный текст программы приведен в Приложении 5.

Просмотров:

Вернуться в оглавление:Экспертные системы



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.