О нас | Наши проекты | Публикации | Контакты
Русский | English



Язык визуального моделирования правил
Rule Visual Modeling Language

Rule Visual Modeling Language

Спецификация 3.2021

Rule Visual Modeling Language (RVML) - визуальный язык, предназначенный для моделирования баз знаний, содержащих логические правила, и генерации программных кодов на языках программирования, реализующих этот формализм.

RVML основан на UML и может рассматриваться как его профиль расширения с использованием терминологии диаграмм классов, поэтому в качестве базовых элементов используются понятия «класс» и «ассоциация».

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

RVML имеет расширение, называемое FuzzyRVML, поддерживающее использование лингвистических (нечетких) переменных и коэффициентов уверенности для учета нечеткости и неопределенности в рассуждениях. Значение лингвистической переменной определяется с помощью, так называемых нечетких множеств. Нечеткое множество определяется через некоторую базовую шкалу (набор базовых значений) и функцию принадлежности µ(x). Функция принадлежности – это кривая, которая определяет, как каждая точка в диапазоне соотносится со значением принадлежности (или степенью принадлежности) в интервале [0, 1]. Таким образом, функция принадлежности определяет субъективную степень уверенности эксперта в том, что конкретное значение базовой шкалы соответствует определенному нечеткому множеству. Существует два способа задания функции принадлежности: табличный и аналитический. Определены следующие типы описания функции принадлежности для аналитического метода: треугольная; трапециевидная; S-образная; Z-образная; U-образная и др.

Формальное описание

RVML = { Fact }, { Template }, { Rule }, { Relationship }, { FuzzyVar }, { GeneralizedRule }. Rule = (Condition { Condition }), Core, (Action { Action }). Condition = ConditionElement { ConditionElement }. Action = ActionElement { ActionElement }. ConditionElement = ConditionOperator, Fact { Fact } | ConditionOperator, ConditionElement. ActionElement = ActionOperator, (Fact { Fact }). ActionOperator = "Add" | "Delete" | "Modify" | "Stop". ConditionOperator = "AND" | "OR" | "NOT". Fact = Name, CertaintyFactor, Slot { Slot }. Slot = Name, Constraint, Value, [DataType], [Term]. Core = Name, CertaintyFactor, Priority. Name = String. Value = Number | String | Set. String = Symbol { Symbol }. Symbol = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" | "А" | "а" | "Б" | "б" | "В" | "в" | "Г" | "г" | "Д" | "д" | "Е" | "е" | "Ё" | "ё" | "Ж" | "ж" | "З" | "з" | "И" | "и" | "Й" | "й" | "К" | "к" | "Л" | "л" | "М" | "м" | "Н" | "н" | "О" | "о" | "П" | "п" | "Р" | "р" | "С" | "с" | "Т" | "т" | "У" | "у" | "Ф" | "ф" | "Х" | "х" | "Ц" | "ц" | "Ч" | "ч" | "Ш" | "ш" | "Щ" | "щ" | "Ъ" | "ъ" | "Ы" | "ы" | "Ь" | "ь" | "Э" | "э" | "Ю" | "ю" | "Я" | "я"| "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" . Set = Value ";" { Set }. Constraint = ">" | "<" | "=" | ">=" | "<=" | "<>". CertaintyFactor = [0,1]. Priority = [1,100]. Template = Name, Slot { Slot }, FuzzyVar { FuzzyVar }. DataType = "String" | "Number" | "Fuzzy". Relationship = Element, Connection, Element. Connection = Kind, Name. Kind = "Association" | "Dependenses". Element = Condition | Action | Template | Core | FuzzyVar | Term | Fact. Term = Name, FunctionType, TermValue { TermValue }, FunctionType. TermValue = Value, Probability. Probability = [0,1]. FuzzyVar = Name, Term { Term }, Domain, Units, FunctionType. FunctionType = Tabular | Analytical. Tabular = "T". Analytical = "A". Domain = "[" Number { Number } "," Number { Number } "]". Number = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9". Units = String. GeneralizedRule = (Template { Template }), Core, (Template { Template }).

Графические элементы

RVML включает 8 графических элементов (Рис. 1 и 2). При этом 5 являются основными или базовыми, 3 используются в расширении FuzzyRVML.
Основные элементы:
1. Шаблон факта (Рис.1, 1) используется для описания шаблонов фактов и частей обобщенных правил (шаблонов правил), таких как условие и действие. Включает наименование и описание слотов. При этом каждый слот содержит собственное наименование, тип данных и значение «по умолчанию».
2. Узловой элемент (или ядро) правила (Рис.1, 2) является связующим звеном при представлении правила как композиции множества фактов, как условий и фактов, как действий. Узловой элемент позволяет представить наименование правила, коэффициент уверенности (CF) и приоритет (P).
3. Факт, как элемент действия правила (Рис.1, 3), используется для представления фактов, над которыми производятся манипуляции в рабочей памяти. Данный элемент позволяет представить наименование факта и его описание через определенные слоты, но и коэффициент уверенности (CF).
4. Факт, как элемент условия правила (Рис.1, 4), используется для представления фактов, которые активируют правила в рабочей памяти. Для обозначения управляющего характера этих фактов, по аналогии с диаграммами управляющих потоков используется пунктирное изображение всех линий графического элемента. Данный элемент позволяет представить наименование факта и его описание через определенные слоты, но и коэффициент уверенности (CF).
5. Соединение между элементами (Рис.1, 5), представлено как ассоциация, содержащая узел для отображения операции с фактами в рабочей памяти: «+» – добавление; «-» – удаление; «~» – изменение; «!» – остановка логического вывода.

Основные элементы RVML: 1) шаблон факта; 2) узловой элемент правила; 3) факт; 4) условие; 5) связи элементов с указанием действий

