参数优化搜索算法(多算法)
组件名称 | 参数优化搜索算法(多算法) | ||
---|---|---|---|
工具集 | 设计分析优化 | ||
组件作者 | 雪浪云-梅清 | ||
文档版本 | 1.0 | ||
功能 | 用于参数优化或者模型标定优化的算法,支持多次优化 | ||
镜像名称 | suanpan_mdo:latest | ||
开发语言 | Python |
组件原理
“参数优化搜索算法”组件根据输入端子1定义的优化问题,根据指定的优化算法,每次迭代产生新的设计点发送给仿真接口组件,仿真组件再将仿真结果返回到输入端子2,进行下一次的迭代优化,直到满足优化条件,结束一轮参数优化搜索的过程。
当一轮优化结束后,用户可以在输入端子1定义新的优化问题,即可触发新一轮的优化。
算法分为局部优化(SLSQP、COBYLA、trust-constr、L-BFGS-B(无约束)、TNC(无约束)、L-BFGS-B(算法并行)、IPOPT等)、全局优化(SMAC、BOUCB、SHGO等)以及遗传算法(NSGA2),局部优化的结果依赖于起始点,而全局优化与遗传算法的结果则与起始点无关;
输入桩
输入端子1
- 端口名称:优化问题
- 功能描述:待优化(标定)输入参数及取值范围,输出参数名称等;
- 输入类型:对象;
- 示例:
// 连续的输入
{
"inputs": [
{"param": "length", "min": 0, "max": 2, "default": 1},
{"param": "width", "min": 0, "max": 2, "default": 1},
{"param": "height", "min": 0, "max": 2, "default": 1}
],
"outputs": ["Volume", "Surface"],
"objectives": [{"objective": "Volume", "option": "MaximizeValue"}],
"constraints": [{"function": "10-Surface"}, {"function": "Surface-2"}]
}
// 离散的输入
{
"inputs": [
{"param": "length", "set": [0, 1, 2], "default": 1},
{"param": "width", "set": [0, 1, 2], "default": 1},
{"param": "height", "set": [0, 1, 2], "default": 1}
],
"outputs": ["Volume", "Surface"],
"objectives": [{"objective": "Volume", "option": "MaximizeValue"}],
"constraints": [{"function": "10-Surface"}, {"function": "Surface-2"}]
}
其中:
- inputs:输入参数以及取值范围列表
- 局部优化:仅支持连续的输入,如果是离散的输入,则会报错;
- 全局优化:同时支持连续或离散的输入;
- outputs:输出参数列表;
- objectives:优化目标列表;
- objective:优化目标;
- option:支持以下
- MaximizeValue:最大化目标值;
- MinimizeValue:最小化目标值;
- constraints:约束函数列表;
- function:约束函数,表达式>=0;
输入端子2
- 端口名称:仿真结果
- 功能描述:包括设计点ID(design_id)和仿真输出参数;
- 输入类型:对象;
- 示例:
{
"design_id": 1, "success": true, "Volume": 1.0, "Surface": 6.0
}
输出桩
输出端子1
- 端口名称:仿真输入参数;
- 功能描述:仿真参数用于作为仿真接口组件的输入,其中包含design_id。每次输出后内部design_id累加1,最后一次结束时再另外输出一个空的Json字符串:即
{}
,通知其他组件发送完毕结束这个状态; - 输出类型:对象;
- 示例:
{
"design_id": 3, "length": 1.33, "width": 1.35, "height": 1.36
}
输出端子2
- 端口名称:仿真结果;
- 功能描述:添加了额外信息的仿真结果(例如针对遗传算法NSGA2的额外信息有:当前迭代次数、是否可行解、是否非支配解、是否最优解),用于写入数据库;
- 输出类型:对象;
- 示例:
{
"design_id": 1, "success": true, "Volume": 1.0, "Surface": 6.0, "gen": 100, "feasible": true, "non_dominated": true, "best_solution": false
}
数据接收方式
异步模式。
参数配置
配置优化算法的类型与参数等。
优化算法
- 功能描述:算法的类型,代表不同的优化算法,算法分为局部优化(SLSQP、COBYLA、trust-constr、L-BFGS-B(无约束)、TNC(无约束)、IPOPT等)和全局优化(SMAC、BOUCB、SHGO等),局部优化的结果依赖于起始点,而全局优化的结果则与起始点无关。
具体的算法如下:
- SLSQP(Sequential Least Square Programming):使用顺序最小二乘规划来最小化目标函数,用于解决带约束的、局部优化问题;
- COBYLA(Constrainted Optimization BY Linear Approximation):基于对目标和约束的线性逼近,用于解决带约束的、局部优化问题;
- trust-constr:是一个信頼域算法,用于解决带约束的、局部优化问题;
- L-BFGS-B:可高效地解决大尺度问题,用于解决不带约束的、局部优化问题;
- TNC:使用截断牛顿算法,用于解决不带约束的、局部优化问题;
- L-BFGS-B(算法并行):L-BFGS-B的并行版本;
- IPOPT(Interior Point OPTimizer):使用内点线搜索滤波方法,用于解决带约束的、局部优化问题;
- SHGO(Simplicial Homology Global Optimization):适用于解决带约束的、不可求导的全局优化问题,适用于解决一般用途的nlp和blackbox 全局优化问题(低维问题,比如自变量数量小于10个);
- NSGA2(Non-dominated Sorting Genetic Algorithm 2):即带有精英保留策略的快速非支配多目标优化算法,是一种基于Pareto最优解的多目标优化算法,该算法用于解决多目标优化问题,,其输出的是一组解而非单个最优解,一组解中每个解之间互不支配(即没有一个解比另一个更好);
- 必选参数:否;
- 默认:SLSQP;
优化算法参数
- 功能描述:为特定算法(分为局部优化和全局优化)配置参数;
- 必选参数:否;
- 默认:{};
- 示例:
// 针对"SLSQP"
{
"ftol": 1e-6,
"maxiter": 100,
"eps": 1.4901161193847656e-08,
"disp": true
}
// 针对"SMAC"和"BOUCB"
{
"max_evaluations": 20
}
// 针对"SHGO"
{
"maxfev": 20,
"f_min": 0.1,
"f_tol": 1e-6,
"maxiter": 100
}
// 针对"NSGA2"
{
"popSize": 100,
"maxFE": 10000
}
如果是局部优化,根据选择的不同优化算法,相应的优化算法参数也不一致,比如“SLSQP”的参数支持如下参数:
- ftol:浮点型,目标函数f的迭代停止条件,默认值为
1e-06
; - eps:浮点型,梯度下降的步长尺寸,例如
1.4901161193847656e-08
; - maxiter:整型,最大迭代次数(一次迭代可能会对应多次目标函数评估),默认值为
100
; - disp:布尔,true/false,是否打印收敛信息,如果为true则打印收敛信息;
如果是"SMAC"或"BOUCB",则可以配置以下参数:
- max_evaluations:整型,默认值为20,该值是一个与成本相关的数值,即数值越大,则计算时长越长;
如果是"SHGO",则可以配置以下参数:
- maxfev:整型,最大函数评价次数,该值是一个与成本相关的数值,即数值越大,则计算时长越长;
- f_min:浮点型,目标函数的最小值(如果已知的话);
- f_tol:浮点型,目标函数f的迭代停止条件;
- maxiter:整型,最大迭代次数;
如果是"NSGA2",则可以配置以下参数:
- popSize:种群大小,遗传算法的重要参数,表示一次迭代中的种群的大小;
- maxFE:最大函数评价次数,等同于设计点的个数,该数值越大,则计算时长越长;
起始点个数
- 功能描述:仅针对局部优化使用,为局部优化设定初始点的个数,因为局部优化依赖于起始点个数,数量越多,计算时长越长;起始点个数如果为1,则起始点坐标由优化问题中决定;如果起始点个数大于1,则多个起始点的坐标由DoE生成;
- 必选参数:否;
- 默认:1;
仿真失败时的默认值
- 功能描述:针对仿真结果组件返回的仿真结果中"success"为false的情况(即仿真失败的情况),可以设置仿真结果的 默认值,从而让优化流程继续;
- 必选参数:否;
- 默认:空;
并行选项
- 功能描述:仅针对L-BFSG-B(算法并行)使用,用于提高算法的计算效率;
- 必选参数:否;
- 默认:{};
- 示例:
{
"max_workers": 4, // 最大使用核数
"forward": true, // true-前向差分,false-中心差分,前向差分相对速度快但精度低,中心差分反之
}
运行调优
不建议进行特别配置,按照平台的默认分配运行。
使用方法
未部署状态下的操作步骤
后面板链接
右面板配置
- 配置优化算法,可默认为"SLSQP";
- 配置优化算法参数,可默认为"{}";
- 配置初始点个数,可默认为1;
- 仿真失败时的默认值,可默认为空;
部署状态下的操作步骤
后面板操作
在前面板输入优化问题,然后切换到后面板,并点击“滚动日志”,观察其输出结果。
前面板输入优化问题:
右面板观察输出:
弹窗操作
无。