💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
解决一系列动态优化的基准问题 例1a - 非线性,无约束,最小化最终状态(CPU时间=0.036秒) 例1b - 非线性,无约束,最小化带有额外终端约束的最终状态(CPU时间=0.080秒) 例2 - 非线性,有约束,最小化最终状态(CPU时间=2.17秒) 例3 - 具有并行反应的管式反应器(CPU时间=0.073秒) 例4 - 具有连续反应A->B->C的间歇反应器(CPU时间=0.095秒) 例5 - 催化剂plug flow反应器,反应序列A->B->C(CPU时间=0.16秒)
摘要:本文介绍了一个名为dynopt的MATLAB程序,用于过程的动态优化。dynopt程序包旨在寻找决策变量的剖面,以优化给定的性能指标,同时满足特定约束条件。dynopt内部实施的有限元上的正交配置方法使我们能够处理由常微分方程(ODE)和微分代数方程(DAE)描述的问题。多个案例研究已成功测试。
动态优化的目标是在开环控制下,为一个动态系统确定一套决策变量的时间历程(压力、温度、流量、电流、热负荷等),以便在满足特定约束条件(安全、环境和操作约束)下,优化给定的性能指标(或成本函数、优化准则,如成本、时间、能量、选择性等)。最优控制则指在闭环控制中确定最佳的时变轨迹配置。
解决动态优化问题的数值方法可以分为两大类:间接法和直接法。本工作中仅考虑直接法。在此类别中,有两种策略:顺序法和同时法。顺序策略,常被称为控制向量参数化(CVP),通过仅用几个参数的函数来近似控制轨迹,并保持状态方程以原始微分代数方程(DAE)系统的形式(Goh和Teo,1988)。在同时策略中,控制变量和状态变量都使用多项式(例如,拉格朗日多项式)进行离散化,这些多项式的系数成为更大规模非线性规划(NLP)问题中的决策变量(Cuthrell和Biegler,1987)。
本文中,发展了一种正交配置的方法。此外,为了处理剧烈变化或控制不连续性,采用了有限元技术。详细文章见第第4部分。
📚2 运行结果
2.1 例1a
2.2 例1b
2.3 例2
2.4 例3
2.5 例4
2.6 例5
结论:
基于有限元的正交配置方法已在MATLAB环境中得到开发与实现,并通过文献中的六个示例进行了测试。问题的具体细节在第三部分提供。这些示例被挑选出来,旨在展示dynopt程序包处理不同难度级别问题的能力。在所有考虑的示例中,采用了两种不同的梯度计算方法:数值近似和解析计算。每种方法针对案例研究的表现结果汇总在表1、表2、表3、表4、表5、表6中。不出所料,结果显示解析计算的性能更优。另一方面,如前所述,得到的最优解本质上是局部最优的,未来的工作将致力于以全局最优性解决由此产生的NLP问题。
部分代码:
apm_option(s,a,'nlc.nodes',4);
apm_option(s,a,'nlc.solver',1);
apm_option(s,a,'nlc.imode',6);
apm_option(s,a,'nlc.mv_type',1);
apm_info(s,a,'MV','u');
apm_option(s,a,'u.status',1);
apm_option(s,a,'u.dcost',0);
output = apm(s,a,'solve');
disp(output)
y = apm_sol(s,a); z = y.x;
disp(['Optimal Solution: ' num2str(z.x2(end))])
figure(1)
subplot(2,1,1)
plot(z.time,z.u,'r-','LineWidth',2)
legend('u')
ylabel('Manipulated')
subplot(2,1,2)
plot(z.time,z.x1,'b--','LineWidth',2)
hold on
plot(z.time,z.x2,'g:','LineWidth',2)
legend('x_1','x_2')
ylabel('Variables')
xlabel('Time')
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
🌈4 Matlab代码、数据、文章
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取