【用于动态优化中有限元上的正交配点法】高效求解大规模复杂动态优化问题(Matlab代码实现)

  💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

 ⛳️赠与读者

💥1 概述

📚2 运行结果

2.1 例1a

2.2 例1b

2.3 例2

2.4 例3

2.5 例4

2.6 例5

🎉3 参考文献

🌈4 Matlab代码、数据、文章


 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥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资源获取

                                                           在这里插入图片描述

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值