Качал с гитхаба сегодня, где-то за 30 - 60 мин до своего поста.
При запуске Main я так понимаю в консоль выхлоп оценки ошибки выдавался для ПИД и вашего регулятора?
А где аналогичный график с вашим регулятором?
Я вижу проблему в самой процедуре интегральной подстройки. Сам замысел устранять статическую ошибку ПД-регулятора таким образом содержит незаконные допущения, которые расходятся с практикой использования регуляторов, вот и всё)
В замен я предлагаю осмысленную процедуру подстройки, которая в принципе не плохо работает "в лоб", не требуя от производителя регуляторов думать о тонкостях реализации.
Это тест на реакцию при резкой смене внешних условий.
В коде это выглядит как перегрузка метода setTOut класса PhysModel, где мы задаем внешнюю температуру:
В качестве внешней температуры для тестов используется такой алгоритм:Код:model2 = new PhysModel(random, pr, 0.000, 60, n) {
@Override
public double setTOut(double time) {
// return super.setTOut(time);
return functionT(time);
}
};
Если его не перегружать - работает алгоритм случайного блуждания внешней температуры. А так вы можете задать свою форму для своих тестов.Код:static double functionT(double time) {
if (time < 5000) return 10;
return 0;
}
Я закоммитил исправленную версию только когда свой пост написал.верноЦитата:
При запуске Main я так понимаю в консоль выхлоп оценки ошибки выдавался для ПИД и вашего регулятора?
Вот добавил синим, причем с параметрами "на глазок" исходя из модели, не оптимизированными.Цитата:
А где аналогичный график с вашим регулятором?
Вложение 40617
А вот тоже самое со следующими параметрами ПИД: Xp = 0.5, tI = 300, tD = 120
Вложение 40618
Понятно, для старой модели ваш регулятор выдавал ошибку порядка 0,3.
Ваш ПИД с моими настройками около 0,2.
Все расчеты в ваших критериях, вашим софтом.
Если действительно интересно, откатитесь к ветке предыдущей (вы же под гитом) и подставьте мои коэффициенты и графики в студию.
Сейчас вы поменяли модель, через 2 часа после моего поста :) , логично, регулятор надо перенастраивать.... надо опять смотреть... Netbeans под рукой нет.
Величина перерегулирования я надеюсь не критична, главный критерий ошибка?
Сейчас получается, что вы показали какой-то график, но непонятно как из него делать выводы.
Вот статья в которой рассматриваются разнообразные сценарии: https://habr.com/post/143388/
Было бы хорошо сделать что-нибудь в подобном случае, где показать "вот наша температура, а вот жахнули морозы, а вот оттепель" и т.п.
Сейчас же просто график "ПИД vs ПИД++", и неясно что за внешнее воздействие было.
Ну это не новость. Мой регулятор в половине случаев дает ошибку больше, чем ПИД, а в другой половине - меньше.=)Что критично, а что нет - зависит от того, что тестируется и что хочется увидеть в результате.Цитата:
Величина перерегулирования я надеюсь не критична, главный критерий ошибка?
На самом деле я погоняв свой регулятор в различных в том числе и жестких условиях понял, что настройка параметров по легко определяемым физическим параметрам далеко не всегда адекватна.
В тяжелых случаях может понадобиться серьезно корректировать коэффициенты.
Потом, я еще не остановился на финальной формулировке самого вида моего регулятора. Например, должно ли время усреднения PE совпадать с временем крутизны регулирования tX. Должно ли это усреднение использовать компенсацию тренда или нет? Это делает её гораздо реще, но иногда приводит к автогенерации. Сейчас я прикрутил к времени фильтрации адаптивную подстройку, что позволяет использовать и усреднение с компенсацией тренда и подавляет автогенерацию.
Это график стремления температуры к уставке для модели anthrwpos в последней (новой) реинкарнации. Уставка, кстати, +20°C по шкале oY в последних скринах (по коду на жабе можно догадаться, почему бы об этом не написать - я не знаю)
В модель не вникал, если честно (да и не физик я).
Жду ответа автора на мой пост.
Видимо придется ставить нетбинс ...
Пока видится все это так:
Регулятор ПД+ это регулятор ПИД, в котором "И" нужно поделить на сорок два (https://www.youtube.com/watch?v=fbaPsiU0FCA), чтобы получить ПД+
предполагая, что можно устранить статическую ошибку интегрированием мы неявно полагаем, что она связана только с законом регулирования, а не с физическими ограничениями исполнительного устройства. Например, обогреватель не может греть в минус - поэтому летом интегрировать нельзя. А если бы мог, и еще и не имел бы максимальной мощности - то работало бы отлично и не очень нужно было бы интегральную подстройку ПИД на что-то менять.
Можно придумать заплатку, которая запрещала бы интегрировать летом, или суровой зимой, когда обогреватель уже не справляется. Мои реализации ПИД именно так и делали. Но и в этом случае отработка возврата в нормальное регулирование зачастую происходит с проседанием.Цитата:
Вопрос из п#34 - ?
- Всё точно так-же - подбор трех коэффициентов.Цитата:
С ПИД регулятором все понятно, там все сводится к подбору коэффициентов. А как у вас ?
А что бывает иначе? =)На работе мои реализации ПИД уже давным давно с адаптивными подстройками.Цитата:
.. и стало еще лучше чем просто ПИД ?
Управление утилизацией тепла ГПУ на обычном ПИД вообще не работает. Или входит в автогенерацию, или машина перегревается потому что регулятор не сообразил вовремя открыть клапан.
откатил, действительно ваши параметры дают ошибку 0,19, мои 0,31. График температур такой.
Вложение 40619
Переделал параметры своего регулятора так, чтобы они соответствовали вашим.
ошибка ПИД 0,19, PR - 0,24Код:PhysReg pr = new PhysReg(14, 300, 60, 0.1, 20, 40, 60);
Вложение 40620
А при таких параметрах мой регулятор уже выигрывает:
Ошибка ПИД 0,19, PR - 0,16Код:PhysReg pr = new PhysReg(8, 150, 22, 0.1, 20, 40, 22);
Вложение 40621
а вот при таких параметрах ПИД ошибка будет около 0,15 у обоих регуляторов.
Графики уже не буду приводить.Код:PID_Fine pid = new PID_Fine(2.7, 74, 150, 0.1, 40, 20);
Да, на графиках температур:
красный - температура датчика в модели управляемой ПИД
розовый - температура комнаты в модели управляемой ПИД
синий - температура датчика в модели управляемой pr
голубой - температура компаны в модели управляемой pr.
Это как?
Если ваш регулятор алгебраически пересчитывается в ПИД один к одному, значит он и есть ПИД (ну, я выше об этом писал если что).
Т.е. вы не изобретали регулятора, а придумали (возможно) методику его настройки (при чем, как видно, - не оптимальную)
Или я не прав?
Нет, из картинок явно видно, что характер управления во время скачка качественно другой.
Дифференциальное время ПИД точно соответствует моему времени инерции tU
Пропорциональный коэффициент ПИД точно соответствует отношению tX / D.
Ну это логично, поскольку ПД-часть обоих регуляторов одинаковая.
А вот интегральное время ПИД вообще говоря не совсем соответствует моему параметру tX. При фильтрации вычисленных потерь PE за время tX без компенсации тренда моя поправка стремится к стационарному значению примерно за то-же время, что и интегральная поправка ПИД.
Я тут начал писать описание своего регулятора.
Альфа версия пока выглядит примерно так.
Вложение 40622
Параметр β я сейчас не использую вообще, он у меня везде равен нулю. Я пока не придумал реальных ситуаций, когда он мог бы быть отличным от нуля)
Вот это и есть причина по которой я поменял физмодель. Я никак не мог понять, почему модельные параметры плохо работают. Оказалось в модели баг засел)
В моей реализации запрещается повышать интегральную поправку если управление выше единицы и понижать если управление ниже нуля.
Обычно это работает сильно лучше разностной реализации.Может быть существуют такие неочевидные параметры, при которых обычный ПИД бы работал нормально.Цитата:
пока нет никаких доказательств невозможности применения ПИД на Вашем ГПУ.
Только вот адаптивный ПИД там заработал со вбитыми на глазок параметрами.
Для меня это вполне себе аргумент в пользу такой модификации)
Хотя у адаптивного ПИД есть целая гора побочных эффектов. Например, он очень медленно переходит на новую уставку. Может надолго зависнуть в положении, отличающемся от уставки и много чего еще.
Зато он моментально парирует "попытки коня улететь на Марс" и при этом подавляет автогенерацию, что мне было и нужно.
Нет, мой PhysReg регулятор это не модификация ПИД поскольку в нем нет интегрирования отстройки вообще.Цитата:
это не "альтернатива ПИДу" (см.название темы), а одна из специализированных модификаций ПИДа
Если что, я ПИД для вашей модели настраивал методом "научного тыка", заняло это минут 5 моего времени. Я думаю это далеко не оптимальная конфигурация, хотя он лучше вашего на 33%. Ваш же настроенный по моим коэффицентам лучше
Я не очень понимаю: вы настроили свой регулятор по моим коэффициентам ПИД, потом еще донастроили его, и регуляторы стали примерно одинаковы... и чем ваш регулятор лучше ПИД?
Чтобы отвечать вам по существу, придется вникать в тему полностью... если вдруг время будет, попробую подробнее ознакомиться с вашей концепцией.
Вы будете сюда подробное описание выкладывать вашего регулятора и его настройки?
Я сперва настроил свой по вашим коэффициентам, затем донастроил его с помощью автоматической настраивалки (класс OptiFind) - он стал давать ошибку меньше ПИД. А затем этой-же настраивалкой подстроил и сам ПИД. Ошибки сравнялись.
Если судить по значениям ошибки - то получается что ничем не лучше. Но по графикам например мне поведение моего physreg больше нравится).
Чтобы убедиться, что physreg однозначно лучше ПИД, нужно проводить множество тестов, варируя параметры окружения включая например ситуацию когда обогреватель не может догреть систему и когда систему не нужно греть вообще. Тогда мне кажется, можно будет показать, что усредненно оптимальная настройка моего регулятора будет давать по совокупности разных тестов значительно меньшую ошибку чем ПИД. Я думаю такие тесты со временем провести и показать результаты.Как только оно устаканится - выложу.Цитата:
Вы будете сюда подробное описание выкладывать вашего регулятора и его настройки?
Обычная заплатка - это так называемый разностный метод. У него противоположная беда: ложные включения и выключения.
У моего ТРМ-500 постоянно такое видел. В комнате +30. Подул ветерок - снизилось до +28. уставка +24, дифференциальное время = 0. Обогреватель включился. Нафига?
А всё просто. При разностном методе производная управления зависит от производной температуры делить на пропорциональный коэффициент плюс отстройка делить на интегральное время. Если температура снижается медленно - интегральная часть этой разности зануляет управление быстрее чем пропорциональная пытается его повысить. А если нет - возникает то что я называю ложным включением.
Против этой беды и направлена моя реализация заплатки.Так пишете, как буд-то я ни разу ПИД не настраивал) Я на работе все ПИДы перенастроил так, что коллеги называли меня гуру ПИДа=) Я отлично понимаю какой там коэффициент за какое поведение отвечает.Цитата:
Если медленно изменяет выход - см. параметры ПИДа (обычно П)
Если регулируемая величина медленно выходит на новую уставку - см. параметры и инерцию регулируемой системы включающую инерцию датчика и исполнительного механизма, но на инерцию системы выбор регулятора не влияет.
Завис выход ПИДа - см. настройки (обычно И). Не реагирует обратная связь - см. выше про инерцию системы.
Поправка к ПД-регулированию, которая устраняет статическую ошибку физически является некими "потерями энергии" из управляемой системы, назовем это так.Цитата:
Так как устраняется статическая ошибка ?
Потери равны поступлениям минус полному изменению "энергии".
Поступления от исполнительного устройства вычисляются как среднее значение управления за время инерции τU (дифференциальное время ПД).
Полное изменение - как производная умножить на параметр емкости (D).
Наконец, полученная разность усредняется, потому что производная обычно содержит много шумов.
Полученная поправка устраняет статическую ошибку ПД, а кроме того, отлично отрабатывает в описанных мной случаях, где интегральная поправка ПИД ведет себя неправильно.
Нас в учительница в школе учила, что при синтезе регулятора устанавливаются начальные условия: время регулирования и перерегулирование (как один из популярных вариантов), а также надо обеспечить определенный запас устойчивости, чтобы система не перешла в неустойчивое состояние при выходе параметров её модели за определенные пределы (например, из-за старения элементов системы).
"Больше нравится", - звучит как-то по-дилетантски. Вы же все-таки физик, давайте мат. часть подтянем, когда поясняете критерии "лучшезны".
Тогда зовите меня Владыка, я настроил ваш регулятор лучше вас, ничего не делая :)
Я так понимаю, это только для вашей модели опять же, что весьма не показательно будет.
Вообще, у вас есть модель, она известна, если реалии объекта очень похожи на модель, то настоятельно советую вам синтезировать частный регулятор, а не использовать ПИД и ваш ПД+ тоже не использовать, он вам даст великолепные характеристики я думаю.
Не лучший пример для эталона ПИД
В общем и целом, спасибо за тему ... заставляет немного подумать, а то мозг вянет.
Нет, это у интегрального времени ноль недостижим поскольку оно в знаменателе. Дифференциальное время ноль это вполне нормальное значение..Тут можно снизить интегральное время и эффект станет проявляться не так сильно. Но вылезет перерегулирование, а то и автогенерация. Проходили всё это)Цитата:
Тут ?
Пока обозначили плохую настройку. Но это не проблема регулятора.
Повышать в ответ пропорциональный коэффициент нельзя - эффект вылезет снова.Просто некие абстрактные потери.Цитата:
А вот потери - это как ? Потихоньку сочится ?
Никак не могу определиться с тем, в каких терминах объяснять работу регулятора.
Если объяснять в понятных всем терминах обогрева комнаты - начинаются вопросы "твой регулятор только для обогрева годится?"
Если объяснять в полностью абстрактных терминах - вообще никому ничего не понятно)
Поэтому я синтезировал нечто промежуточное - адаптированная терминология из теплотехники применительно к общим абстрактным вещам.
Мне на самом деле больше нравится терминология из электроники. Тогда будут не потери, а утекающий со второй емкости ток. Плюс можно понятную схему нарисовать. Но поймут только знакомые с электроникой.
Про частный регулятор я уже думал. Но пришел к выводу, что он потребует дополнительных датчиков для вычисления дополнительных параметров, а мне такого не надо.Пример совершенно типичный. Самая распространенная реализация.Цитата:
Не лучший пример для эталона ПИД
Спасибо всем за критические комментарии, а особенно тем, кто не поленился разобраться в моем криво написанном коде)Цитата:
В общем и целом, спасибо за тему ... заставляет немного подумать, а то мозг вянет.
Буду работать над этой темой дальше.
дифференциальное слагаемое ПИД выглядит так: PD = tD / Xp * (dX/dt), где tD - дифференциальное время, xP - пропорциональный коэффициент, dX/dt - производная.
Никаких проблем поставить tD=0 нет.
вообще я писал "интегральное время" ну да ладно.Цитата:
Даже боюсь уточнять - где-где у интеграла дифференциальное время ?
С одной стороны нет, а с другой - ну не до такой же степени.Цитата:
Можно еще раз :
Т.е. Вы полагаете что нагреватель должен включаться исключительно при температуре датчика ниже уставки ?
Хотя мой регулятор тоже может подобным образом делать, если при снижении температуры с 30 до 28 вычисленные потери окажутся выше чем отрицательная пропорциональная составляющая.
Вообщем - проведу дополнительные испытания и тогда уже точно скажу это "баг или фича".
Точно.Цитата:
А какая разница - какая терминология ? Т.е. потери - это некоторый эквивалент утекающего тока ?
Именно. Но сложно не согласиться, что вычислять потери интегрируя отстройку - плохая затея)
Потери - объективная физическая величина, она не должна зависеть от уставки вашего регулятора.