next up previous
Next: Работа с модулем Up: Графическая среда для разработки Previous: Редактор проекта


Типы

Когда мы в дальнейшем будем создавать нечеткий модуль, мы будем задавать входы, на которые поступает информация, и выходы, на которые модуль подает результат вычислений. На каждый конкретный модуль поступает информация конкретного вида, причем в общем случае это нечеткая информация. Ровно как и на каждый выход модуль подает информацию конкретного типа. На каждый вход могут поступать как четкие данные (числа) так и нечеткие (размытые значения, лингвистические термы), однако база правил может оперировать только вполне определенными лингвистическими термами, определенными для данного входа. Для этого, мы информацию, поступившую на вход должны разложить по этим термам, то есть произвести операцию фаззификации. Для этого нам необходимо описать для данного входа лингвистические термы, которыми может оперировать база правил.

Однако достаточно часто бывает, что информация одинакового типа поступает на несколько различных входов, и по-этому было бы неудобно для каждого входа задавать одни и теже лингвистические термы. Для того и было введено понятие Типа. Тип описывает информацию, которая может поступать на входы или быть выдана на выходы в виде набора лингвистических термов, с которыми может оперировать база правил. А затем, при описании входа (например), необходимо просто указать, что на вход поступает информация такого-то, ранее определенного типа. Например вы можете создать тип ``Скорость'', для которого определите лингвистические термы ``медленно'', ``нормально'', и ``быстро'', а потом просто указывать, что на данный вход поступает информация о скорости, то есть данные с типом ``Скорость''.

Итак, первое, что вам придется сделать - это описать типы информации, с которой будет работать ваша нечеткая система. Для того, что бы создать новый тип, вам необходимо кликнуть правой кнопкой мыши на объекте ``Types'' в дереве проекта и выбрать пункт меню ``Создать новый''. При этом вы попадете в диалог создания нового типа(см. рис. 8).

Figure: Диалог создания нового типа
  • \includegraphics*[scale=1.0]{newtypel.ps}

В данном окне вы должны указать имя нового типа и область определения, то есть минимальное и максимальное значение, которое может поступать на вход. Нажав на кнопку ``Да'' вы создадите новый тип, который не содержит пока не одного лигвистического терма. Однако, вы можете при создании типа воспользоваться заранее определенной раскладкой (layout).

Раскладка, или схема - это объект, позволяющий автоматически генерировать новые типы. Все дело в том, что типы обычно генерируются по каким-то стандартным правилам. Например, если вы будете генерировать тип ``Cкорость'', то скорей всего там будут термы ``Быстро'' и ``Медленно''. Возможно там ,там будут еще и термы ``Очень быстро'' и ``Очень медленно'', но это уже зависит от того, сколькими термами вы представляете тип ``Скорость'' в данном конкретном случае. Так же вид функций принадлежности будет похож и отличаться они будут только значениями точек, которые в свою очередь будут зависить от количества термов, которыми представляется тип и от граничных значений данной конкретной скорости. Таким образом, зная количетсво термов, которыми будет представлен тип и его граничные значения, по поределенным правилам можно сгенерировать новый тип. Раскладка и выступает в виде такого набора правил. Она описывает, какие имена термов надо использовать при генерации определенного числа термов а так же правила создания стандартных треугольных функций принадлежности.

FuzzyIDEавтоматически создает четыре стандартные раскладки:

slow-fast
- медленно-быстро, для генерации типов, описывающих скорость;
small-big
- мало-много, для генерации типов, описывающих количество;
near-far
- близко-далеко, для генерации типов, описывающих расстояния;
light-heavy
- легко-тяжело, для генерации типов, описывающих вес.

Итак, при создании нового типа, вы можете создать пустой тип, то есть тип без лингвистических термов, либо сгенерировать тип с использованием одной из имеющихся раскладок. Для этого, в нижней части диалога необходимо выбрать раскладку, с помощью которой вы будете генерировать тип, и количество лингвистических термов, с помощью которых вы хотите представлять данный тип информации. После этого, для генерации нового типа необходимо нажать кнопку ``Генерировать''.

В любом случае, если вы просто создаете новый тип или генерируете его при помощи раскладки, после создания нового типа вы попадаете в диалог редактирования типов. Данный диалог имеет стуктуру, похожую на рассмотренный ранее редактор типов: тот же набор кнопок справа, те же закладки. В FuzzyIDE большинство диалогов имеют стандартный вид, что позволяет пользователю быстрее привыкнуть к интерфейсу среды.

Figure: Редактирование общих настроек типа
  • \includegraphics*[scale=1.0]{typecommonl.ps}

Редактор типов имеет три закладки, первая из которых, ``Общее''(см. рис. 9) служит для редактирования общей информации. Здесь вы можете изменить имя типа, минимальное и максимальное значение. В левой части выводится информация о том, с помощью какой раскладки был сгенерирован данный тип. Вы можете выбрать другую раскладку, или другое количетсво термов, и сгенерировать тип заново, при этом вы должны учитывать, что все существующие лингвистические термы будут удалены.

