指定起始点MultiStart
,具体问题具体分析
在解决问题时使用MultiStart
在基于问题的方法中,您可以使用以下一种或两种技术指定起始点:
创建一个矢量
OptimizationValues
对象使用optimvalues
函数。传递这个向量作为x0
参数解决
.设置
MinNumStartPoints
调用时的名称值参数解决
.如果MinNumStartPoints
超过的点数x0
,然后解决
在问题边界内随机创建额外的点。
初始点向量
对于本例,创建初始点向量作为变量的网格x
由-10到10的整数值组成,并为变量y
的半整数值组成5/2
通过5/2
.的optimvalues
函数需要一个问题,所以用目标函数创建一个优化问题山峰(x, y)
.
你必须指定点optimvalues
这样,点数的维度(索引)是最后的。例如,给出一个标量的多个值t
与n
点,指定
这是1 × -n
,n
是最后一个索引。)
给出一个向量变量的多个值w
指定长度为2的
这是2乘-n
,n
是最后一个索引。)
这个规则对行向量也成立。换句话说,您指定多个行向量,就像每个行向量都是列向量一样。
给出一个矩阵的多个值一个
这是2 × 3
(这是2 × 3 ×n
,n
是最后一个索引。)
在本例中,确保指定了标量变量的多个值x
而且y
作为行向量,在标量中t
的例子。
X = optimvar(“x”下界= -10,UpperBound = 10);Y = optimvar(“y”下界= 5/2 UpperBound = 5/2);prob = optimproblem(Objective=peaks(x,y));Xval = -10:10;Yval = (-5:5)/2;[x0x,x0y] = meshgrid(xval,yval);将x0x和x0y转换为最佳值的行向量X0 = optimvalues(prob,x=x0x(:)',y=x0y(:)');
从所有点开始求解最小值问题x0
.
ms = MultiStart;[sol,fval,eflag,output] = solve(prob,x0,ms)
使用MultiStart解决问题。MultiStart从所有起始点完成运行。所有231次本地求解器运行都汇聚了一个正的本地求解器出口标志。
索尔=带有字段的结构:X: 0.2283 y: -1.6255
Fval = -6.5511
eflag = localminimumfoundalldc
输出=带有字段的结构:funcCount: 2230 localSolverTotal: 231 localSolverSuccess: 231 localSolverIncomplete: 0 localSolverNoSolution: 0 message: 'MultiStart从所有起始点....完成运行' local: [1x1 struct] objectiveDerivative: "reverse-AD" constraintDerivative: "auto" globalSolver: " MultiStart " solver: " fmincon "
随机起点
再次解决问题,这次使用MultiStart
从25个随机初始点开始。设置初始点解决
来[1,2]
.
init。x= -1; init.y = 2; rng默认的%用于重现性[sol2,fval2,eflag2,output2] = solve(prob,init,ms,MinNumStartPoints=25)
使用MultiStart解决问题。MultiStart从所有起始点完成运行。所有25次本地求解器运行都汇聚了一个正的本地求解器出口标志。
sol2 =带有字段的结构:X: 0.2283 y: -1.6255
Fval2 = -6.5511
eflag2 = localminimumfoundalldc
output2 =带有字段的结构:funcCount: 161 localSolverTotal: 25 localSolverSuccess: 25 localSolverIncomplete: 0 localSolverNoSolution: 0 message: 'MultiStart从所有起始点....完成运行' local: [1x1 struct] objectiveDerivative: "reverse-AD" constraintDerivative: "auto" globalSolver: " MultiStart " solver: " fmincon "
这一次,MultiStart
从25个伪随机初始点开始运行。解和以前一样。