Рис.1 Основные элементы RVML: 1) шаблон факта; 2) узловой элемент правила; 3) факт; 4) условие; 5) связи элементов с указанием действий.

Элементы расширения для обозначения их нечеткого или недоопределенного характера отображаются точечными линиями:
1. Нечеткая или лингвистическая переменная (Рис.2, 1) содержит информацию о наименовании переменной, диапазоне возможных значений, единицах измерения, типе функции принадлежности, термах.
2. Терм (Рис.2, 2), определяющий значение определенной нечеткой переменной согласно заданной функции принадлежности. Содержит наименование, тип функции принадлежности, возможные значения с указанием их вероятности.
3. Соединение между элементами (Рис.2, 3), представлено как зависимость, фиксирующее связь между нечеткой переменной и ее темами (Рис.2, 4), а также шаблонами и нечеткими переменными (Рис.3, 1), фактами и термами (Рис.3, 2).

Основные элементы FuzzyRVML: 1) лингвистическая (нечеткая) переменная; 2) терм; 3) связь типа «зависимость»; 4) представление связи между нечеткой переменной и ее термами

Рис.2 Основные элементы FuzzyRVML: 1) лингвистическая (нечеткая) переменная; 2) терм; 3) связь типа «зависимость»; 4) представление связи между нечеткой переменной и ее термами.

Основные элементы и элементы расширения могут использоваться совместно, в частности, на Рис.3 приведены примеры описания шаблона факта с лингвистической (нечеткой) переменной, а также описания факта с нечетким термом.

Примеры интеграции элементов RVML и FuzzyRVML: 1) шаблон факта с лингвистической (нечеткой) переменной; 2) факт с термом

Рис.3 Примеры интеграции элементов RVML и FuzzyRVML: 1) шаблон факта с лингвистической (нечеткой) переменной; 2) факт с термом.

Пример обобщённого правила (шаблона правила) в нотации RVML (снимок экрана программного средства PKBD)

Рис.4 Пример обобщённого правила (шаблона правила) в нотации RVML (снимок экрана программного средства PKBD).

Пример правила (экземпляра шаблона правила) в нотации RVML (снимок экрана программного средства PKBD)

Рис.5 Пример правила (экземпляра шаблона правила) в нотации RVML (снимок экрана программного средства PKBD).

Примеры форм пользовательского интерфейса PKBD: 1) форма описания лингвистической (нечеткой) переменной; 2) представление лингвистической (нечеткой) переменной и ее термов в FuzzyRVML; 3) интегрированное представление элементов RVML и FuzzyRVML при описании шаблона фактов с лингвистической (нечеткой) переменной

Рис.6 Примеры форм пользовательского интерфейса PKBD: 1) форма описания лингвистической (нечеткой) переменной; 2) представление лингвистической (нечеткой) переменной и ее термов в FuzzyRVML; 3) интегрированное представление элементов RVML и FuzzyRVML при описании шаблона фактов с лингвистической (нечеткой) переменной.

Преобразования в код

Одним из назначений RVML является преодоление семантического разрыва между визуальными моделями и программными кодами, в связи с этим обеспечено однозначное соответствие между графическими элементами и языковыми конструкциями языков программирования правил для интеллектуальных систем, в частности, CLIPS (FuzzyCLIPS) и Drools. Данное соответствие в дальнейшем используется для реализации автоматизированной кодогенерации. В таблице 1 приведены примеры соответствий.

Примеры элементов RVML/FuzzyRVML Соответствующие элементы CLIPS/FuzzyCLIPS
FuzzyVar with terms (deftemplate F-AGE 0 120 ( (YOUNG (25 1) (50 0)) (OLD (50 0) (65 1)) ) )
Template with FuzzyVar (deftemplate Person (slot age (default "F-AGE")) )
Fact with term (Alex (age "YOUNG") ) CF 0.9
Rule (defrule Rule-1 "Description"<br> (Temperature ;Тemperature (Value "+35") (cf "1") ) (Precipitation ;Precipitation (Amount 0) (cf "1") ) (Wind ;Wind (Speed 1) (Direction "SOUTH") (cf "0.9") ) => (assert (Weather-conditions ; (Type "DRY") (Fire-Risk "HIGH") (cf "0.9") )) )
Коэффициент уверенности в правилах (defrule <RuleName> (declare (CF <CertaintyFactorValue>)) ...

Особенности

Основные особенности RVML (включая расширение):

  • Отдельные графические элементы для всех компонентов правил без каких-либо стереотипов или типизированных классов, как в UML.
  • Четкая визуальная индикация действий продуцируемых правилами (добавление, удаление, изменение, остановка).
  • Может рассматриваться как профиль расширения UML, использующий терминологию диаграмм классов: понятия «класс», «ассоциация» и «зависимость» являются основой для его элементов.
  • Абстрагирование от различных конкретных языков представления знаний: логические правила представляются в обобщенном виде.
  • Может использоваться для моделирования неполноты и нечеткости и содержит специализированные элементы: o тип данных (Fyzzy); лингвистическая (нечеткая) переменная (FuzzyVar) и набор нечетких термов как возможные значения лингвистической переменной; коэффициент уверенности (Certainty Factor).
  • Может использоваться для синтеза программных кодов на CLIPS, FuzzyCLIPS, Drools и др.

Текущая спецификация RVML позволяет описывать только простые правила, однако возможно расширение ее выразительных способностей с помощью языка объектных ограничений – Object Constrained Language (OCL). Также в текущей версии не поддерживаются функции, родовые процедуры, переменные, вычисляемые значения и другие особенности разных языков программирования правил.

RSS.The Knowledge Core Новости: