Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Что лучше: PID регулятор, или Fuzzy logic?

Пн мар 28, 2022 13:32:51

Хочу спросить у сообщества, кто имел дело с регулятором на нечёткой логике (Fuzzy logic regulator)?
Какие впечатления?
Я недавно занялся этим вопросом и просто в восторге. В двух моих проектах регулятор на Fuzzy logic положил на обе лопатки ПИД регулятор. Причём настройка регулятора на нечёткой логике оказалась на порядок проще и понятнее.
В моём блоге я обрисовал сравнение более подробнее, но хочу спросить, есть ли ещё кто-нибудь, кто занимался нечёткой логикой?
И почему при таких преимуществах (быстрое регулирование, отсутствие вынужденных колебаний, лёгкость настройки) нечёткая логика не заменила ПИД в устройствах регулирования?

Re: Что лучше: PID регулятор, или Fuzzy logic?

Пн мар 28, 2022 14:50:45

Продолжайте наблюдение. Если все так красиво то это переворот просто. Кроме шуток. А по коду, больше или меньше чем у пид регулятора?

Re: Что лучше: PID регулятор, или Fuzzy logic?

Вт мар 29, 2022 06:36:20

Fuzzy логтикой не занимался, но читал в книжке Валвано (книжку не рекомендую). Там в 17-й главе обзорно рассмотрены типы регуляторов, начиная от релейных и заканчивая этой нечеткой логикой. Да, расписано красиво, но я вынес из этой главы, что чтобы это реально работало, нужно достаточно хорошо знать контролируемую систему. Иначе заполучить возбуждение и все остальные прелести - раз плюнуть. А если систему хорошо знаешь - тот же ПИД работает хорошо.

Это я к тому, что природу не обманешь

Re: Что лучше: PID регулятор, или Fuzzy logic?

Вт мар 29, 2022 06:49:05

А по коду, больше или меньше чем у пид регулятора?


Вопрос скорее в другом. Является код общедоступным из открытых источников или нет. Если код общедоступен, то тогда возможно тестирование таких устройств независимыми специалистами. А если нет, то тогда это очередной "сименс".

Re: Что лучше: PID регулятор, или Fuzzy logic?

Вт мар 29, 2022 11:02:25

Добрый день. По размеру кода вполне сопоставимо с ПИД регулятором.
Поскольку Fuzzy logic регулятор разработан в рамках контрактных обязательств, раскрыть его пока не могу. Но есть два нюанса:
1) по ссылке в статье есть открытая реализация регулятора. Она тоже вполне применима.
2) Моя библиотека сделана на Float переменных, чтобы избежать масштабирования входных и выходных параметров. Я хочу перевести её на целочисленную логику, чтобы ускорить работу. Правда придётся отказаться от экспоненциальной функции. Тогда нужно масштабировать переменные, но эта библиотека будет открытой, так как сделана вне работы.
Правила нечёткой логики могут реализовывать достаточно сложные функции регулирования, совершенно недоступные ПИД регулятору. Например, вхождение в траекторию, или принятие решений.

Re: Что лучше: PID регулятор, или Fuzzy logic?

Вт мар 29, 2022 11:07:39

регулятор разработан в рамках контрактных обязательств


Тогда это очередной "сименс". То есть решение может и неплохое, но оценить его реальную эффективность невозможно.

Re: Что лучше: PID регулятор, или Fuzzy logic?

Ср апр 20, 2022 22:07:32

Перевёл библиотеку на целочисленную логику.
Теперь её можно использовать на микроконтроллерах без поддержки float.
Это заняло некоторое время, так как нужно было приводить величины к масштабным единицам +-127 и 0..255.
Также нужно было протестировать все новые функции и написать шпаргалку в хедере.
Но теперь всё оформил так, как сам понимаю.
Поскольку эта версия библиотеки не используется на работе, я её выложил в открытый доступ на гит:
https://github.com/Garmin59/Fuzzy_logic_integer
Подробнее описание будет у меня в блоге несколько позже, сюда также выложу информацию.
Если кому будет интересно посмотреть и попробовать, пишите мнения и вопросы в эту ветку, буду отвечать.

Re: Что лучше: PID регулятор, или Fuzzy logic?

Чт апр 21, 2022 08:54:39

