- •Санкт-Петербургский национальный исследовательский университет
- •Редакторы знаний и функции системы kappa
- •Основные этапы разработки объектной модели
- •Пример. Окно Object Browser
- •Построение функциональной модели с использованием продукционных правил Цикл формирования цепи рассуждений в прямом направлении
- •If посылка then заключение.
- •Формирование цепи рассуждений в обратном направлении
- •Средства отладки базы знаний
- •Окно связи правил (Rule Relations)
- •Окно трассировки правил (Rule Trace)
- •Активная трассировка при прямом формировании цепочки рассуждений
- •Окно просмотра иерархии выводов (Inference Browser)
- •Средства создания интерфейса с пользователем. Окно сеанса (Session Window)
- •Средства объяснений оболочки kappa
- •Практическое задание
- •Разработка и программирование объектной модели предметной области
- •Разработка и программирование функциональной модели предметной области
- •Компьютерный практикум по нечетким системам
- •Аппроксимация функции одной переменной с использованием нечеткой системы
- •Варианты заданий
- •Построение элементарной нечеткой экспертной системы
- •Программирование нечеткой системы в среде matlab с использованием встроенных функций
- •Кластеризация с помощью алгоритма нечетких центров
- •Компьютерный практикум по нейронным сетям
- •Аппроксимация функции на основе нейронных сетей
- •Варианты заданий
- •Использование инструмента nnTool для построения нейронной сети
- •Кластеризация с помощью нейронных сетей
- •Рекуррентные нейронные сети Хопфилда и Хэмминга
- •Нейронные сети радиально-базисных функций. Вероятностные сети
- •Построение нейронечеткой модели с помощью anfis-редактора
- •Приложение 1. Функции пакета «Fuzzy Logic Toolbox» системы matlab для работы с системами нечеткой логики
- •Приложение 2. Функции пакета «Neural Network Toolbox» системы matlab для работы с нейронными сетями
Разработка и программирование объектной модели предметной области
Содержанием этого этапа практического задания является решение студентом нескольких задач, связанных с разработкой и программированием объектной модели. Каждой из этих задач ниже посвящается отдельный подраздел. В начале каждого подраздела формулируется частная задача, а далее следуют краткие методические указания по ее решению. В результате должны быть разработаны все компоненты объектной модели: классы, объекты, методы. При этом студент должен продемонстрировать знание двух подходов – в окнеObjectBrowserи в окнеKALInterpreter- и воспользоваться ими для создания иерархии классов и объектов.
Разработка иерархии классов и объектов в окне Object Browser
Необходимо создать иерархию классов и объектов, изображенную на рис. 1.10. Вданном случае классSystem1 представляет реализацию проектируемой системы на базе первой аппаратной платформы. При этом система состоит из двух приборовDevice1 иDevice2. Следует представить иерархию в окне в сжатом виде (скрыть подклассHardware), а затем вернуться к развернутому представлению.
Методические указания: Чтобы создать в классе подкласс/объект, необходимо
щелкнуть мышью на имени класса в окне Object Browser;
не отпуская клавиши, в появившемся меню выбрать Добавление Подкласса/Объекта (Add Subclass/Instance);
ввести название подкласса/объекта;
нажать кнопку ОК.
Удаление и редактирование классов/объектов производятся аналогичным образом (команды Edit и Delete).
Информация в окне ObjectBrowserможет быть представлена в сжатом или развернутом виде путем удаления из окна объектов или подклассов некоторых указанных пользователем классов (командыHide/ShowSubclasses/Instances). При этом в окне имя класса, чьи объекты или подклассы скрыты, обводится рамкой.
Создать в соответствии с таблицей для классов и объектов слоты. Слоты ProizvиStoimотражают производительность и стоимость конкретного прибора в объектеDevice, и средние значения по системе в объекте Global. Сделать слоты Name и Number в классеHardwareи объектеDeviceлокальными и присвоить им значения. Слот Number в объектеDevice, доставшийся по наследству, использовать для хранения номера группы.
Таблица слотов
Класс/объект |
Hardware |
System
|
Device |
Global |
Слот |
Name |
Name |
Name |
Name |
Number |
Number |
Number |
Proizv | |
|
|
Proizv |
Stoim | |
|
|
Stoim |
|
Методические указания. Чтобы создать в классе (объекте) слот, необходимо:
щелкнуть мышью на имени класса в окне Object Browser;
перейти в редактор класса, для чего, не отпуская клавиши, в появившемся меню выбрать Редактирование (Edit);
выбрать меню Slot/New;
ввести имя слота.
Для присвоения требуемого значения слоту надо продолжить предыдущую процедуру:
перейти в редактор слотов, для чего выбрать меню Slot/Edit;
ввести в поле Value требуемое значение.
Для преобразования слота класса (объекта) в локальный следует выделить этот слот в редакторе класса (объекта) и обратиться к меню Slot/MakeLocal.
Разработка иерархии классов и объектов в окне KAL Interpreter.
Необходимо дополнить средствами KALInterpreterранее созданную иерархию классов и объектов до следующего вида (рис. 1.11).
При построении использовать функции (команды) MakeClass,MakeInstance,MakeSlot.
Методические указания. Все функции в ЭОKAPPAразделены на группы:
функции манипулирования элементами знаний (Knowledge),
математические функции (Math),
функции для работы со строками (String),
функции для работы со списками (List),
логические функции (Logical),
функции манипулирования файлами (File),
функции управления или взаимодействия с ОС (Control),
функции для работы с окнами КАРРА и с объектами интерфейса (Windows),
определенные пользователем функции (UserFunctions),
все функции (All Functions).
Получить доступ к имеющимся функциям можно в любом окне ЭОKAPPA,где доступно использование выражений в KAL-коде. Для этого нажатием правой кнопки мыши в этом окне активизируется всплывающее меню, с помощью которого можно оперативно выбрать из имеющихся необходимую группу функций. С выбором группы функций на экране появляется окно Выбора команды (SelectCommand), где представлены функции выбранной группы. После щелчка левой кнопкой мыши на любой из них внизу окна появляется формат и список аргументов функции. Так, например, для функции Создать класс (MakeClass) формат имеет вид:MakeClass(@className, @<superName>). Из приведенной записи следует, что аргументами функции является имя создаваемого класса, а также имя класса (суперкласса), в который создаваемый класс должен входить. Последний аргумент является необязательным, о чем свидетельствуют угловые скобки. Символ @ является элементом описания формата и в описании функции отсутствует, например,MakeClass(System1,Hardware).Запись любой функции заканчивается «; ».
Создание методов для классов и объектов модели
Необходимо создать с использованием функции PostMessage (вывод сообщения на экран) для классов и объектов методы в соответствии с таблицей, где Contr – контроль правильности ввода значения слота Number, SrProizv – вычисление средней производительности по системе, SrStoim – вычисление средней стоимости по системе.
Таблица методов
Класс/объект |
Hardware |
System
|
Global |
Метод |
Contr (контроль правильности ввода) |
Contr (контроль правильности ввода) |
SrProizv (средняя производительность) |
|
|
SrStoim (средняя стоимость) |
Методические указания. Методы - это процедуры, являющиеся атрибутами объекта. Процесс активизации метода в объекте назван посылкой сообщения. Когда объект получает сообщение, относящееся к одному из его методов, этот метод вступает в действие и выполняет определенную им процедуру. Методы передаются по наследству, по аналогии со слотами.
Метод Contr «Контроль правильности ввода». Для создания метода Contr, например, в классе Hardware можно воспользоваться следующей процедурой.
1) выбрать редактор Класса (окно KTools), пункт меню Edit и класс Hardware;
2) обратиться к меню Methods/New;
3) присвоить методу имя Contr;
4) в появившемся окне редактора метода в строке аргументов (Arguments) ввести:
x Number
В результате в тексте метода длинная переменная Number может быть заменена на короткую x.
5) в теле метода, которое заключается в фигурные скобки, размещается условный оператор (группа функций управления Control):
{
If( Self:x<=10)
Then PostMessage(«Вы ввели число систем»)
Else PostMessage(«Введенное Вами число систем слишком велико !»);
};
Напомним, что все переменные, используемые в текстах методов, функций и правил отражают слоты некоторых классов или объектов. В результате их обозначение содержит как имя класса (объекта), так и имя слота, разделенные двоеточием, например, Hardware:Number. В приведенном тексте программы вместо имени класса Hardware использовано служебное слово Self, что позволяет использовать этот текст метода в любом другом классе. Заметим, что функция PostMessage предназначена для вывода на экран дисплея выражений, которые записываются в скобках как ее аргументы через запятую, при этом символьные выражения должны быть заключены в кавычки. Так, например, информация о средней стоимости прибора, представленная переменной Global:Stoim, может быть выведена следующим образом:
PostMessage(“Средняя стоимость прибора по системе =”, Global:Stoim).
КАРРА автоматически относит к каждому слоту ряд опций (в редакторе класса/объекта, выбрав конкретный слот, войдите в меню Slots/Edit/Options), среди которых, в частности, три опции для присоединения к слоту методов (процедур):
метод, выполняемый автоматически, когда запрашивается значение слота, а это значение отсутствует;
метод, выполняемый перед тем, как произойдет изменение значения слота;
метод, выполняемый сразу после изменения значения слота.
Для рассматриваемого примера имеем:
выбрать Update/Close;
в редакторе класса Hardware щелкнуть два раза на слот Number;
войти в пункт меню Options;
ввести в поле After Change название нашего метода Contr;
выбрать тип значения number и ограничения 0 .. 10;
нажать OK и сохранить класс Hardware.
Метод SrProizv «Средняя производительность по системе».При создании методов, вычисляющих, например, среднюю производительность по системе, оказываются полезными функция подсчета числа объектов некоторого классаCountInstance, а также функция управленияForAll, просматривающая объекты некоторого класса и вычисляющая общее для них и единственное выражение, стоящее сразу после квадратных скобок и заканчивающееся точкой с запятой. Если этих выражений несколько, они должны быть заключены в фигурные скобки. ФункцияForAllявляется по существу оператором цикла с параметром, который последовательно пробегает имена всех объектов из просматриваемого класса и указывается в квадратных скобках после служебного словаForAll. В квадратных скобках, кроме параметра цикла указывается имя просматриваемого класса, отделенное от переменной-параметра вертикальной чертой. Так фрагмент, вычисляющий средний балл для студентов из второй группы будет иметь вид:
{
Global:Proizv1 = 0;
ForAll [ obj|System1 ]
Global:Proizv1 = Global:Proizv1 +
obj:Proizv;
System1:Number = CountInstances( System1 );
Global:Proizv1 = Global:Proizv1 / System1:Number;
PostMessage( "Средняя производительность по системе 1=",Global:Proizv1 );
};
В этом фрагменте параметр цикла обозначен буквами obj.