2.3. Программирование нечеткой системы в среде MATLAB с использованием встроенных функций. 51
2.4. Кластеризация с помощью алгоритма нечетких центров. 57
3. Компьютерный практикум по нейронным сетям.. 67
3.1. Аппроксимация функции на основе нейронных сетей. 67
3.2. Использование инструмента NNTool для построения нейронной сети 70
3.3. Кластеризация с помощью нейронных сетей. 78
3.4. Рекуррентные нейронные сети Хопфилда и Хэмминга. 86
3.5. Нейронные сети радиально-базисных функций. Вероятностные сети 90
3.6. Построение нейронечеткой модели с помощью ANFIS-редактора 94
Приложение 1. Функции пакета «Fuzzy Logic Toolbox» системы MATLAB для работы с системами нечеткой логики. 100
Приложение 2. Функции пакета «Neural Network Toolbox» системы MATLAB для работы с нейронными сетями. 103
1. Компьютерный практикум по экспертным системам
1.1. Экспертная оболочка KAPPA – инструментальное средство разработки экспертных систем
1.1.1. Представление знаний и интерфейс в системе KAPPA
Экспертная оболочка (ЭО) KAPPA версии 1.2 предназначается для построения ЭС. Она является экспертной оболочкой общего назначения и содержит все программные компоненты ЭС. При работе с ней в задачу пользователя входит лишь разработка БЗ и необходимого для его прикладной задачи интерфейса.
В оболочке KAPPA для представления знаний используются две модели – объектно-ориентированная модель и продукционные правила. В результате объектная модель предметной области может быть представлена в виде иерархии классов и объектов, а функциональная модель – в виде продукционных правил.
Для описания свойств классов и объектов используютсяслоты. На множестве классов и объектов осуществляется наследование свойств. Благодаря этому общие для классов (объектов) свойства могут быть определены один раз (в одном классе), а все потомки этого класса унаследуют их. Возможна отмена этого наследования.
Процессы, происходящие в предметной области, отражаются в БЗ оболочки КАРРА тремя способами.
1. Методы(присоединенные к объектам процедуры). Используются для описания поведения слотов. Методы создаются на языке KAPPA-приложений KAL (КАРРА Application Language).
2. Функции. В системе КАРРА содержится более 240 стандартных (встроенных) функций для манипулирования БЗ. Также можно создавать свои собственные функции на Си или KAL.
3. Правила. Позволяют отражать шаги моделируемого процесса, осуществлять логический вывод на основании текущего состояния объектов.
Синтаксическая основа правил, методов и функций одинакова и определяется синтаксисом языка КАРРА –приложений.
Интерфейс системы KAPPA. После запуска системы KAPPA на экране появляются три окна: главное (KAPPA-(untitled)), окно просмотра иерархии объектов (Object Browser) и окно инструментов знаний (Knowledge Tools или KTools).
Главное окно содержит основное меню системы KAPPA (File, Edit, Windows и Options) и панель иконок для быстрого доступа к другим окнам оболочки. Кроме того, в этом окне скрыта еще одна часть - комментарии к приложению.
Основное менюявляется стандартным для Windows-приложений. Оно содержит четыре пункта: для работы с файлами, редактирования комментария для разработанного приложения, манипулирования окнами системы КАРРА, включения/отключения видимости комментария к приложению. Заметим, что приоткрытии/закрытии файла необходимо выбрать его формат - bin или kal (bin - двоичный, kal - ASCII-файл, подобный txt-файлу). Одновременно может быть открыт только один bin-файл.
МенюОкна (Windows) содержит 7 постоянных пунктов, которые позволяют скрыть(Hide) или показать (Show) рабочие окна системы КАРРА, среди которых:
• Окно просмотра иерархии объектов (Object Browser). С помощью этого окна можно просматривать и модифицировать классы и объекты модели, а также связи между ними, которые наглядно представлены деревом иерархии.
• Окно инструментов знаний (Knowledge Tools). Окно инструментов знаний (The Knowledge Tool Window) обеспечивает доступ ко всем элементам знаний в системе KAPPA - классам, объектам,функциям, правилам и целям, позволяет их создавать, модифицировать, переименовывать и уничтожать. Кроме того, в этом окне отражается количество всех перечисленных элементов в текущей БЗ (справа, в скобках). Все типы элементов представлены иконками, выбор одной из которых вызывает появление меню New/Edit/Delete/Rename.
• Окно интерпретатора языка системы КАРРА (KAL Interpreter). Окно позволяет интерпретировать Kal-выражения, является альтернативой редакторам знаний и Окну иерархии объектов, а также механизмом тестирования Kal-выражений. В этом окне можно выполнить любую корректную функцию, что позволяет быстро проверить правильность ее написания и работы.
• Окно сеанса (Session). Для конечного пользователя KAPPA -приложений это окно является основным элементом интерфейса. Разработчик приложения может настроить Session в соответствии с решаемой задачей, что облегчит взаимодействие пользователя с системой. КАРРА.
• Окно связи правил (Rule Relations). В этом окне можно просматривать связи правил, возникающие в процессе логического вывода.
• Окно трассировки правил (Rule Tracing). Это окно позволяет просматривать процесс рассуждения поэтапно, т.е. является инструментом отладки (трассировки) системы правил.
• Окно просмотра иерархии выводов (Inference Browser). Позволяет просматривать в графической форме правила, активизируемые в процессе рассуждения, т.е. направление вывода решения (сразу после окончания процесса рассуждения). Это окно можно использовать для обнаружения ошибок в используемой БЗ.
Открыть эти окна можно также выбором соответствующей иконки в главном окне системыКАРРА.
1.1.2. Редакторы знаний и функции системы KAPPA
Синтаксис языка приложений КАРРА. Все элементы языка оболочки КАРРА можно разделить на следующие синтаксические группы:
1) атомы - отдельное слово или группа слов в кавычках;
2) пары - имя объекта: имя слота;
3) выражения установки - некоторые выражения, разделенные операторами установки (=, +=, +, -, *, /, ^, <, >, <=, =>, ==, !=, ~=, #, #=, And, Or, Xor, Not);
4) специальные выражения - функции управления типа While, For, ForAll, If, Let;
5) выражения-блоки - выражения в фигурных скобках ({}), разделяемые точкой с запятой (как в Си). После закрывающей скобки не забудьте поставить точку с запятой ({};);
6) запрос функции - имя функции и аргументы в виде параметров. Общий вид вызова функции: Имя функции (аргумент1,аргумент2,...);
Язык ЭО КАРРА очень чувствителен к синтаксису,нельзя, например, путать маленькие буквы с заглавными! Аргументами функции могут быть перечисленные выше первые пять элементов языка.
Редакторы знаний – это окна, которые позволяют создавать, проверять и модифицировать элементы знаний. К таким окнам относятся редакторы объектов, классов, слотов, методов, правил, целей и функций. Каждый редактор содержит необходимые инструменты (меню, кнопки и т.д.). Пункт Edit в каждом из них имеет стандартные возможности (Cut, Paste...).
Редакторы классов, объектов, функций, правил и целей можно открыть из окна Инструментов знаний (KTools). В редакторы объектов и классов можно попасть также из окна Иерархии объектов (Object Browser), а редакторы слотов и методов доступны только из редактора объекта или класса, так как первые привязаны к последним.
Одновременно на экране может быть открыто несколько окон-редакторов, но нельзя открыть сразу 2 редактора для одного и того же элемента знаний.
Все функции в системе KAPPA разделены на группы: манипулирования элементами знаний (Knowledge), математические (Math), работы со строками (String), со списками (List), логические (Logical), манипулирования файлами (File), управления или взаимодействия с ОС (Control), работы с окнами КАРРА и с объектами интерфейса (Windows), определенные пользователем функции (User Functions), все функции (All Functions). Получить доступ к имеющимся функциям можно в любом окне системы KAPPA, где возможно использование выражений в KAL-коде. Для этого нажатием правой кнопки мыши вэтом окне активизируется всплывающее меню, с помощью которого можно оперативно выбрать из имеющихся необходимую группу функций. С выбором группы функций на экране появляется окно Выбора команды (Select Command), где представлены функции выбранной группы. После щелчка левой кнопкой мыши на любой из них внизу окна появляется формат и список аргументов функции. В описании формата необязательные аргументы указаны в угловых скобках (<...>), а если такой аргумент помещен еще и в квадратные скобки (<[...]>) или стоит на последнем месте среди аргументов функции (не помещен в [ ]), то его можно просто опускать. В противном случае, на этом месте нужно указать необходимое значение параметра или NULL . Если аргумент или список аргументов помещен в скобки следующим образом - [<...>], то даже при отсутствии аргумента (который, кстати, является необязательным (<>)) необходимо указать квадратные скобки ([ ]).
Пример. Формат команды, создающей класс.
MakeClass (@className, @<superName>) .
Аргументами этой команды являются имена создаваемого и родительского классов. Символ @ отмечает аргументы и при записи функции опускается.
Пользователь создает свои функции в редакторе функций, куда можно войти щелчком по пиктограмме Function в окне инструментов Ktools и выбрав Edit или New.
Выполнить любую функцию можно в окне Интерпретатора языка KAL. Приглашение в этом окне имеет вид стрелки =>. Описание исполняемой функции должно оканчиваться точкой с запятой. Выполним два примера. Оба эти примера можно было с таким же успехом выполнить в окне Иерархии объектов.
Пример: Создать подкласс Ground в родительском классе Volost. Это можно сделать с помощью функции MakeClass из группы функций манипулирования знаний. Ее аргументами являются имена создаваемого и родительского классов:
=>MakeClass (Ground, Volost);
Ground
В следующей строке интерпретатор вывел результат исполнения функции (ее значение) – имя созданного класса.
Если среди аргументов функции фигурирует обозначение слота некоторого объекта, то оно имеет две составляющие - имена класса (объекта) и слота - разделенные двоеточием. Например, People:NumberOfP обозначает слот NumberOfP объекта People.
Пример: Определить значение слота People:NumbetOfP;
=>People:NumberOfP;
KAL-интерпретатор имеет свое меню:File Edit. В меню Edit, кроме стандартных, имеются еще два пункта: Clear Window (Очистить окно) иCheck Syntax...(проверки синтаксиса, можно просто нажатием клавиши F2). Интерпретатор ограничивает содержимое окна 10-ю страницами текста и в случае необходимости автоматически удаляет лишнее.
1.1.3. Основные этапы разработки объектной модели
Объектная модель предметной области может быть разработана как с помощью KAL-интерпретатора, так и в окне Иерархии объектов (Object Browser). Коротко опишем основные приемы построения.
Разработка иерархии классов и объектов. Сразу после запуска системы КАРРА (до открытия конкретного файла) в окне Object Browser представлены следующие структуры, которые составляют основу для разработки всех приложений:
§ класс Root - фундамент, из которого определяются все остальные классы, его нельзя уничтожить или переименовать;
§ подкласс Image - для хранения объектов, используемых при создании пользовательского интерфейса;
§ объект Global - предопределённый объект;
§ подкласс KWindows - для описания окон сеанса, в нем уже хранится описание главного окна сеанса системы КАРРА - SESSION.
Чтобы создать в классе подкласс/объект, необходимо
1) щелкнуть мышью на имени класса в окне Object Browser;
2) не отпуская клавиши, в появившемся меню выбрать Добавление Подкласса/Объекта (Add Subclass/Instance);
3) ввести название подкласса/объекта;
4) нажать кнопкуОК.
Удаление и редактирование классов/объектов производятся аналогичным образом (команды Edit и Delete).Класс, у которого есть потомки, удалить невозможно.
Пример. Окно Object Browser
В Root создан класс Volost, класс People - его подкласс, Lgoth и Usual - объекты этого класса. Объекты показываются курсивом, связи КЛАСС-КЛАСС - непрерывной чертой, а КЛАСС-ОБЪЕКТ - штриховой линией, а иерархия объектов распространяется слева направо. Если в классе People определить слот, например, NumberOfp (количество человек), то и объекты Lgoth и Usual будут иметь аналогичный слот NumberOfp, перешедший к ним по наследству от родительского класса People.
КАРРА автоматически относит к каждому слоту ряд опций (в редакторе класса/объекта выбрав конкретный слот, войдите в менюSlots/Edit/Options), среди которых, в частности, три опции для присоединения к слоту методов (процедур):
· метод, выполняемый автоматически, когда запрашивается значение слота, а это значение отсутствует;
· метод, выполняемый перед тем, как произойдет изменение значения слота;
· метод, выполняемый сразу после изменения значения слота.
Кроме того, для слота определяются значность, тип, область допустимых значений:
· значность (cardinality) - один (single, по умолчанию), много (multiple, значения имеют, вид списка);
· тип значения: текст, число (целое или вещественное), булевский (true или false), объект (имя класса или экземпляра);
· ограничения и допустимые значения (если список значений, то эти значения писать через пробел).
В окне Иерархии объектов есть возможность просматривать только часть всей иерархии, для этого нужно в классе использовать команду Focus , в результате будут видны только этот класс и его потомки. Для какой-либо работы с существующим элементом сначала следует выбрать его имя из списка имеющихся, а затем уже активизируется соответствующий редактор.
Наследуемые от предков слоты КАРРА помечает звездочкой (*). Глобальный (для конкретной части объектов) слот будет передавать по наследству и полученное значение, что бывает лишним. Существует два способа отменить такое наследование:
• сделать слот локальным (в редакторе класса/объекта для соответствующего слота выбрать пункты меню Slots/Make local). Глобальность слота можно восстановить путем удаления соответствующего локального слота;
• редактировать значение слота на определенном уровне.
В обоих случаях измененное значение наследуется слотами, которые находятся ниже по иерархии.
Разработка методов
Методы - это процедуры, являющиеся атрибутами объекта. Процесс активизации метода в объекте назван посылкой сообщения. Когда объект получает сообщение, относящееся к одному из его методов, этот метод вступает в действие и выполняет определенную им процедуру. Методы передаются по наследству, по аналогии со слотами.
Пример.
Создадим метод, который будет сообщать нашему пользователю о том, что введено слишком большое количество жителей волости (People:NumberOfP). Для этого нужно;
1) выбрать редактор Класса, пункт меню Edit и класс People;
2) меню Methods/New;
3) назовем метод num;
4) в появившемся окне редактора метода в строке аргументов(Arguments) ввести:
x NumberOfP
5) в теле метода:
{
If( Self:x<=1000 )
Then PostMessage(«Вы ввели количество жителей волости.»)
Else PostMessage(«Введенное Вами число жителей волости слишком большое !»);
};
6) выбрать Update/Close;
7) в классе People щелкнуть два раза на слот NumberOfp;
8) войти в пункт меню Options;
9) ввести в поле After Change название нашего метода num;
10) выбрать тип значения number и ограничения 0 .. 1000;
11) нажать OK и сохраните класс People.
Для проверки этого метода следует ввести в окне Интерпретатора:
AskValue(People, NumberOfp);
и нажать Enter.
Методы выполняют несколько видов действий:
· изменяют состояние БЗ (значения слотов),
· посылают сообщения в любой объект;
· активизируют другие средства системы, например, базирующиеся на правилах рассуждения.
1.1.4. Построение функциональной модели с использованием продукционных правил