引言

首先,接上一篇https://zhuanlan.zhihu.com/p/585886012开个头。此算例笔者有个寻优问题:找到一个内层恒温值的临界值让外壳的最大温度不能超过315K,因为这个温度会让人觉得烫手,转化为生活问题就是,这个杯子里面装的液体温度超过多少就会让人觉得烫手。

comsol python 强化学习 comsol优化算法_优化算法

优化分类

上个博客是采用COMSOL Multiphysics with MATLAB的方式编写matlab脚本使用二分法进行优化,计算出的结果是液体温度超过76.9[degC]时,杯子拿起来就会觉得烫手。这里用comsol自身的优化算法进行计算,不借助于其它软件联合仿真。关于comsol的寻优,如果从建模思路分类有三种:1.在物理场里直接加全局方程(只能算简单的、一个变量);2.在组件里加优化模块+研究里加优化;3.直接在研究里加优化。从优化问题类型来分:1.参数优化;2.形状优化;3.拓扑优化,当然,也可进行参数估计。


comsol python 强化学习 comsol优化算法_参数估计_02

全局方程需勾选


comsol python 强化学习 comsol优化算法_comsol python 强化学习_03

全局方程需勾选


comsol python 强化学习 comsol优化算法_参数估计_04

物理场和研究里优化


comsol python 强化学习 comsol优化算法_控制变量_05

参数估计

comsol自带优化功能解决

这里解决引言里的问题,不借助matlab。

首先,设置个最大值算子。

comsol python 强化学习 comsol优化算法_优化算法_06

然后,设置个求外壳最大温度的变量。

comsol python 强化学习 comsol优化算法_控制变量_07

然后,设置内壁温度控制变量。

comsol python 强化学习 comsol优化算法_优化算法_08

然后,在物理场里把控制变量赋到内壁温度。

comsol python 强化学习 comsol优化算法_经验分享_09

然后,组件里添加优化模块并设置全局目标。

comsol python 强化学习 comsol优化算法_经验分享_10

然后,在研究里添加优化,选个无梯度的算法Nelder-Mead,同时设置下控制变量的初值和上下限以减少迭代时间。

comsol python 强化学习 comsol优化算法_经验分享_11

comsol python 强化学习 comsol优化算法_控制变量_12

最后,开始计算。结算结束后派生值里设置全局计算,计算出内壁的温度,结果为76.900[degC]。

comsol python 强化学习 comsol优化算法_控制变量_13

comsol python 强化学习 comsol优化算法_参数估计_14

至此计算结束,关于各个优化算法下面叙述。

优化算法

根据官方材料,迭代算法分两类,一类是基于梯度的,一类是无梯度的。基于梯度的有:Levenberg-Marquardt、SNOPT、MMA;无梯度的有:坐标查找(南北西东)、Monto-Carlo(随机)、Nelder-Mead(三角形)、BOBYQA(侦察兵带椭圆)和COBYLA。无梯度的鲁棒性强,计算慢;基于梯度的对方程要求高,计算快,至于优化算法的选择,可见官方视频使用 COMSOL® 软件进行设计优化