
Текстовое описание продукционной базы знаний
Для рассматриваемой предметной области была создана следующая модель:
В процессе анализа задачи было выявлено множество решений, которые могут приниматься
в данной предметной области. Из них было сформировано множество G:
G = { Войти в магазин,
Магазин не торгует ЖД,
Магазин торгует ЖД,
Позвать кассира,
Проверить в магазине ли кассир,
Проверить в магазине ли покупатель,
У кассира нашлась сдача,
У кассира нет сдачи }
По ходу раскрытия содержания каждого действия, т.е. в процессе выявления и исследования
множества ситуаций, в которых может приниматься то или иное решение, и анализа влияния каждого
из действий на состояние модели предметной области, были выделены соответствующие множества
объектов, их свойств, и отношений между ними.
X = { ЖесткийДиск,
Кассир,
Магазин,
Покупатель }
C = { В_продаже_есть_ЖД [ Тип свойства: Логический ],
Цена [ Тип свойства: Числовой ],
Деньги [ Тип свойства: Числовой ],
Сдача [ Тип свойства: Числовой ],
ТребуемыйОбъем [ Тип свойства: Числовой ],
Координаты [ Тип свойства: Числовой ],
Объем [ Тип свойства: Числовой ] }
Перечисленные свойства описывают объекты следующим образом:
Объект "ЖесткийДиск":
-- Объем; Множество значений: {Все действительные числа }
-- Цена; Множество значений: {Все действительные числа }
Объект "Кассир":
-- Деньги; Множество значений: {Все действительные числа }
-- Сдача; Множество значений: {Все действительные числа }
-- Координаты; Множество значений: {Все действительные числа }
Объект "Магазин":
-- В_продаже_есть_ЖД; Множество значений: {Четкие логические значения }
-- Координаты; Множество значений: {Все действительные числа }
Объект "Покупатель":
-- ТребуемыйОбъем; Множество значений: {Все действительные числа }
-- Деньги; Множество значений: {Все действительные числа }
-- Координаты; Множество значений: {Все действительные числа }
Для решения задачи потребовалось установить следующие отношения между объектами:
R = { В(Кассир, Магазин),
В(Покупатель, Магазин),
Купил(Покупатель, ЖесткийДиск),
Покинул(Покупатель, Магазин),
Сдача(Кассир, Покупатель),
Устраивает(Покупатель, ЖесткийДиск),
Устраивает(Покупатель, Магазин) }
Объединяя информацию о свойствах объектов и отношениях между ними,
получаем набор фактов, которые должны входить в рабочую базу данных (РБД) интеллектуальной системы:
РБД = { ЖесткийДиск.Объем [ Тип факта: Числовой; Начальное значение = Не задано ],
ЖесткийДиск.Цена [ Тип факта: Числовой; Начальное значение = Не задано ],
Кассир.Деньги [ Тип факта: Числовой; Начальное значение = Не задано ],
Кассир.Координаты [ Тип факта: Числовой; Начальное значение = Не задано ],
Кассир.Сдача [ Тип факта: Числовой; Начальное значение = Не задано ],
Магазин.В_продаже_есть_ЖД [ Тип факта: Логический; Начальное значение = Не задано ],
Магазин.Координаты [ Тип факта: Числовой; Начальное значение = Не задано ],
Покупатель.Деньги [ Тип факта: Числовой; Начальное значение = Не задано ],
Покупатель.Координаты [ Тип факта: Числовой; Начальное значение = Не задано ],
Покупатель.ТребуемыйОбъем [ Тип факта: Числовой; Начальное значение = Не задано ],
В(Кассир, Магазин) [ Тип факта: Логический; Начальное значение = Не задано],
В(Покупатель, Магазин) [ Тип факта: Логический; Начальное значение = Не задано],
Купил(Покупатель, ЖесткийДиск) [ Тип факта: Логический; Начальное значение = Не задано],
Покинул(Покупатель, Магазин) [ Тип факта: Логический; Начальное значение = Не задано],
Сдача(Кассир, Покупатель) [ Тип факта: Логический; Начальное значение = Не задано],
Устраивает(Покупатель, ЖесткийДиск) [ Тип факта: Логический; Начальное значение = Не задано],
Устраивает(Покупатель, Магазин) [ Тип факта: Логический; Начальное значение = Не задано] }
Далее, была создана База Правил.
База Правил содержит следующие правила:
A) Правила, эквивалентные действиям над объектами предметной области:
A.1)
ИМЯ ПРАВИЛА: "Войти в магазин"
СОДЕРЖАНИЕ ПРАВИЛА :
ЕСЛИ ( Покупатель.Координаты <> Магазин.Координаты )
ТО ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ОПЕРАЦИИ:
Покупатель.Координаты := Магазин.Координаты
В(Покупатель, Магазин) := ИСТИНА
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРАВИЛЕ:
Приоритет: 0
Локальные переменные: Отсутствуют
Заключение: Покупатель вошел в магазин
A.2)
ИМЯ ПРАВИЛА: "Магазин не торгует ЖД"
СОДЕРЖАНИЕ ПРАВИЛА :
ЕСЛИ ( В(Покупатель, Магазин) = ИСТИНА ) И
( Магазин.В_продаже_есть_ЖД = ЛОЖЬ )
ТО ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ОПЕРАЦИИ:
Устраивает(Покупатель, Магазин) := ЛОЖЬ
В(Покупатель, Магазин) := ЛОЖЬ
Покинул(Покупатель, Магазин) := ИСТИНА
Купил(Покупатель, ЖесткийДиск) := ЛОЖЬ
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРАВИЛЕ:
Приоритет: 0
Локальные переменные: Отсутствуют
Заключение: Этот магазин не торгует ЖД. Уходим :(
A.3)
ИМЯ ПРАВИЛА: "Магазин торгует ЖД"
СОДЕРЖАНИЕ ПРАВИЛА :
ЕСЛИ ( В(Покупатель, Магазин) = ИСТИНА ) И
( Магазин.В_продаже_есть_ЖД = ИСТИНА ) И
( Устраивает(Покупатель, Магазин) <> ИСТИНА )
ТО ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ОПЕРАЦИИ:
Устраивает(Покупатель, Магазин) := ИСТИНА
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРАВИЛЕ:
Приоритет: 99
Локальные переменные: Отсутствуют
Заключение: Этот магазин нас устраивает, в нем есть ЖД.
A.4)
ИМЯ ПРАВИЛА: "Позвать кассира"
СОДЕРЖАНИЕ ПРАВИЛА :
ЕСЛИ ( В(Покупатель, Магазин) = ИСТИНА ) И
( Устраивает(Покупатель, Магазин) = ИСТИНА ) И
( Устраивает(Покупатель, ЖесткийДиск) = ИСТИНА )
ТО ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ОПЕРАЦИИ:
Кассир.Координаты := Магазин.Координаты
В(Кассир, Магазин) := ИСТИНА
Кассир.Сдача := Покупатель.Деньги - ЖесткийДиск.Цена
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРАВИЛЕ:
Приоритет: 90
Локальные переменные: Отсутствуют
Заключение: Прибежал кассир
A.5)
ИМЯ ПРАВИЛА: "Проверить в магазине ли кассир"
СОДЕРЖАНИЕ ПРАВИЛА :
ЕСЛИ ( В(Покупатель, Магазин) = ИСТИНА ) И
( Устраивает(Покупатель, Магазин) = ИСТИНА ) И
( Устраивает(Покупатель, ЖесткийДиск) = ИСТИНА ) И
( Кассир.Координаты = Магазин.Координаты )
ТО ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ОПЕРАЦИИ:
В(Кассир, Магазин) := ИСТИНА
Кассир.Сдача := Покупатель.Деньги - ЖесткийДиск.Цена
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРАВИЛЕ:
Приоритет: 5
Локальные переменные: Отсутствуют
Заключение: Кассир стоит у кассы.
A.6)
ИМЯ ПРАВИЛА: "Проверить в магазине ли покупатель"
СОДЕРЖАНИЕ ПРАВИЛА :
ЕСЛИ ( Покупатель.Координаты = Магазин.Координаты )
ТО ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ОПЕРАЦИИ:
В(Покупатель, Магазин) := ИСТИНА
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРАВИЛЕ:
Приоритет: 100
Локальные переменные: Отсутствуют
Заключение: Покупатель уже в магазине... странно
A.7)
ИМЯ ПРАВИЛА: "У кассира нашлась сдача"
СОДЕРЖАНИЕ ПРАВИЛА :
ЕСЛИ ( В(Покупатель, Магазин) = ИСТИНА ) И
( Устраивает(Покупатель, Магазин) = ИСТИНА ) И
( Устраивает(Покупатель, ЖесткийДиск) = ИСТИНА ) И
( В(Кассир, Магазин) = ИСТИНА ) И
( Кассир.Деньги => Кассир.Сдача )
ТО ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ОПЕРАЦИИ:
Покупатель.Деньги := Кассир.Сдача
Купил(Покупатель, ЖесткийДиск) := ИСТИНА
Покинул(Покупатель, Магазин) := ИСТИНА
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРАВИЛЕ:
Приоритет: 1
Локальные переменные: Отсутствуют
Заключение: У кассира даже нашлась сдача.
A.8)
ИМЯ ПРАВИЛА: "У кассира нет сдачи"
СОДЕРЖАНИЕ ПРАВИЛА :
ЕСЛИ ( В(Покупатель, Магазин) = ИСТИНА ) И
( Устраивает(Покупатель, Магазин) = ИСТИНА ) И
( Устраивает(Покупатель, ЖесткийДиск) = ИСТИНА ) И
( В(Кассир, Магазин) = ИСТИНА ) И
( Кассир.Сдача > Кассир.Деньги )
ТО ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ОПЕРАЦИИ:
Устраивает(Покупатель, ЖесткийДиск) := ЛОЖЬ
Устраивает(Покупатель, Магазин) := ЛОЖЬ
В(Покупатель, Магазин) := ЛОЖЬ
Купил(Покупатель, ЖесткийДиск) := ЛОЖЬ
Покинул(Покупатель, Магазин) := ИСТИНА
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРАВИЛЕ:
Приоритет: 0
Локальные переменные: Отсутствуют
Заключение: Сдачи нет, едем домой
B) Вспомогательные правила - обеспечивают связное изменение одних фактов в соответствии с
изменением других, но не являются действиями-решениями над объектами предметной области.
Правила этого типа рекомендуется использовать для вычисления значений отношений через значения свойств.
B.1) ИМЯ ПРАВИЛА: "Этот ЖД нам не подходит - дорого"
СОДЕРЖАНИЕ ПРАВИЛА :
ЕСЛИ ( В(Покупатель, Магазин) = ИСТИНА ) И
( Устраивает(Покупатель, Магазин) = ИСТИНА ) И
( ЖесткийДиск.Цена > Покупатель.Деньги )
ТО ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ОПЕРАЦИИ:
Устраивает(Покупатель, ЖесткийДиск) := ЛОЖЬ
Устраивает(Покупатель, Магазин) := ЛОЖЬ
Покинул(Покупатель, Магазин) := ИСТИНА
В(Покупатель, Магазин) := ЛОЖЬ
Купил(Покупатель, ЖесткийДиск) := ЛОЖЬ
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРАВИЛЕ:
Приоритет: 0
Локальные переменные: Отсутствуют
Заключение: Этот ЖД слишком дорогой
B.2) ИМЯ ПРАВИЛА: "Этот ЖД нам не подходит - маленький"
СОДЕРЖАНИЕ ПРАВИЛА :
ЕСЛИ ( В(Покупатель, Магазин) = ИСТИНА ) И
( Устраивает(Покупатель, Магазин) = ИСТИНА ) И
( ЖесткийДиск.Объем < Покупатель.ТребуемыйОбъем )
ТО ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ОПЕРАЦИИ:
Устраивает(Покупатель, ЖесткийДиск) := ЛОЖЬ
Устраивает(Покупатель, Магазин) := ЛОЖЬ
В(Покупатель, Магазин) := ЛОЖЬ
Покинул(Покупатель, Магазин) := ИСТИНА
Купил(Покупатель, ЖесткийДиск) := ЛОЖЬ
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРАВИЛЕ:
Приоритет: 0
Локальные переменные: Отсутствуют
Заключение: Этот ЖД слишком маленький
B.3) ИМЯ ПРАВИЛА: "Этот ЖД нам подходит"
СОДЕРЖАНИЕ ПРАВИЛА :
ЕСЛИ ( В(Покупатель, Магазин) = ИСТИНА ) И
( Устраивает(Покупатель, Магазин) = ИСТИНА ) И
( ЖесткийДиск.Объем => Покупатель.ТребуемыйОбъем ) И
( ЖесткийДиск.Цена <= Покупатель.Деньги )
ТО ВЫПОЛНИТЬ СЛЕДУЮЩИЕ ОПЕРАЦИИ:
Устраивает(Покупатель, ЖесткийДиск) := ИСТИНА
ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ О ПРАВИЛЕ:
Приоритет: 0
Локальные переменные: Отсутствуют
Заключение: Этот ЖД нам подходит, надо брать!
Для разрешения конфликтов в процессе логического вывода была использована стратегия "P",
состоящая из следующего набора процедур:
P = { Высший приоритет }
КРАТКОЕ ОПИСАНИЕ ИСПОЛЬЗОВАННЫХ ПРОЦЕДУР:
- Процедура "Высший приоритет" выбирает наиболее приоритетные правила. Чем значение приоритета меньше, тем он выше.