Продолжаем изучать нечеткую логику вместе с книгой Гостева В.И. «Нечеткие регуляторы в системах автоматического управления».  Следующая задача, разобранная автором, – это синтез цифровых нечетких регуляторов с переключением на два режима работы в системе управления температурой газа двухроторного газотурбинного двигателя (ГТД).

Пытаясь разобраться с этой задачей, я решил посмотреть, как функции принадлежности и их параметры влияют на работу регуляторов. И не смог пройти мимо такого красивого объекта из мира нечетких регуляторов, как поверхность отклика, – 3D-график зависимости выхода нечеткого регулятора от двух входов в регулятор.  Как оказалось, это затягивающее занятие (построение поверхности отклика) доставляет не просто эстетическое удовольствие, а еще раз доказывает на практике известное философское утверждение «красота спасет мир». Поэтому разбор очередной задачи из книги Гостева В.И. у меня распался на две части: Нечеткие регуляторы в предыдущих примерах книги использовали фазифификацию входных переменных с помощью треугольных функций принадлежности. Треугольная функция хороша тем, что мы задаем явно точки излома в виде параметров блока фазификации, и таким образом контролируем покрытие диапазона входной переменной (см. рис. 1). К тому же, как работает линейное изменение в треугольной функции, казалось бы, достаточно легко представить (на самом деле нет!). 
Рисунок 1. Внешний вид треугольных функций принадлежности. В очередном примере книги используется фазификация функциями Гаусса. Для этих функций задаются два параметра положение точек вершин, (как для треугольных), и среднеквадратичное отклонение, определяющее размах кривой. Попытаемся разобраться, как задавать функции принадлежности в виде кривых Гаусса. При фазификации входной переменной функциями Гаусса возникает проблема подбора среднеквадратичного отклонения и распределения вершин фикции, для того чтобы, с одной стороны, равномерно распределить функции по диапазону, а с другой, обеспечить перекрытие всего диапазона входных переменных.  Поиграться с настройками можно в отдельном проекте. Для этого достаточно поставить блок фазификации, направить на вход линейный источник и с помощью фазового портрета построить функции принадлежности для каждого терма входной переменной. Например, для функций Гаусса, равномерно распределенных между 0 и 1, можно задать входное линейное воздействие от – 1 до 2, время расчёта 3 секунды. И мгновенно получить график распределения функций принадлежности в зависимости от входной переменной. См. рис 2. 
Рисунок 2. Настройка фазификации функциями Гаусса Обратите внимание, на схеме у нас кривая Гаусса только одна – центральная. Для граничных термов мы используем в качестве функции принадлежности S-кривую, состоящую из «половины» кривой Гаусса. Почему это часто более правильно объяснялось здесь: habr.com/ru/post/413539 При тонкой и ручной настройке пользователь сам задает параметры вершин, поскольку знает что делает. В процессе синтеза, когда мы только выбираем параметры, первым приближением можно принять равномерное распределения функций принадлежности по диапазону. И в этом случае, вместо ручного заполнения свойств блока, можно задать глобальные переменные (максимум и минимум) и произвести вычисление расположения вершин функций, зная их количество. Другими словами, достаточно знать границы диапазона и количество функций, чтобы определить расположение вершин. Значение среднеквадратичного отклонения также можно привязать к дистанции между вершинами.  Например, для равномерного распределения функций Гаусса между 0 и 1 можно записать такой скрипт, как на рисунке 3, где приведен вариант, когда показатель среднеквадратичного отклонения с равен расстоянию между вершинами dU. В результате работы данного скрипта на стадии инициализации расчета будут заполонены два массива an и сn, которые можно записать в свойствах блока фазификаци.  Чем больше среднеквадратичное отклонение, тем меньше различия между термами, и, наоборот. При малых значениях функции отличия более изолированные см. рис 4. 
Посмотрим, как это может повлиять на законы управления нечеткого регулятора.  Возьмем простой регулятор и создадим простую модель, в которой два входных воздействия меняются в диапазоне 0 – 1, и регулятор выдает воздействие так же в диапазоне 0 – 1.
Для обоих входных воздействий выполним одинаковую фазификацию на три терма: «больше», «норма», «меньше».  Функции принадлежности для входных переменных зададим в виде равномерно расположенных по диапазону 0 — 1 функций Гаусса с шагом вершин dU = 0.5 Сформируем 3 правила нечеткого вывода следующим образом: Схема тестовой модели приведена на рисунке 5. Входным сигналом в системе будет время, а с помощью небольшого скрипта последовательно передаем сигналы на два выхода, таким образом чтобы пройти все варианты воздействий 0-1 для каждого входа и сформировать трехмерный график отклика.  
Рисунок 5. Схема тестовой проверки нечеткого регулятора. Параметры фазификации на три терма одинаковы для каждого входа и задаются в скрипте главной схемы (см. рис. 3). Посмотрим, какой будет вид поверхности характеристик регулятора, когда среднеквадратичное отклонение равно: В этом случае функции Гаусса размазаны по всему диапазону входных переменных, а поверхность отклика регулятора представляет собой слегка изогнутую плоскость. (см. рис. 6).
 
