Разработка автоматизированных экспертных систем в Exsys CORVID. Лабораторный практикум
.pdf
Это можно также сделать, нажимая на кнопку «Add to List» последовательно для каждого значения. Но первый способ проще и быстрее.
В список «Nodes to Add» внесены оба требуемых условия для будущих правил. По мере добавления в список «Nodes to Add» значения удаляются из списка «Select Values». Так как была нажата кнопка «Add Each Individually», все значения переместились из верхнего списка в нижний.
Выполненная только что операция позволяет создать для каждого значения индивидуальный узел в дереве. Иногда требуется объединить несколько значений, схожих по смыслу, в один узел. Это можно сделать, выделив несколько требуемых значений с помощью комбинации клавиши <Shift> или <Ctrl> + щелчок мыши и нажав на кнопку «Add All in One Item».
Для добавления в окно «Logic Block» этих двух IF-узлов необходимо нажать на кнопку «Done». Они будут использованы для формирования IF-частей будущих правил. Эти узлы объединены скобкой красного цвета (рис. 3.5).
Рис. 3.5. Окно «Logic Block»
Эта скобка указывает, что узлы добавлены одновременно и взаимосвязаны между собой. Обычно это показывает, что узлы построены по различным значениям одной переменной. Если добавить больше узлов, то они также будут связаны скобкой.
21
Такие скобки особенно полезны, когда необходимо улучшить систему, так как они показывают взаимосвязанные узлы. Они повышают информативность отображаемых знаний, но не влияют на логику работы системы.
Красный цвет скобки показывает, что с данными IF-узлами не ассоциированы никакие THEN-узлы, т.е. они не соответствуют пока еще полноценным правилам. Когда недостающие THEN-узлы будут добавлены, скобки изменят цвет на зеленый. Таким образом, красные скобки помогают отслеживать состояние дерева, если оно достаточно сложное и разветвленное.
Теперь, чтобы добавить THEN-узел для первого узла «Признак_1 = Значение_1_1», необходимо его выделить (см. рис. 3.5). Как только он будет выделен, в окне «Rule View» отобразится правило для данного узла (рис. 3.6).
Рис. 3.6. Окно правил «Rule View»
Недостающий THEN-узел может быть построен либо на основе присваивания значения какой-либо переменной, либо с помощью команды (команды реже используются в логических блоках). Для добавления THEN-узла на основе переменной нажмите на кнопку «Variable», расположенной под меткой «THEN» (см. рис. 3.5). Снова появится окно добавления узлов в логический блок (рис. 3.7).
THEN-узлы всегда присваивают какие-либо значения переменным. В данном примере надо добавить узел, соответствующий знанию о том, что следует «Ситуация_1 := 10 баллов». В систему уже добавлена доверительная переменная, представляющая это действие, – «Ситуация_1». Далее необходимо нажать на имя этой переменной, чтобы ее выделить (рис. 3.7), затем
22
присвоить переменной фиксированное значение 10 баллов во вкладке «Expression».
Доверительные переменные имеют много применений в CORVID, но наиболее часто они используются для представления возможных рекомендаций пользователю. Доверительные значения, присваиваемые переменным, также могут применяться для оценивания возможности возникновения различных ситуаций.
Рис. 3.7.Окно «Add To Block»
Нажмите на кнопку «Add to List», чтобы переместить эту переменную в список узлов для добавления «Nodes to Add».
Вбольшинстве случаев переменные в CORVID отображаются
вквадратных скобках [ ], но переменные со статическим списком значений – без них.
23
Составные THEN-узлы могут добавляться таким же образом, но при этом они должны быть ассоциированы с одним и тем же IF-узлом. Поскольку в данном случае требуется одиночный THEN-узел, то надо нажать на кнопку «Done» для добавления узла к логическому блоку.
Теперь узел [Ситуация_1] = 10 добавлен к дереву в логическом блоке (рис. 3.8). Этот узел отмечается маленькой стрелкой. Желтый цвет указывает на то, что он построен с помощью доверительной переменной. Отступ перед новым узлом относительно узла «Признак_1 = Значение_1_1» указывает на то, что эти узлы связаны. Если добавляется составной THEN-узел, то все его элементы отображаются подобным образом.
Рис. 3.8. Окно «Logic Block», узел [Ситуация_1] = 10
Соответствующее выделенному узлу дерева правило «IF …, THEN …» также отображается в окне «Rule View».
Теперь добавим второе правило «IF («Признак_1» = «Значение_1_2»), THEN («Ситуация_2» := 10 баллов)».
Выделите IF-узел «Признак_1 = Значение_1_2». Так же как и в прошлый раз, следует присвоить положительное значение соответствующей доверительной переменной. Поэтому нажмите на кнопку «Variable» в поле «THEN». В появившемся окне «Add to Block» выполните следующие действия: выделите «Ситуация_2», введите значение 10, которое будет присвоено выделенной переменной, и нажмите на кнопку «Add to List». После
24
этих действий в списке «Nodes to Add» появится имя выделенной переменной и присвоенное ей значение. Нажмите на кнопку «Done» для добавления нового узла в логический блок.
Второй THEN-узел добавлен в дерево логического блока № 1. Соответствующее ему правило отображается в окне «Rule View». Поскольку логический блок № 1 завершен, нажмите на кнопку «Done».
Для создания логического блока № 2 выберите пункт «Logic Block» в меню «Windows» или нажмите на кнопку панели инструментов (см. рис. 3.1). Для добавления третьего правила «IF (0 ≤ «Признак_2» ≤ 50), THEN («Ситуация_1» := 20 баллов)» необходимо нажать на кнопку «Add» в поле «IF». В окне «Add to Block» нажмите на переменную «Признак_2». Выбранная переменная – переменная типа «Numeric Variable», поэтому справа откроется вкладка «Expression» и в поле ввода появится эта переменная в квадратных скобках. Далее следует ввести условие «[Признак_2] >= 0». Нажмите на кнопку «Add to List», а затем на кнопку «Done». Условие добавится в Logic Block. Выделите это условие и нажмите на кнопку «Below» в поле «AND». Далее
вокне «Add to Block» нажмите на переменную «Признак_2» и
вполе ввода введите условие «[Признак_2] <= 50», нажмите на кнопку «Add to List», а затем на кнопку «Done». Далее нажмите на кнопку «Variable» в поле «THEN». В появившемся окне «Add to Block» выполните следующие действия: выделите «Ситуация_1», введите значение 20, которое будет присвоено выделенной переменной, и нажмите на кнопку «Add to List», а затем
«Done». Аналогично вводится четвертое правило «IF (50 < «Признак_2» ≤ 100), THEN («Ситуация_2» := 20 баллов)» (рис. 3.9). Для ввода этого правила следует выделить «[Признак_2] >= 0» и нажать на кнопку «Below» в поле «Same Level», а затем повторить описанные выше действия, в результате которых логическое дерево будет иметь вид, представленный на рис. 3.9).
Один «Logic Block» может содержать несколько правил в одном или более деревьях. Такой подход дает возможность быстро создавать системы, позволяет легко их объяснять и управлять ими. Для данной простейшей системы добавлены все необходимые узлы для построения четырех требуемых правил. Для закрытия окна «Logic Block» нажмите на кнопку «Done». Ре-
25
зультирующий отчет будет содержать все доверительные переменные, получившие значения больше 0.
Рис. 3.9. Окно «Logic Block», отражающее логическую структуру правил экспертной системы
26
4. Лабораторная работа 3. РАЗРАБОТКА КОМАНДНОГО БЛОКА ЭКСПЕРТНОЙ СИСТЕМЫ
Каждая CORVID-система должна иметь командный блок для контроля работы системы. Если логические блоки содержат правила, по которым принимается решение, то командные блоки описывают, что нужно для этого сделать.
Для создания командного блока выберите пункт «Command Block» в меню «Windows» или нажмите на кнопку «Add a New Command Block» (рис. 4.1). На экране появится окно «Command Block» (рис. 4.2).
Рис. 4.1. Меню «Windows» и значок «Add a New Command Block»
Рис. 4.2. Окно «Command Block»
27
Типовой «Command Block» «сообщает» системе, что переменной или переменным присваиваются значения, и потом выводит результаты пользователю.
Существует два типа команд, которые могут быть добавлены в «Command Block» – «Control Commands» (команды контроля) и «Operational Commands» (команды операций, операционные команды).
«Control Commands» содержит циклы «IF», «WHILE» и «FOR». Их можно добавлять с помощью кнопок на панели «Control». Эти команды используются в сложных экспертных системах.
«Operational Commands» выполняет в CORVID специальные операции. Чтобы их добавить, необходимо нажать на кнопку «Add» на панели «Command».
Командному блоку системы автоматически назначается имя «Command Block 1». Большинство систем используют только один командный блок, поэтому имя можно не изменять. Для добавления нового блока нажмите на кнопку «Add». На экране появится окно формирования командного блока «Commands» (рис. 4.3).
Рис. 4.3. Окно формирования командного блока «Commands»
28
Это окно используется для построения любых команд в CORVID. Не нужно запоминать синтаксис этих команд, просто надо выбрать соответствующие опции. В логическом блоке были использованы доверительные переменные для представления возможных рекомендаций. Поэтому необходимо добавить в систему команды в целях указания системе использовать эти логические блоки для вывода значений доверительных переменных.
Для этого необходимо перейти на закладку «Variables» и нажать на кнопку-переключатель «Derive a value from TO BE and Logic Blocks». В соответствующей секции можно указать конкретные переменные или группу по типу либо по текстовому шаблону. В данном случае необходимо вывести значения всех переменных, поэтому выделите переключатель «All Confidence Variables».
Вэтом примере автоматически была сформирована команда «DERIVE CONF» для запуска системы. В различных системах могут использоваться разные типы команд для запуска. Так как большинство систем применяют доверительные переменные для описания возможных ситуаций, то приведенная команда «DERIVE CONF» используется очень часто. Для добавления этой команды нажмите OK.
Во вкладке «Variables» применяются следующие типы команд:
1)«SET» – присваивает значение переменной. В большинстве случаев данную операцию лучше производить в «Logic Block» или при объявлении переменной;
2)«DERIVE» – использует «Logic Block» для нахождения значения переменной. Эта команда чаще всего применяется при запуске системы. Обычно в результате команды «DERIVE» CORVID использует все логические блоки для присваивания значения одной или более переменным с помощь «backward chaining» («обратного соединения»), если оно нужно;
3)«ASK» – спрашивает у пользователя значение переменной. CORVID автоматически спрашивает значение необходимых переменных, следуя логике системы. Иногда разработчик может прервать эту последовательность и «спросить» значение какойлибо переменной. Эта команда редко используется в простых системах, где последовательность задана четко.
Вкомандный блок добавлена новая команда. К каждой команде добавляется комментарий. Эти комментарии предназна-
29
чены для документирования команд и облегчают поддержку системы. Для добавления комментария введите его в поле редактирования «Comment».
После ввода текста комментария он автоматически добавляется к команде. Комментарии не являются обязательными и могут не добавляться к командам.
Команда «DERIVE CONF» позволит осуществить вывод значений всех доверительных переменных с помощью логического блока. Теперь необходимо отобразить результаты работы системы. Для этого используется команда «RESULTS», которая также добавляется с помощью окна формирования команд.
Если команда «DERIVE CONF» не выделена, то выделите ее. Затем нажмите на кнопку «Add Below» для добавления новой команды (рис. 4.4). Кнопки «Add Below» и «Add Above» добавляют новые команды после или перед текущей выделенной командой. Снова появилось окно «Commands», в котором необходимо перейти на закладку «Results» (см. рис. 4.3).
Рис. 4.4. Окно «Command Block»
Существует несколько способов отображать результаты. Наиболее общий способ – использовать стандартное окно результатов. Чтобы применить стандартную форму отображения, выберите вариант «Display Default Results Screen» и нажмите OK (рис. 4.5).
В данной системе нет команд для отображения результатов, поэтому на экран будут выведены все доверительные переменные, которым было присвоено значение в процессе выполнения работы экспертной системой.
30
