跳到主要内容

参数优化搜索算法(多算法)

组件名称参数优化搜索算法(多算法)
工具集设计分析优化
组件作者雪浪云-梅清
文档版本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-中心差分,前向差分相对速度快但精度低,中心差分反之
}

运行调优

不建议进行特别配置,按照平台的默认分配运行。

使用方法

未部署状态下的操作步骤

后面板链接


image.png


右面板配置

  • 配置优化算法,可默认为"SLSQP";
  • 配置优化算法参数,可默认为"{}";
  • 配置初始点个数,可默认为1;
  • 仿真失败时的默认值,可默认为空;

image.png


部署状态下的操作步骤

后面板操作

在前面板输入优化问题,然后切换到后面板,并点击“滚动日志”,观察其输出结果。
前面板输入优化问题:


image.png


右面板观察输出:

image.png


弹窗操作

无。