Совпадение, не иначе... Несколько дней ищу в интернете практические примеры реализации данного алгоритма, что бы можно было поручить выполнять это микроконтроллеру.Абсолютно случайно попалась на глаза ваша тема.Позвольте высказать свое мнение.
Большей частью, людям хватает простых регуляторов "релейного" типа с гистерезисом, максимум ПИ-регулятр.
Будем честны, зависимость эта и потребность обусловлена областью применения.Для бытовых нужд типа, подогрев рассады, регулировка температуры в помещении, инкубаторы и т.д. хватит примитивного алгоритма и будет работать.Разумеется, для максимального комфорта и эффективности можно ввести "умные регуляторы", но в тоже время и без них будет работать...
К чему я подвожу, тема действительно Очень и интересная и незаслуженно обделена вниманием и если на зарубежных сайтах она хоть мало мальске затрагивается, то у нас с этим проблема.Не смотря на это есть предчувствие, что тема не сыскает популярность.В данном конкретном случае как у вас, эта система оправдана, для автопилота RC моделей она актуальна, для многого она избыточна.Мало у кого получается правильно настроить коэффициенты ПИД-регулятора...
Субъективное мнение, впрочем как и выше, приведите пример, ну предположим термостата под управлением нечеткой логики, что бы люди могли попробовать без сильного погружения в "науку", а кто оценит, тот пойдет дальше.
Повторюсь, тема действительно интересная и не раскрытая!Поэтому желаю удачи в творчестве!

Re: Что лучше: PID регулятор или Fuzzy logic?

Чт апр 21, 2022 12:04:35

Написал простейшую программу П регулятора.
Нагреватель начинает уменьшать нагрев при разнице температур 10 градусов. Можно подобрать под свойства реального нагревателя
Вначале формируем правила оценки разницы температур.
Затем правила управлением нагревателем. Поскольку параметр один, то и логические функции передают первый параметр на выход без изменений.

Правила простейшие: если холодно, то греем, если тепло, то не греем.
Правила зацикливаем.

Специально усложнил код преобразованиями входных и выходных величин.
Сам код в три строчки.

Re: Что лучше: PID регулятор, или Fuzzy logic?

Вс май 01, 2022 12:57:02

Прошло десять дней, и ни одного отзыва.
Никто не попробовал применить у себя нечёткую логику? Или тема трудна для понимания?

Re: Что лучше: PID регулятор, или Fuzzy logic?

Вс май 01, 2022 14:04:47

Ни

Re: Что лучше: PID регулятор, или Fuzzy logic?

Вс май 01, 2022 17:20:02

Ну, тема наверное сложна, надо читать-изучать.

Сходу замечу, что приведенный пример "Написал простейшую программу П регулятора." у меня так и не заработал.
Я его пытался вкорячить в 8051 проц.. Вкорячил. Но не работает.
Ради проверки вкорячил за десять минут в ардуину. Тоже выдает нули.

fuzzy_logic.c/fuzzy_logic.h взяты с github-а




Результат:

Код:
Started.
0
0
0
0
0
0
0
0


Добавлено after 22 minutes 38 seconds:
Блин, а ведь это работает :-)

Оказывается там знак перепутан в примере.
Надо наоборот, delta16 = t_measure - t_setup;

Теперь работает:

Изображение

Если "принудительно охлаждать объект", то резко пытается греть его.
Если не охлаждать, то держит на определенном уровне.

Целевая Т выставлена в 90C, т.е. действительно работает, примерно как П-регулятор с Кп=10.

Добавлено after 12 minutes 16 seconds:
#define IN_COLD -10
#define IN_HOT 0

#define OUT_COLD 0
#define OUT_HOT 100

Учитывая что эти коэффициенты как раз и дают Кп = 10 как (100-0) / (0 - (-10)) --, то на таком примере преимущество нечеткой логики не очевидно.
Какая разница, для какого регулятора потребуется подобрать Кп = 10 - для П-регулятора или регулятора на нечеткой логике?
Вложения
image.png
(20.94 KiB) Скачиваний: 592

Re: Что лучше: PID регулятор, или Fuzzy logic?

Вс май 01, 2022 18:04:22

Отлично, что у вас заработало на 51 процессоре! Библиотеку проверял на пк в Vision Studio Code. Опечатку поправлю.
Насчёт примера - это ведь первый "HELLO world" в использовании регулятора.
Количество правил и входных переменных неограничено.
Например, можно добавить интегральную или дифференциальную ошибку и добавить правила для полного ПИД реглятора.
Когда в голове складываются "правила по данным эксперта", то можно сделать управление всем, чем угодно.
Сейчас, например, отлаживаем управление курсом сельхоз. трактора на поле по линии.
Две переменные - расстояние до линии и курс трактора. На выходе - угол поворота передних колёс.
Пять состояний в каждой переменной, двадцать пять правил.
Описывают подход к линии, постепенный въезд в неё и поддержание отклонения не более 2 см.
Другие пилят управление коптером или моделью самолёта.
Преимущество нечёткой логики в том, что можно построить нелинейные правила, больше всего подходящие к данному процессу управления.

