# multistart
使用多起点搜索寻找函数最小值
函数库: TyGlobalOptimization
# 语法
x, fval, ret = multistart(func, lb, ub)
x, fval, ret = multistart(func, lb, ub, options)
# 说明
x, fval, ret = multistart(func, lb, ub),求解带有边界约束的优化问题,其中 func 为目标函数,lb ,ub 分别为决策变量 x 的上下界。示例
x, fval, ret = multistart(func, lb, ub, options),求解带有边界约束的优化问题,使用 options 设定求解器优化选项。示例
# 示例
求解有界约束问题
在一个边界范围内,最小化一个具有多个局部最小值的函数。
using TyGlobalOptimization
func(x) = x[1]^2 + 4 * sin(5 * x[1])
设定边界约束。
lb = [-5]
ub = [5]
执行求解。
x, fval, ret = multistart(func, lb, ub)
打印输出结果。
println("最优解 = $x")
println("最优值 = $fval")
println("停止原因:$ret")
最优解 = [-0.3079983244168775]
最优值 = -3.903239322565017
停止原因:XTOL_REACHED
使用非默认参数优化
定义待优化问题。
using TyGlobalOptimization
func(x) = x[1]^2 + 4 * sin(5 * x[1])
lb = [-5]
ub = [5]
设置优化选项。
options = mul_options(n=150)
执行求解。
x, fval, ret = multistart(func, lb, ub, options)
打印输出结果。
println("最优解 = $x")
println("最优值 = $fval")
println("停止原因:$ret")
最优解 = [-0.3079983245731196]
最优值 = -3.9032393225650166
停止原因:XTOL_REACHED
# 输入参数
func-目标函数
函数名
func 为待求解问题的目标函数。func 接收一个向量 x,并返回一个标量值。
示例: func(x)=sin(2*x[1])
数据类型: Function
lb-决策变量下限
实数向量
决策变量的下限,即 x >= lb。
示例: lb = [-10,-Inf]
数据类型: Real
ub-决策变量上限
实数向量
决策变量的上限,即 x <= ub。
示例: ub = [Inf,10]
数据类型: Real
options-优化选项
mul_options 函数的输出 | Struct
优化选项,指定求解器参数,由 mul_options 函数创建。 对于 multistart, options 如下
| 名称 | 含义 | 默认值 |
|---|---|---|
| localmethod | String,局部优化算法。可支持算法:LN_BOBYQA, LN_NEWUOA_BOUND, LN_NELDERMEAD, LN_SBPLX, LN_COBYLA。其中,LN_NEWUOA_BOUND 只能处理 2 维及以上的问题。 | "LN_BOBYQA" |
| xtol_abs | Float64,绝对容差。 | 1e-8 |
| xtol_rel | Float64,相对容差。 | 1e-8 |
| maxeval | Integer,最大评估次数。 | Inf |
| maxtime | Float64,最大时间限制。 | Inf |
| n | Integer,起始点个数。 | 100 |
示例: options = mul_options(n=150)。
# 输出参数
x-最优解
实数向量
最优解,作为实向量返回。
fval-最优值
实数
最优解对应的目标函数值,作为实数返回。一般来说,fval = func(x)。
ret-停止原因
Symbol
停止原因包括:
| 名称 | 含义 |
|---|---|
| SUCCESS | 求解成功 |
| STOPVAL_REACHED | 达到停止值 |
| FTOL_REACHED | 达到 fval 容差 |
| XTOL_REACHED | 达到 x 容差 |
| MAXEVAL_REACHED | 达到最大评估次数 |
| MAXTIME_REACHED | 达到最大时间限制 |