PSO与GEKKO结合报错:Intermediate variable with no equality (=) expression及温度分布多项式系数优化问题求助
PSO与GEKKO结合报错:Intermediate variable with no equality (=) expression及温度分布多项式系数优化问题求助
各位大佬好,我现在卡在一个化工过程的优化问题上,想请大家帮忙诊断下!
先给大家梳理下我的需求和当前的困境:
我要优化一个描述[0, 100min]区间内温度分布的多项式系数,多项式形式如下:
p0 = 0.1 p1 = (t - 50)*(3**0.5/500) p2 = (t**2 - 100*t + 5000/3)*(3/(500000000**0.5)) T = coef0*p0 + coef1*p1 + coef2*p2
我的核心目标是最大化终态(tf=100min)的生物柴油浓度x4(tf),同时需要满足两个约束:
- 一组控制反应速率的常微分方程(ODE)系统
- 温度的硬约束:298 K < T < 338 K
这个问题出自一篇学术文献,原作者用蒙特卡洛随机搜索+遗传算法来拟合多项式参数,再用Matlab的Ode45求解x4(tf)的最优值。我想换个技术栈试试,用粒子群优化(PSO)作为外层算法搜索最优的多项式系数,然后用GEKKO作为内层工具求解ODE并计算对应的x4(tf)——也就是每完成一轮PSO迭代,就把当前粒子对应的coef0/coef1/coef2传给GEKKO,让GEKKO求解ODE得到x4(tf),再把这个结果反馈给PSO,用来更新粒子的位置和速度。
但现在在整合PSO和GEKKO的过程中,我遇到了报错:Intermediate variable with no equality (=) expression,反复检查了代码还是没找到问题所在,想问问有没有大佬遇到过类似的GEKKO报错,或者能给我一些调试的建议?
另外,我也想请教一下:这种"外层启发式算法调参数,内层求解器做ODE优化"的架构,有没有更高效的实现方式?或者我的思路本身有没有可以优化的地方?
备注:内容来源于stack exchange,提问作者Luiz Miguel
相关产品推荐
相关产品推荐