Re: Что лучше: PID регулятор, или Fuzzy logic?

Вс май 01, 2022 19:16:28

Да, я бегло прочитал ссылку на блог.
вопросы :)

1) Зачем в функциях есть строка "(void)p3;" ? Просто чтобы компилятор не ругался?
2) Где бы наискать информацию для дальнейшего изучения, чтобы сделать регулятор посложнее-поточнее.

----

Отлично, что у вас заработало на 51 процессоре!


Ну это не так радостно, на самом деле. Я правил код в Keil, и ограничений этого компилятора это специфическое развлечение.
Код заработал в том числе [вероятно] благодаря удалению p3 из-за особенностей передачи аргументов в функцию.
В аппноте https://www.keil.com/appnotes/files/apnt_129.pdf страница 4 указано, что аргументы функции, вызываемой через указатель на функцию,
должны размещаться в регистрах, а это не более трех аргументов. Поэтому более сложные правила, чем low/high, которым будет нужен p3, сходу не пойдут.

Кстати, вот так можно избавиться от переменной start и чуть сократить машинный код.

Re: Что лучше: PID регулятор, или Fuzzy logic?

Вс май 01, 2022 21:55:20

вопросы
1) Зачем в функциях есть строка "(void)p3;" ? Просто чтобы компилятор не ругался?

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

Я искал в гугле, пару ссылок оставил в блоге, остальное не сохранил, на английском находил толковые статьи.
Для меня самое сложное было понять, как из нечётких результатов получать чёткое решение :) Потом понял про весовые коэффициенты, и паззл сложился.
Для оценки правил отлично подошёл вариант построения трёхмерной поверхности из результатов и входных переменных. Сразу показывает, где ошибся в правилах:
Изображение
Код заработал в том числе [вероятно] благодаря удалению p3 из-за особенностей передачи аргументов в функцию.

В вашем случае можно использовать только один указатель, на структуру параметров, но надо править код библиотеки
Кстати, вот так можно избавиться от переменной start и чуть сократить машинный код.

Конечно можно, это моя фобия - избегать break.

Re: Что лучше: PID регулятор, или Fuzzy logic?

Пн май 02, 2022 15:57:25

А как PI регулятор сделать? Для нагревателя.
Вход: Уставка, температура. Выход: % мощности нагревателя, 0-1000 (шаг 0.1%).

В статье на хабре https://habr.com/ru/post/500268/ есть вроде как подходящая "база правил для регулятора" (если заменить "скорость" на "отклонение температуры"):

если отклонение больше или (отклонение норма (0) и скорость растет), то воздействие больше.
если отклонение в норме, то воздействие 0.
если отклонение меньше или (отклонение норма (0) и скорость падает), то воздействие меньше.

Но тут непонятный момент - "воздействие больше/ноль/меньше" - т.е. получается, что на выходе такого регулятора надо реализовать интегратор?
В принципе это не проблема.

Но основной вопрос - как в принципе всё это описать в функциях и правилах?

Re: Что лучше: PID регулятор, или Fuzzy logic?

Пн май 02, 2022 17:54:42

Тут всё просто.
Три шага:
1) Входные величины - это ошибка в данный момент, и разность ошибок сейчас и некоторое время назад. Это две входные переменные (отклонение и скорость).
Их заносим во входной массив с индексами 0 и 1 соответственно.
Теперь надо определится с правилами фуззификации: "отклонение в норме" это от куда до куда. Например, от -5 до +5 градусов. Можно применить треугольную функцию с центром 0 и базой 5 градусов. Можно взять и кубическую аппроксимацию Гаусса с сигмой 2,5 но пока не нужно.
"меньше" тогда будет ниже 5 градусов. Возьмём функцию low с параметрами -5 и 0. Похоже будет "больше".
Три функции для параметра отклонение.
Для ваших правил нужны ещё две функции для параметра скорость. Думаю, нужно будет умножать на 10, так как скорость будет в величинах меньше единицы. Вот и повод использовать функцию in_scaling. Определите в числах, сколько и в какой функции будет "скорость растёт" и "скорость падает" (функции low и high подойдут).
Итого пять правил, определяющих понятия входных переменных.
Кстати, всё это описано в fuzzy_logic.h, просто почитайте внимательно.
2) Теперь определите выходные воздействия. Например, "больше" это 100, "ноль"-0, "меньше" -100.
3) И напишите ваши три правила в пять строк, так как сложные правила пишутся последовательными бинарными выражениями. Всё это тоже есть в примере на гите.
Насчёт интергатора на выходе - можете попробовать применить, никто не запрещает.
Запускайте ваш регулятор - получаете результат.
Ответить