Продукционный диалект RIF Г.В. Лезин Санкт-Петербургский экономикоматематический институт РАН RIF PRD-конформизм производителя и потребителя систем PR продукционных правил Производитель PR Lp – язык правил Трансляция (Lp RIF PRD) Передача Трансляция (RIF PRD Lc ) Потребитель PR Lc – язык правил Продукционная система WM0 PR Рабочая память Продукционные (Исходн. Состоян.) правила Интерпретация правил WM Рабочая память (Результат) Правило: (*имя*) IF (условие) ThenDo (последовательность действий) Атомы условий Атомарные действия 1. T(t1, …, tn) n-местная позиционная 1. формула. 2. T = S эквивалентность 3. T # S принадлежность классу 4. T ## S подкласс класса 5. O[p1v1 … pnvn] фрейм Составная формула условия строится на основе отрицания, конъюнкции и дизъюнкции Семантика правил определяется на основе представления формулы в дизъюнктивной нормальной форме 2. Assert(), пополнить WM фактом , где - позиционный атом, фрейм, принадлежность классу. Retract(), удалить факт из WM; - позиционный атом, фрейм. 3. Retract(O, P), у объекта O удалить все значения v слота P. 4. Retract(O), удалить объект O вместе со всеми фактами, непосредственно связанными с этим объектом Составное действие Modify(o[pv]) эквивалентно последовательности Retract(o, p) Assert (o[pv]) Пример (* ex1:GoldRule *) (Forall ?customer such that And( ?customer#ex1:Customer ?customer[ex1:status->"Silver"] (Forall ?shoppingCart such that (?customer[ex1:shoppingCart->?shoppingCart]))) (If Exists ?value (And( ?shoppingCart[ex1:value->?value] pred:numeric-greater-than-or-equal(?value 2000)) Then Do( Modify( ?customer[ex1:status->"Gold"] ) ) ) ) (* ex1:DiscountRule *) ( Forall ?customer such that (And( ?customer # ex1:Customer ) ) (If Or (?customer[ex1:status->"Silver"] ?customer[ex1:status->"Gold"] ) Then Do( (?s ?customer[ex1:shoppingCart->?s]) (?v ?s[ex1:value->?v]) Modify( ?s[ex1:value->func:numeric-multiply(?v 0.95)] ) ) ) ) Структура RIF PRD-правил Общая структура: (* имя правила *) Forall описания селектирующих шаблонов If условие ThenDo блок действий декларация переменных блока последовательность действий Виды правил: - безусловные; - условные; - содержащие описания шаблонов. Сеть условий для системы правил P1=?x1#Customer ?x1[status”Gold”] P2=?x1[status”Silver”] P3=?x1[shoppingCard?x2] ?s ?x1[ex1:shoppingCart->?s ?v ?s[ex1:value->?v] ?v x2[valuev] v 2000 Modify(?x1[value(t3*0.95)] Var={x1} Modify(x1[status”Gold”] Var={x1, x2} Схема интерпретации системы правил PR PR Построение сети селектирующих шаблонов 0-ой шаг Построение сети условий (в дизъюнктивной нормальной форме); проверка системы на безопасность Заполнение сетей фактами из WM0 Переход системы в очередное состояние Выбор правила (состояние системы) Исполнение правила Коррекция сетей и рабочей памяти WM Состояния системы правил RS Текущее состояние s системы правил RS характеризуется: - состоянием базы фактов facts(s); - конфликтным множеством экземпляров правил conflictSet(RS,s) готовых к исполнению в условиях facts(s); - функцией previous(s), определяющей состояние из которого система перешла в s в результате последнего атомарного действия. Предшествующие текущему s состояния дополнительно характеризуются функцией picked(ps), значением которой является экземпляр правила из conflictSet(RS, ps), активизированный в состоянии ps. Различают три вида состояний правил: - состояния перехода, в которых conflictSet(RS, s)=1; - циклические состояния, в которых conflictSet(RS, s) содержит более одного экземпляра правила; - финальные состояния, в которых conflictSet(RS, s)=0. Характеристики конфликтных ситуаций в системе правил Конфликтные ситуации возникают в циклических состояниях s. recency(ri, s) – характеристика «новизны» использования экземляра правила ri в состоянии s: if previous(s) = NIL, then recency(ri, s) = 1; else if ri conflictSet(RS, previous(s)), then recency(ri, s) = 1 + recency(ri, previous(s)); •else, recency(ri, s) = 1. •lastPicked(ri, s) – характеристика дистанции от состояния s до состояния, в котором экземпляр правила ri был активизирован последний раз: •if previous(s) = NIL, then lastPicked(ri, s) = 1; •else if ri picked(previous(s)), then lastPicked(ri, s) = 1; •else, lastPicked(ri, s) = 1 + lastPicked(ri, previous(s)). Правила разрешения конфликных ситуаций Рефракция: if ri cs and lastPicked(ri, s) < recency(ri, s), then cs = cs - ri; Приоритет: if ri cs and ri' cs and priority(ri) < priority(ri'), then cs = cs - ri; Правило новизны: if ri cs and ri' cs and recency(ri, s)>recency(ri', s), then cs = cs -ri; Разрыв связей: if ri cs, then cs = {ri}. RIF-PRD не определяет последнее правило более точно: способ выбора единственного экземпляра правила из оставшейся части множества cs отдан на откуп конкретной реализации продукционной системы. rif:forwardChaining - стандартный алгоритм разрешения конфликтной ситуации в состоянии s 1. Инициализируется исходное множество picked(s) экземпляров правил, подлежащих анализу : picked(s) = conflictSet(RS, s); 2. Ко всем элементам множества picked(s) применяется правило рефракции. 3.Затем к оставшейся части picked(s) применяется правило приоритета. 4. На следующем шаге к оставшимся элементам picked(s) применяется правило новизны. 5. Далее, если оставшаяся часть picked(s) содержит более одного элемента, осуществляется разрыв связей Результ алгоритма - picked(s), содержащее единственный экземляр правила, отобранный для активизации. Расстановка приоритетов (пример) Document ( Prefix( ex2 <http://example.com/2009/prd3#> ) (* ex2:ExampleRuleSet *) Установлен priority=0 Group ( (* ex2:Rule_1 *) Forall ... Наследован priority=0 (* ex2:HighPriorityRules *) Установлен priority=10 Group 10 ( (* ex2:Rule_2 *) Forall ... Наследован priority=10 (* ex2:Rule_3 *) Group 9 (Forall ... ) ) Установлен priority=9 (* ex2:NoPriorityRules *) Наследован priority=0 Group ( (* ex2:Rule_4 *) Forall ... Наследован priority=0 (* ex2:Rule_5 *) Forall ... ) ) Наследован priority=0 Семантически защищенное отображение Отображение множества RIF PRD-правил R во множество правил RL, представленное на языке L является семантически защищенным, если и только если: - для любого начального состояния базы фактов, - заданной стратегии разрешения конфликтов и - заданного множества конечных состояний каждая формула из RL в свою очередь отображается в набор базовых формул из R. Отображение множества правил RL, выраженных на языке L, во множество RIF PRD правил R является семантически защищенным, если и только если: - для любого начального состояния базы фактов, - заданной стратегии разрешения конфликтов и - заданного множества конечных состояний -каждое множество базовых RIF-PRD атомарных формул в свою очередь отображается в формулу из RL. Благодарю за внимание!