Рисунок 7. Схема в начальный момент времени расчёта, для с = dU  Для этого варианта функции принадлежности в крайних положениях работают уже не все функции Гаусса, и поверхность отклика регулятора изгибается. Выходные параметры регулятора также не покрывают весь диапазон, но уже гораздо ближе к полному покрытию. Выход регулятора меняется 0.02 до 0.98.
 В этом случае функции принадлежности получаются изолированными, и наш регулятор нечеткого вывода работает практически как трехпозиционное реле. При этом, его выход в большей части рабочего диапазона входных переменных равен 0.5, и только в моменты, когда оба входа близки к 0 или 1, регулятор выдает соответственно 0 и 1. Это приводит к тому, что регулятор большую часть времени не работает, а находится в среднем положении.  Получив такой результат, мне захотелось проанализировать, а как работают треугольные функции, которые ранее использовались при решении предыдущих задач из книги Гостева. Благо тестовый проект уже готов, остается только заменить одни функции на другие. При фазификации треугольными функциями с общим основанием результат, в общем, предсказуемый: поверхность изгибается между крайними положениями 0 и 1. См. рис. 10. А вот для функций принадлежности, основание которых равномерно распределено по диапазону регулирования, результат, мягко говоря, удивил. Получается интересная фигура, представленная на рис. 11. В случае, когда основания треугольных функций распределены по диапазону, поверхность регулятора содержит два плато, на которых регулирование вообще не происходит. Регулятор стоит в среднем положении. Мне, кстати, это было совсем не очевидно, исходя только из вида треугольных функций.  Приведенные правила нечеткого вывода достаточно прямолинейны. Мы просто складываем (объединяем) все термы логическим и. А как выглядит поверхность, если перейти от абстрактных переменных к чуть менее абстрактным?  Рассмотрим в качестве переменных входа отклонение от заданной нормы и скорость изменения этого отклонения. Среднеквадратичное отклонение возьмем равным половине расстояния между вершинами. Для наглядности изменим диапазон регулирования и вместо (0...1) зададим (– 1..1)  Регулирующее воздействие будем подавать в случае, когда есть отклонение или когда есть скорость изменения, которая показывает, что отклонение будет в дальнейшем.  Законы регулирования будут такими: Схема такой логики представлена на рисунке 12. А поверхность регулирования – на рисунке 13. 
Рисунок 12. Нечеткий регулятор по скорости и положению. Вариант 1.

Рисунок 13. Поверхность отклика регулятора по скорости и положению Анализируя поверхность, можно заметить, что когда скорость изменения около нуля, то зависимость воздействия от отклонения практически линейна, а когда скорость нарастания отклонения и само отклонения совпадают, то воздействие усиливается (излом на поверхности), и поверхность далее более крутая. Созданные правила у нас не учитывают случай, когда скорость изменения компенсирует само отклонение. Добавим в правила учета ситуации, когда скорость изменения противоположна отклонению.  Тогда законы регулирование будут такими: Соответствующая им расчетная схема представлена на рисунке 14, поверхность регулирования – на рисунке 15. 
Рисунок 14. Фазификациия треугольными функциями c общим базисом и соответствующая поверхность отклика регулятора.  По поверхности отклика видно, что после изменения правил у нас произошло уменьшение воздействия в тех углах поля воздействия, когда направление скорости противоположно отклонению. Cм. Рис 15. 
Рисунок 15. Фазификациия треугольными функциями c общим базисом и соответствующая поверхность отклика регулятора.  Созерцание красивых графиков, оказывается, не только приятно эстетически, но и полезно практически, потому что помогает увидеть ошибки. Ранее я описывал нечеткий регулятор в статье «Простая нечеткая логика слеплена «из того что было» для газотурбинного двигателя» Его внешний вид приведен на рисунке 16. 
Рисунок 16. Нечеткий регулятор из стандартных блоков.  Обратите внимание на зеленую зону, где происходит аккумуляции и дефазификация. Для защиты от деления на 0, я произвольно добавил, как мне показалось, маленькое число 1е-9, которое не должно было повлиять на результат. Но если в качестве функции использовать функции гаусса при с = du/6, то на поверхности отклика регулятора мы ошибку увидим сразу, см. рис. 17 
Рисунок 17. Поверхность отклика для регулятора с ошибкой. И на самом деле поведение регулятора противоречит заданным правилам. При фиксированном нулевом параметре по оси Х, увеличение параметра по оси У сначала не происходит, потом параметр растет до значения 0.5, а потом начинает убывать, что полностью противоречит этим правилам: входная величина растет, а величина отклика падает до 0. Оказывается, малая величина, добавленная для исключения деления на ноль, оказалась совсем не малой и в случае, когда сами результаты активации правил становятся малыми величинам, полностью искажает общий результат, меняя его на противоположный. Это видно в режиме пошаговой отладки (см. рис. 18), когда величина Вход 1. находится в среднем положении и продолжает смещаться вправо, уменьшая значения функции принадлежности, а Вход 2 должен быть умножен на 0 и не учитывается, правильный вывод дает нам среднее положение регулятора (тонкая красная линия на блоке), в ошибочном — величина выхода начинает уменьшатся, хотя вход в регулятор растет. 
Рисунок 18. Нечеткие регуляторы «с ошибкой» и «правильный» в режиме пошаговой отладки Таким образом, мы получили наглядное математическое доказательство, что красота спасает мир. В регуляторе, который работает полностью противоположно заданным правилам логики, ошибку помогает найти красивый трехмерный график поверхности отклика. Для исправления ошибки мне пришлось добавить на схему переключатель который, переключает вход при делении на 0, спасая схему от ошибки, а выход регулятора сохраняется с предыдущего шага расчета.  Таким образом правильный регулятор, в случае когда на входе получает 0, по всем сигналам, на входе сохраняет, то значение которое у него было в предыдущем рабочем состоянии, до возникновения этой ошибки. См. рис. 19. Те, кому захотелось самостоятельно поиграться с моделями, могут взяв архив проектов здесь ... В следующей части разберем двигатель  Моделирование сложных технических систем