Как советовали, смотрел код Марлина, спрашивал ИИ, на ютубе полно
видео, но мало про термоконтроль. В MPC главное это функция расчета температуры на следующем шаге, учитывая теплоемкость системы, пришедшее тепло от нагревателя и отток тепла в окружающую среду. Тут у меня добавлен расчет пришедшего тепла, учитывая последние 30 шагов.
Потом вычисляется условная "стоимость" для нескольких уровней нагрева в течение нескольких следующих шагов, и выбирается уровень с наименьшей стоимостью. За стоимость обычно принимается сумма квадратов ошибок предсказанной температуры и целевой. Вот думаю разделить ошибки с преывшением температуры и с недогревом, и присвоить им разные коэффициенты, чтобы недогрев был дороже перегрева.
Главный прикол, после всех вычислений на несколько шагов вперед, используем только первый шаг, на следующем все пересчитываем заново.