# 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 达到最大时间限制

# 另请参阅

ga | particleswarm | patternsearch