Закладка ``Комментарий'' уже знакома вам по редактору установок проекта, поэтому здесь на ней останавливаться мы не будем.

Figure: Редактирование лигвистических термов
  • \includegraphics*[scale=1.0]{typetermsl.ps}

На закладке ``Термы''(см. рис. 10) представлена информация о лингвистических термах, заданных для данного типа. В правой части вы можете видеть список существующих термов, а в левой редактор функций принадлежности.

Для того, что бы выбрать терм для редактирования, вы можете выбрать его в списке, или кликнуть левой кнопкой мыши на соответствующую ему функцию. При этом имя выбранного терма и соответствующей ему функции подкрашивается красным цветом.

В FuzzyIDE поддерживается три типа функций принадлежности:

  1. Стандартный (standard) тип функций принадлежности представляет из себя набор стандартных функций, использующихся в нечеткой логике. Это Z-функция, S-функция, $\pi$-функция (или трапеция) и $\lambda$-функция (треугольник);
  2. Функция-значение (value) или синглетон. Используется для задания четких значений;
  3. Произвольная функция (custom) - функция заданая несколькими точками, количество которых задается в редакторе установок типов.

При выборе терма, тип функции, соответствующей ему снизу под редактором функций принадлежности (слева). При этом,если выбранная функция - стандартная, то слева показывается тип стандартной функции. Вы можете поменять как тип стандартной функции, так и тип функции. При этом знаяение функции будет изменено. Для того, что бы отредактировать расположение точек функции вы должны нажать на редактиремой точке правой кнопкой мыши и удерживая кнопку в нажатом положении ``перетащить'' точку на новую позицию. При этом сверху, над редактором функций принадлежности будет высвечиваться информация о текущем значении точки. Изменить координаты выбранной точки ( выбор точки происходит нажатием на ней левой кнопки мыши, при этом она подсвечивается синим цветом) можно изменить и при помощи полей координат точки, расположенных наверху. Измените значение X или Y и нажмите клавишу ``Enter'', не выходя из поля редактирования. Если введенные вами координаты были корректными, положение точки изменится. Вы должны помнить, что Y-координаты для точек стандартных функций принадлежности заданы жестко и не могут меняться. Так же, точки не могут выходить за границы граничных значений и за соседние точки.

Для редактирования функций-значений вы должны нажать левой кнопкой мыши на линии данной функции и не отпуская кнопку, ``перетащить'' функцию в новой значение.

Кроме самих функций, на графике изображаются центральные значения термов. Они отображаются как вертикальные пунктирные полосы. Центральные значения используются в некоторых операциях (например при дефаззификации с использованием метода медиан), а так же при изменении типа функций новый вид функции создается исходя из центральных значений. При перемещении точек и изменении вида функции центральное значение автоматически пересчитывается как центр тяжести, однако если вам вдруг не понравится то значение, которое FuzzyIDE проставит автоматически вы можете изменить его. Для этого необходимо нажать на центральном значении левой кнопкой мыши и не отпуская ее перетащить его в новое место.

Если вдруг вам захочется посмотреть некоторый участок функций более подробно, вы можете изменить диапазон, отображаемый в редакторе функций принадлежности. По умолчанию, функции принадлежности отображаются от минимального значения типа до максимального, однако кликнув мышкой на минимальном или максимальном значении (цифры внизу графика, под осью X), вы можете изменить их значение.

Нажав на кнопку ``Удалить'' расположенную под списком термов вы можете удалить выбранный терм, а нажав на кнопку ``Добавить'' - добавить новый терм. При этом вам необходимо будет ввести имя терма и его центральное значение. После это будет сгенерирован терм с функцией-значением, однако вы легко можете изменить тип его функции.

Как уже говорилось выше, вы можете сгенерировать терм используя заранее заданную раскладку. Однако в FuzzyIDE встроена процедура генерации промежуточных термов по двум базовым, разработанная Балашовым Е.П., Куприяновым М.С. и Логинской Л.Г. Данная процедура позволяет сгенерировать произвольное количество промежуточных термов, используя два заранее созданных терма. Для этого вы должны нажать кнопку ``Генерировать новые'', и затем в появившемся диалоге выбрать два базовых терма, по которым будут строится промежуточные и количество промежуточных термов, которые надо сгенерировать. Все сгенерированные термы будут иметь имена ``Терм 1'', ``Терм 2'', и т.д., однако, выбрав данный терм и нажав кнопку ``Переименовать'' вы можете задать новое имя терма.

Как видите, FuzzyIDE обладает очень мощным редактором, позволяющим не только удобно и быстро создавать лингвистические термы но и генерировать их автоматически, используя раскладки и процедуру генерации промежуточных термов. Теперь, когда вы описали типы данных, с которыми будет работать нечеткий модуль, можно приступить к созданию самого нечеткого модуля.



Alexey Kakunin 2000-11-23