Экспертные системы (техника и технология проектирования). Методические указания к лабораторным работам
.pdf
Рассмотрим теперь, как нечеткая экспертная система определяет скорость вращения вентилятора в зависимости от температуры воздуха в комнате. Пусть эта температура равна 22°С.
Сначала экспертной системе надо определить истинность левых частей правил вывода при подстановке в них текущего значения температуры. Для этого она должна найти степень вхождения t = 22°C в каждое из указанных слева нечетких подмножеств. В левых частях правил указаны три подмножества, заданных на интервале значений температуры: высокая, низкая и средняя. Степень вхождения находим, вычисляя значение функций принадлежности каждого из подмножеств от t = 22°C:
Значения истинности левой части каждого правила используются для модификации нечеткого множества, указанного в его правой части. Модификацию будем производить описанным выше методом "произведения" (correlation product encoding). На рисунке 13 изображено, как трансформируются находящиеся в правых частях правил нечеткие подмножества
высокая, средняя и низкая.
Центр тяжести фигуры на рисунке 13 находится в точке v = 560.5691. Это и будет значением скорости вращения вентилятора, которое выдаст экспертная система при температуре воздуха в комнате равной 22°С. При других значениях температуры функция принадлежности обобщенного результата выполнения всех правил, изображенная на рисунке 13, будет меняться. Вот как она будет выглядеть, если на вход экспертной системы поступит значение t = 28°С (рисунок 14). Центр тяжести в этом случае находится в точке v = 746.6667, поэтому управляемый нашей системой вентилятор будет вращаться с такой скоростью, когда в комнате 28°С.
Рисунок 13 – Дефазификация с использованием центра тяжести
11
Рисунок 14 – Результат дефазификации
Описанные выше операции выполняются каждый раз, когда требуется результат логического вывода. В системах, управляющих динамическими процессами, эта последовательность действий выполняется циклически. В силу того что результаты правил вычисляются раздельно, нечеткие экспертные системы эффективно реализуются на базе параллельных вычислительных систем.
Возникает вопрос, оправдана ли настолько сложная система при управлении таким простым устройством, как вентилятор? Практика показывает, что оправдана. Так, например, кондиционеры, основанные на нечеткой логике, обеспечивают меньшие, по сравнению с традиционными, колебания температуры. Также они дают существенную экономию электроэнергии. Далее, используя один из пакетов нечеткой логики, мы увидим, как экспертная система, основанная на приведенных выше правилах, функционирует в динамике. Также мы сравним ее работу с обычной схемой управления на базе термостата, использующейся в большинстве устройств охлаждения.
3 Процесс выполнения работы в системе CubiCalc
Процесс выполнения проекта в CubiCalc состоит из нескольких этапов:
инициализация (Initialization);
ввод данных (Input);
предобработка (Preprocessing);
выполнение правил (Rules Execution);
постобработка (Postprocessing);
вывод данных (Output);
моделирование (Simulation).
Для описания алгоритмов, работающих на этих этапах, используется язык программирования CubiCalc's Expression Language (CEL). Его возможности и синтаксис традиционны для процедурных языков третьего поколения. К особенностям CEL следует отнести наличие средств определения степени вхождения скалярных значений в нечеткие множества, средства матричной обработки и обмена данными с другими приложениями или экземплярами
CubiCalc, используя технологию DDE (Dynamic Data Exchange).
На шаге инициализации производится присвоение начальных значений переменным, а также выполнение действий, предусмотренных пользователем, для подготовки нечеткой экспертной системы к работе. Последующие этапы повторяются циклически до тех пор, пока не будет выполняться условие завершения обработки. На шаге ввода данных CubiCalc, если требуется, получает значения из входного файла или берет значения, введенные пользователем. В системе реализован произвольный доступ к файлам, состоящим из записей. Предобработка используется для преобразования введенных данных, изменения значений переменных.
Этап выполнения правил нечеткого вывода – основа функционирования CubiCalc. Он предназначен для вычисления выхода базы правил в зависимости от текущих значений входных переменных. Последовательность действий, выполняемых на этом этапе, традиционна для подобных систем. CubiCalc позволяет выбрать методы суперпозиции и скаляризации нечетких множеств, которые будут использованы в процессе логического вывода.
12
На стадии постобработки реализуются операции преобразования результатов вывода, присвоения значений внутренним переменным, используемым для записи результатов в файл или представления их в графическом виде на этапе вывода данных. Кроме того, на этой стадии могут модифицироваться условия окончания выполнения проекта. Этап моделирования используется для получения отклика внешней системы на данные, генерируемые нечеткой экспертной системой.
4 Задачи для решения
4.1 Задача 1 – Модель управления вентилятором
Воспользуемся исходными данными рассмотренной выше задачи об управлении вентилятором. Ранее мы уже определились, как должна работать система управления скоростью вращения вентилятора, какие правила и функции принадлежности надо использовать. Теперь эти правила и функции надо ввести в CubiCalc. Разработку нашей системы разобьем на 5 этапов.
1)Определение набора используемых переменных.
2)Ввод правил нечеткого логического вывода.
3)Определение функций принадлежности для нечетких множеств, заданных на интервале изменения температуры и скорости вращения.
4)Указание операций, которые потребуются для обеспечения функционирования системы в динамике.
5)Определение переменных, значения которых будут отображаться на графике в процессе работы.
Запустим CubiCalc.
В меню “Project” (проект) выберите команду “Variables...” (переменные). Нажмите кнопку "New" (новая переменная) на появившейся диалоговой панели. Система попросит нас ввести имя и атрибуты новой переменной (Рисунок 15).
Рисунок 15 – Окно ввода переменных
В строке "Room" введем название переменной –RoomTemperature (температура в комнате). Выберем ее тип – "Fuzzy Input", а также зададим диапазон изменения ее значений. В поле "RangeLow" (нижняя граница диапазона изменения) введем "0", а в поле "Range High" (верхняя граница диапазона изменения) - "60" (в рассмотренном выше примере температура изменялась от 0°С до60°С). Остальные поля оставьте без изменений. Нажмите кнопку "ОК". RoomTemperature появилась в списке переменных (рисунок 16).
13
Рисунок 16 – Окно списка переменных
Определим переменную для скорости вращения вентилятора. Нажмите кнопку "New". Введите название переменной –FanSpeed (скорость вентилятора). Укажите ее тип ("Fuzzy Output") и диапазон изменения значений (от 0 до 1000). Нажмите “OK”. В панели со списком переменных щелкните на кнопке "Done" (готово).
Теперь нам необходимо задать правила вывода, которыми будет руководствоваться наша экспертная система. Перед этим необходимо определиться, какие нечеткие множества мы будем использовать и как их именовать в CubiCalc – правила в системе записываются на английском языке. В примере, рассмотренном ранее, было определено по 3 множества для каждой переменной; "высокая", "средняя" и "низкая". Нет причин это менять, договоримся лишь использовать английские названия вместо русских: High (высокая), Normal (средняя) и Low (низкая). Как уже отмечалось, простейшее правило в CubiCalc имеет вид:
if <переменная> is <нечеткое множество> then <переменная> is <нечеткое множество>;
Для того чтобы запустить редактор правил системы, в меню "Project" (проект) выполните команду "Rules" (правила). Возможности этого редактора аналогичны программе "Блокнот" (Notepad) из поставки Windows. Введите правила, представленные на рисунке 17.
Рисунок 17 – Редактор правил системы
Строки, начинающиеся с "#", рассматриваются системой как комментарий. Любая непустая строка интерпретируется как правило вывода. Обратите внимание, что правило заканчивается точкой с запятой.
Наверное, настало время сохранить разрабатываемый проект. Как в большинстве программ, результаты работы можно сохранять в любое время, и не надо пренебрегать такой возможностью. В меню "File" (операции с файлами) выберите пункт "Save As..." (сохранить
14
как). Задайте имя файла проекта и каталог, в котором его надо сохранить. Неплохим именем будет- "fan" (вентилятор).
Следующий этап создания нечеткой экспертной системы - определение функций принадлежности для нечетких множеств. В меню "Project" (проект) выполните команду "Adjectives for..." (функции принадлежности для). Появится диалоговая панель со списком переменных типа "Fuzzy Input" и "Fuzzy Output" (см. рисунок 18). Выберите перемен-
ную RoomTemperature и щелкните на кнопке "Edit" (редактировать).
Рисунок 18 – Диалоговая панель со списком переменных
Система выведет окно редактора функций принадлежности для перемен-
ной RoomTemperature (рисунок 19).
Рисунок 19 – Окно редактора функций принадлежности
Редактор позволяет задавать кусочно-линейные функции принадлежности, определенные на множестве значений переменных типа "Fuzzy Input" и "Fuzzy Output". Функция задается опорными точками, которые соединяются отрезками. Позиции точек задаются пользователем. Точку можно перетащить в другое место мышью, либо ввести ее координаты с клавиатуры. При необходимости опорные точки можно добавлять или удалять.
Вверхней части окна редактора функций принадлежности расположена строка состояния,
вкоторой отображаются:
позиция выделенной точки по горизонтали и вертикали (X и Y);
название нечеткого множества, которому соответствует выделенная функция принадлежности;
центр тяжести выделенной функции принадлежности (CG).
В правой части окна расположена инструментальная панель с кнопками, используемыми для выполнения основных операций редактора. Ниже приведена таблица (рисунок 20), в которой приведено назначение каждой из кнопок, кроме того, указаны соответствующие им сочетания клавиш и команд меню.
15
Рисунок 20 – Назначение пунктов меню
16
Продолжение рисунка 20 По умолчанию для каждой переменной создается описание нечеткого множества
"DEFAULT". Функция принадлежности для него напоминает треугольник (рисунок 19). Нам она не потребуется, однако сразу удалить его нельзя – для переменной должна быть задана хотя бы одна функция принадлежности.
Для создания экспертной системы нам требуется определить три функции на интервале изменения RoomTemperature: High, Normal и Low. Начнем с функции High. В меню
"Adjective" (редактор функций принадлежности) выберите команду "Change List..." (изменить набор). Нажмите кнопку "New..." на появившейся панели. Система выведет окно диалога, в котором надо будет задать параметры новой функции (рисунок 21).
17
Рисунок 21 – Окно задания параметров новой функции
В поле "Name" введите имя функции – "High". Все остальные поля можно оставить без изменений, следует лишь обратить внимание на переключатели "Shape". Выбор одного из них позволяет задать вид функции: Triangle (треугольник) и Trapezoid (трапеция). Triangle отличается от Trapezoid числом опорных точек: у Triangle их пять, а у Trapezoid - шесть. Для случая функции "High"больше подходит Triangle. Нажмите "ОК". В панели со списком функций принадлежности щелкните мышкой на кнопке "Done" (готово). График полученной функции представлен на рисунке 22.
Рисунок 22 – График полученной функции принадлежности
В том виде, в котором он изображен на рисунке 22, график сильно отличается от эталона (рисунок 19). Наша задача – подправить его. Проще всего это сделать, вручную задав координаты опорных точек. Чтобы изменить позицию точки, выделите ее, например, щелкнув на ней мышью, нажмите клавишу F7 и введите новые значения X и Y в появившемся окне. Для изменения графика можно рекомендовать следующую последовательность действий.
1)Щелкните мышью на крайней правой опорной точке, нажмите F7 и задайте новые ко-
ординаты: X = 60, Y = I.
2)Удалите вторую справа опорную точку. Для этого надо выделить ее, нажать клави-
шу Del.
3)Выделите вторую точку слева и измените ее координаты. Новое значение X должно
быть равно 20.
Теперь функция High соответствует графику на рисунке 9. Для переменной RoomTemperature надо определить еще 2 функции принадлежности: Normal и Low. При их задании надо ориентироваться на графики на рисунке 8 (для Normal) и рисунке 7 (для Low). Порядок действий при их определении мало отличается от описанного выше. Следует лишь учесть, что все функции для одной переменной отображаются на одном графике. Функция, вы-
18
бранная в данный момент, отображается сплошной линией. Остальные показаны пунктиром (рисунок 23).
Рисунок 23 – Графики функций принадлежности для переменной RoomTemperature
Далее требуется задать нечеткие подмножества для переменной FanSpeed. Как и в случае переменной RoomTemperature, мы будем использовать 3 множества: High (высокая), Normal (средняя) и Low (низкая). В меню "Project" (проект) выполните команду "Adjectives for..." (функции принадлежности для). Выберите переменную FanSpeed и щелкните на кнопке "Edit" (редактировать). При задании функций надо руководствоваться их графиками, представленными на рисунке 12 (High), рисунке 11 (Normal) и рисунке 10 (Low). Конечный результат должен соответствовать рисунку 24.
Рисунок 24 – Графики функций принадлежности для переменной FanSpeed
Наша система готова к работе, однако у нас нет ни комнаты с воздухом, ни вентилятора. Все это можно имитировать средствами CubiCalc.
Во-первых, надо задать начальные условия – температуру в комнате до начала работы системы. Удобнее всего это делать на шаге инициализации (см. рис.). Для того чтобы задать операции, которые выполняются на этом шаге, в меню "Project" (проект) выберите команду "Initialization" (инициализация). Появится окно редактора, в котором надо будет записать выражения на языкепрограммирования CEL (CubiCalc Expression Language). Внесем некоторый элемент случайности. Пусть начальная температура будут определяться выражением, приведенным на рисунке 25.
19
Рисунок 24 – Выражение для задания начальной температуры
В этом выражении использована встроенная функция CEL –gaussian(), генерирующая случайные значения, подчиняющиеся нормальному распределению с нулевым средним и единичной дисперсией.
Во-вторых, надо задать отклик температуры в комнате на изменение скорости вращения вентилятора. Можно воспользоваться, например, правилом, представленным на рисунке. Оно предполагает возможность установления равновесия между температурой и скоростью вращения вентилятора и вместе с тем учитывает действие случайных факторов. Отклик удобнее всего вычислять на этапе моделирования (рисунок 26).
Рисунок 26 – Моделировании температуры
Чтобы ввести это выражение, надо выполнить команду "Simulation" (моделирование) в меню "Project" (проект), а затем записать его окне редактора.
Можно запустить нашу экспертную систему уже сейчас, однако мы не увидим результатов ее работы. Чтобы проследить, как она функционирует в динамике, надо отобразить на графике изменение нужных нам переменных во времени.
Интересно было бы понаблюдать, как меняется температура в комнате при работе системы. В меню "Project" (проект) выберите команду "Plots..." (графики). Появится окно со списком графиков, которые строит система в процессе функционирования. Нажмите кнопку
"New" (новый график). Выберите его тип – "Strip Chart – Plot Variables Against Time" (график зависимости переменных от времени). CubiCalc выведет окно, в котором нужно будет задать параметры графика (см. рис.). Введите в поле "Title" название графика – Temperature. Определить интервал отображения значений температуры от 5°С (поле "Y Scale Low") до 60°С (поле "Y Scale High"). Выберите название переменной Room Temperature в первой пустой строчке (рисунок 27). Задайте цвет и вид точки, которыми будет отображаться график. Нажмите "ОК". В панели со списком графиков щелкните мышкой на кнопке "Done" (готово).
20
