surrogateopt
耗时目标函数全局最小化的代理优化
语法
描述
surrogateopt
是耗时目标函数的全局求解器。
surrogateopt
试图解决形式上的问题
该求解器在多个维度上搜索实值目标函数的全局最小值,受限于边界、可选线性约束、可选整数约束和可选非线性不等式约束。surrogateopt
最适合于需要很长时间来评估的目标函数。目标函数可以是非光滑的。求解器要求所有变量的边界都是有限的。求解器可以有选择地维护检查点文件,以支持从崩溃或部分执行中恢复,或在满足停止条件后继续优化。目标函数f(x)可以为空([]
,在这种情况下surrogateopt
试图找到一个满足所有约束条件的点。
从保存的检查点文件中的状态继续运行优化。看到使用检查点文件.x
= surrogateopt (checkpointFile
)
继续从已保存检查点文件中的状态运行优化,并替换x
= surrogateopt (checkpointFile
,选择
)checkpointFile
有了这些选择
.看到检查点文件.
例子
全局极小值的搜索
在该区域搜索最小的六峰驼背函数-2.1 <= x(i) <= 2.1
.该函数具有两个全局极小值和目标函数值-1.0316284……
以及四个目标函数值较高的局部极小值。
rng默认的%用于重现性Objconstr = @(x)(4*x(:,1)。^2 - 2.1*x(:,1)。^4 + x(:,1).^6/3...+ x(:,1).*x(:,2) - 4*x(:,2)。^2 + 4*x(:,2).^4);Lb = [-2.1,-2.1];Ub = -lb;X = objconstr (lb,ub)
surrogateopt停止,因为它超过了'options. maxfunctionevaluments '设置的函数求值限制。
x =1×20.0893 - -0.7130
解决非线性约束问题
求Rosenbrock函数的最小值
在非线性约束下,解位于点[1/3,1/3]周围半径为1/3的圆盘上:
.
为此,编写一个函数objconstr(x)
返回结构字段中Rosenbrock函数的值Fval
,并返回表单中的非线性约束值
在结构领域Ineq
.
类型objconstr
函数f = objconstr (x) f.Fval = 100 * (x (2) - x (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;f.Ineq = (x(1)-1/3)²+ (x(2)-1/3)²-(1/3)²;
调用surrogateopt
在每个分量上使用0的下界和2/3的上界。
Lb = [0,0];Ub = [2/3,2/3];[x,fval,exitflag] = surrogateopt(@objconstr,lb,ub)
surrogateopt停止,因为它超过了'options. maxfunctionevaluments '设置的函数求值限制。
x =1×20.6544 - 0.4280
Fval = 0.1194
Exitflag = 0
检查解处的非线性约束值。
disp (objconstr (x) .Ineq)
9.3778 e-04
约束函数值接近零,表明约束在解处是活动的。
解决混合整数问题
求最小值ps_example
函数的值x
它的第一个分量被限制为整数值,并且所有分量都在-5到5之间。
Intcon = 1;rng默认的%用于重现性Objconstr = @ps_example;Lb = [-5,-5];Ub = [5,5];X = surrogateopt(objconstr,lb,ub,intcon)
surrogateopt停止,因为它超过了'options. maxfunctionevaluments '设置的函数求值限制。
x =1×2-5.0000 - 0.0006
使用非默认选项的代理优化
使该地区的六驼峰驼背功能最小化-2.1 <= x(i) <= 2.1
.该函数具有两个全局极小值和目标函数值-1.0316284……
以及四个目标函数值较高的局部极小值。
为了系统地搜索该区域,使用一个规则的起始点网格。将120设置为函数求值的最大次数。使用“surrogateoptplot”
图的功能。要了解“surrogateoptplot”
情节,看到解释surrogateoptplot.
rng默认的%用于重现性Objconstr = @(x)(4*x(:,1)。^2 - 2.1*x(:,1)。^4 + x(:,1).^6/3...+ x(:,1).*x(:,2) - 4*x(:,2)。^2 + 4*x(:,2).^4);Lb = [-2.1,-2.1];Ub = -lb;[Xpts,Ypts] = meshgrid(-3:3);started = [Xpts(:),Ypts(:)];选项= optimoptions(“surrogateopt”,“PlotFcn”,“surrogateoptplot”,...“InitialPoints”startpts,“MaxFunctionEvaluations”, 120);X = surrogateopt(objconstr,lb,ub,options)
surrogateopt停止,因为它超过了'options. maxfunctionevaluments '设置的函数求值限制。
x =1×20.0900 - -0.7123
的线性约束surrogateopt
最小化受线性不等式约束的非线性目标函数。为200个函数求值。
Objconstr = @multirosenbrock;Nvar = 6;Lb = -2*ones(nvar,1);Ub = -lb;Intcon = [];A = ones(1,nvar);B = 3;Aeq = [];Beq = [];选项= optimoptions(“surrogateopt”,“MaxFunctionEvaluations”, 200);[溶胶,fval exitflag、输出]=...intcon surrogateopt (objconstr磅,乌兰巴托,A, b, Aeq,说真的,选项)
surrogateopt停止,因为它超过了'options. maxfunctionevaluments '设置的函数求值限制。
索尔=1×60.0159 0.0061 0.0289 0.0046 0.0207 0.0209
Fval = 2.9173
Exitflag = 0
输出=带有字段的结构:Elapsedtime: 32.4536 funccount: 200 constrviolation: 0 ineq: [1x0 double] rngstate: [1x1 struct] message: 'surrogateopt已停止,因为它超过了由…设置的函数计算限制'
问题结构的代理优化
创建一个代表该区域六峰驼背函数的问题结构-2.1 <= x(i) <= 2.1
.将120设置为函数求值的最大次数。
rng默认的%用于重现性Objconstr = @(x)(4*x(:,1)。^2 - 2.1*x(:,1)。^4 + x(:,1).^6/3...+ x(:,1).*x(:,2) - 4*x(:,2)。^2 + 4*x(:,2).^4);选项= optimoptions(“surrogateopt”,“MaxFunctionEvaluations”, 120);问题=结构(“目标”objconstr,...“磅”[-2.1, -2.1],...乌兰巴托的[2.1, 2.1],...“选项”选项,...“规划求解”,“surrogateopt”);X = surrogateopt(问题)
surrogateopt停止,因为它超过了'options. maxfunctionevaluments '设置的函数求值限制。
x =1×2-0.0892 - 0.7129
返回代理优化目标函数值
对六驼峰驼背函数进行最小化处理,同时返回最小值点和目标函数值。设置选项以抑制所有其他显示。
rng默认的%用于重现性Objconstr = @(x)(4*x(:,1)。^2 - 2.1*x(:,1)。^4 + x(:,1).^6/3...+ x(:,1).*x(:,2) - 4*x(:,2)。^2 + 4*x(:,2).^4);Lb = [-2.1,-2.1];Ub = -lb;选项= optimoptions(“surrogateopt”,“显示”,“关闭”,“PlotFcn”[]);[x,fval] = surrogateopt(objconstr,lb,ub,options)
x =1×20.0893 - -0.7130
Fval = -1.0316
监控代理优化过程
通过请求来监视代理优化过程surrogateopt
返回更多输出。使用“surrogateoptplot”
图的功能。要了解“surrogateoptplot”
情节,看到解释surrogateoptplot.
rng默认的%用于重现性Objconstr = @(x)(4*x(:,1)。^2 - 2.1*x(:,1)。^4 + x(:,1).^6/3...+ x(:,1).*x(:,2) - 4*x(:,2)。^2 + 4*x(:,2).^4);Lb = [-2.1,-2.1];Ub = -lb;选项= optimoptions(“surrogateopt”,“PlotFcn”,“surrogateoptplot”);[x,fval,exitflag,output] = objconstr,lb,ub,options)
surrogateopt停止,因为它超过了'options. maxfunctionevaluments '设置的函数求值限制。
x =1×20.0893 - -0.7130
Fval = -1.0316
Exitflag = 0
输出=带有字段的结构:Elapsedtime: 33.6659 funccount: 200 constrviolation: 0 ineq: [1x0 double] rngstate: [1x1 struct] message: 'surrogateopt已停止,因为它超过了由…
重新启动代理优化
通过设置一个很小的函数计算最大值来快速完成代理优化。要为重新启动优化的可能性做好准备,请请求所有求解器输出。
rng默认的%用于重现性Objconstr = @(x)(4*x(:,1)。^2 - 2.1*x(:,1)。^4 + x(:,1).^6/3...+ x(:,1).*x(:,2) - 4*x(:,2)。^2 + 4*x(:,2).^4);Lb = [-2.1,-2.1];Ub = -lb;选项= optimoptions(“surrogateopt”,“MaxFunctionEvaluations”, 20);[x,fval,exitflag,output,trials] = surrogateopt(objconstr,lb,ub,options);
surrogateopt停止,因为它超过了'options. maxfunctionevaluments '设置的函数求值限制。
从以前的评估点开始,优化另外20个函数评估。
选项。InitialPoints =试验;[x,fval,exitflag,output,trials] = surrogateopt(objconstr,lb,ub,options);
surrogateopt停止,因为它超过了'options. maxfunctionevaluments '设置的函数求值限制。
将这40个函数的评价图与文献中的函数评价图进行比较全局极小值的搜索,您会发现重新启动代理优化与连续运行求解器是不同的。
从检查点文件重新启动代理优化
要启用由于崩溃或任何其他原因而重新启动代理优化,请设置检查点文件名。
Opts = optimoptions(“surrogateopt”,“CheckpointFile”,“checkfile.mat”);
创建一个优化问题,并设置少量的函数计算。
rng默认的%用于重现性Objconstr = @(x)(4*x(:,1)。^2 - 2.1*x(:,1)。^4 + x(:,1).^6/3...+ x(:,1).*x(:,2) - 4*x(:,2)。^2 + 4*x(:,2).^4);Lb = [-2.1,-2.1];Ub = -lb;选择。米axFunctionEvaluations = 30; [x,fval,exitflag,output] = surrogateopt(objconstr,lb,ub,opts)
Surrogateopt停止,因为它超过了'options. maxfunctionevaluments '设置的函数计算限制。
x =1×20.0067 - -0.7343
Fval = -0.9986
Exitflag = 0
输出=带有字段的结构:elapsedtime: 28.7221 funccount: 30 constrtion: 0 ineq: [1×0 double] rngstate: [1×1 struct] message: 'Surrogateopt停止,因为它超过了由'options.MaxFunctionEvaluations'设置的函数评估限制。'
设置选项使用100个函数计算(这意味着比已经完成的计算多70个)并重新启动优化。
选择。米axFunctionEvaluations = 100; [x2,fval2,exitflag2,output2] = surrogateopt(“checkfile.mat”选择)
Surrogateopt停止,因为它超过了'options. maxfunctionevaluments '设置的函数计算限制。
x2 =1×20.0895 - -0.7130
Fval2 = -1.0316
Exitflag2 = 0
output2 =带有字段的结构:elapsedtime: 159.2411 funccount: 100 constrtion: 0 ineq: [1×0 double] rngstate: [1×1 struct] message: 'Surrogateopt停止,因为它超过了由'options.MaxFunctionEvaluations'设置的函数评估限制。'
输入参数
objconstr
- - - - - -目标函数与非线性约束
函数处理|函数名
目标函数和非线性约束,指定为函数句柄或函数名。objconstr
接受一个参数x
,在那里x
通常是一个行向量。然而,当矢量化
选择是真正的
,x
是一个包含选项。BatchUpdateInterval
行;每一行表示一个要计算的点。objconstr
返回以下之一:
真正的标量
Fval = objconstr(x)
.结构。如果结构包含字段
Fval
,然后surrogateopt
尽量减少objconstr (x)。Fval
.如果结构包含字段Ineq
,然后surrogateopt
试图使该字段的所有组成部分为非正的:objconstr (x)。Ineq <= 0
对于所有的条目。objconstr (x)
必须包括Fval
或Ineq
Fields,或者两者都有。surrogateopt
忽略其他字段。
当矢量化
选择是真正的
和BatchUpdateInterval
大于1,objconstr
的每一行x
并返回以下其中之一:
真正的向量
Fval = objconstr(x)
.fval
列向量是选项。BatchUpdateInterval
时,最后一个函数求值的项(或更少)BatchUpdateInterval
不能平均分配MaxFunctionEvaluations
).具有向量项的结构。如果结构包含字段
Fval
,然后surrogateopt
尽量减少objconstr (x)。Fval
,objconstr (x)。Fval
是长度向量吗BatchUpdateInterval
(或更少)。如果结构包含字段Ineq
,然后surrogateopt
试图使该字段的所有组成部分为非正的:objconstr (x)。Ineq <= 0
对于所有的项,和objconstr (x)。Ineq
包含最多至BatchUpdateInterval
条目。
目标函数objconstr。Fval
可为空([]
,在这种情况下surrogateopt
试图找到一个满足所有约束条件的点。看到解决可行性问题.
有关使用非线性约束的示例,请参见解决非线性约束问题,非线性约束下的代理优化,解决可行性问题.的转换信息surrogateopt
结构语法和其他求解器,请参见packfcn
而且在代理选择形式和其他求解器形式之间转换非线性约束有关使用向量化批处理计算的示例,请参见面向定制并行仿真的矢量代理优化.
数据类型:function_handle
|字符
|字符串
intcon
- - - - - -整型变量
正整数向量
整数变量,指定为一个正整数向量,其值来自1
问题变量的数量。中的每个值intcon
代表一个x
整数值的组件。
例子:要指定偶数项x
是否为整数值intcon
来据nvar 2:2:
.
数据类型:双
一个
- - - - - -线性不等式约束
真正的矩阵
线性不等式约束,指定为实矩阵。一个
是一个米
——- - - - - -据nvar
矩阵,米
是不等式的个数。
一个
编码米
线性不等式
A*x <= b
,
在哪里x
列向量是据nvar
变量x (:)
,b
列向量是米
元素。
例如,指定
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30日
给出以下约束条件:
A = [1,2;3,4;5,6];B = [10;20;30];
例子:若要指定控制变量的和为1或更少,请给出约束条件A = ones(1,N)
而且B = 1
.
数据类型:双
b
- - - - - -线性不等式约束
真正的向量
线性不等式约束,指定为实向量。b
是一个米
元素向量相关的一个
矩阵。如果你通过了b
作为行向量,求解器内部转换b
到列向量b (:)
.
b
编码米
线性不等式
A*x <= b
,
在哪里x
列向量是N
变量x (:)
,一个
矩阵的大小米
——- - - - - -N
.
例如,指定
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30日
给出以下约束条件:
A = [1,2;3,4;5,6];B = [10;20;30];
例子:若要指定控制变量的和为1或更少,请给出约束条件A = ones(1,N)
而且B = 1
.
数据类型:双
Aeq
- - - - - -线性等式约束
真正的矩阵
线性等式约束,指定为实矩阵。Aeq
是一个我
——- - - - - -据nvar
矩阵,我
是等式的个数。
Aeq
编码我
线性等式
Aeq*x = beq
,
在哪里x
列向量是N
变量x (:)
,说真的
列向量是我
元素。
例如,指定
x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,
给出以下约束条件:
Aeq = [1,2,3;2,4,1];Beq = [10;20];
例子:要指定控制变量的和为1,请给出约束条件Aeq = ones(1,N)
而且Beq = 1
.
数据类型:双
说真的
- - - - - -线性等式约束
真正的向量
线性等式约束,指定为实向量。说真的
是一个我
元素向量相关的Aeq
矩阵。如果你通过了说真的
作为行向量,求解器内部转换说真的
到列向量说真的(:)
.
说真的
编码我
线性等式
Aeq*x = beq
,
在哪里x
列向量是N
变量x (:)
,Aeq
矩阵的大小微地震
——- - - - - -N
.
例如,指定
x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,
给出以下约束条件:
Aeq = [1,2,3;2,4,1];Beq = [10;20];
例子:要指定控制变量的和为1,请给出约束条件Aeq = ones(1,N)
而且Beq = 1
.
数据类型:双
选项
- - - - - -选项
的输出optimoptions
选项,指定为的输出optimoptions
.
有关更多信息,请参见代理优化选项.
选项 | 描述 | 值 |
---|---|---|
BatchUpdateInterval |
|
正整数。默认是 |
CheckpointFile |
检查点和重新启动优化的文件名。该文件具有 检查点需要时间。对于那些计算时间较短的函数,这种开销尤其明显。 |
文件名或文件路径,以字符串或字符数组形式给出。如果指定的文件名没有路径, |
ConstraintTolerance |
非线性约束的公差,用所有非线性约束函数值的最大值来衡量,其中正值表示违规。这种公差是绝对的(不是相对的)公差;看到公差和停止标准. | 积极的标量。默认是1 e - 3 . |
显示 |
命令行返回的显示级别。 |
|
InitialPoints |
初始点求解。 | 初始点的矩阵,每一行是一个点。或者,一个带场的结构
看到算法控制.默认是 |
MaxFunctionEvaluations |
目标函数评估的最大值,一个停止准则。 |
正整数。默认是马克斯(200年,50 *据nvar) ,在那里据nvar 是问题变量的个数。 |
MaxTime |
以秒为单位的最大运行时间。实际运行时间可超过MaxTime 因为评估一个目标函数需要时间,或者因为并行处理延迟。 |
积极的标量。默认是正 . |
MinSampleDistance |
自适应采样器产生的试验点之间的最小距离。看到代理优化算法. | 积极的标量。默认是1 e-6 . |
MinSurrogatePoints |
在代理创建阶段开始时要创建的最小随机样本点数量。看到代理优化算法. 当 |
至少为整数据nvar + 1。默认是2 *据nvar max(20日) ,在那里据nvar 是问题变量的个数。 |
ObjectiveLimit |
公差对目标函数值的影响。如果可行点的计算目标函数值小于ObjectiveLimit ,算法停止。 |
双标量值。默认是负 . |
OutputFcn |
输出函数报告求解程序的进度或停止求解程序。看到输出函数. | 函数名、函数句柄或函数名或句柄的单元格数组。默认是[] . |
PlotFcn |
绘图功能显示求解程序的进度或停止求解程序。看到绘制函数. |
函数名、函数句柄或函数名或句柄的单元格数组。内置的plot函数是:
|
UseParallel |
布尔值,指示是否并行计算目标函数值。 不能同时指定两者 |
布尔。默认是假 .有关算法的详细信息,请参见并行代理选择算法. |
UseVectorized |
布尔值,指示是否按批量大小计算目标函数值 不能同时指定两者 |
布尔。默认是假 .示例请参见面向定制并行仿真的矢量代理优化. |
例子:options = optimoptions('surrogateopt','Display','iter','UseParallel',true)
问题
- - - - - -问题的结构
结构
问题结构,指定为具有以下字段的结构:
客观的
-目标函数,可以包括非线性约束,指定为函数名或函数句柄磅
的下界x
乌兰巴托
-的上限x
解算器
- - - - - -“surrogateopt”
Aineq
-用于线性不等式约束的矩阵(可选)bineq
-线性不等式约束向量(可选)Aeq
-矩阵线性等式约束(可选)说真的
-线性等式约束的向量(可选)选项
-使用创建的选项optimoptions
rngstate
重置随机数生成器状态的字段(可选)intcon
-指定整型值的字段x
组件(可选)
请注意
这些问题
必须填写以下字段:客观的
,磅
,乌兰巴托
,解算器
,选项
.
数据类型:结构体
checkpointFile
- - - - - -检查点文件的路径
字符串|特征向量
检查点文件的路径,指定为字符串或字符向量。检查点文件具有.mat
扩展。如果指定的文件名没有路径,surrogateopt
使用当前文件夹中的检查点文件。
检查点文件存储用于恢复优化的优化状态。surrogateopt
在每次函数计算时更新检查点文件,因此即使在surrogateopt
过早地停止。示例请参见从检查点文件重新启动代理优化.
surrogateopt
当检查点文件具有有效的CheckpointFile
选择。
从检查点文件恢复时,可以更改一些选项。看到选择
.
检查点文件中的数据在.mat
格式。为了避免错误或其他意想不到的结果,在调用之前不要修改数据surrogateopt
.
警告
不要重新开始surrogateopt
从用不同的MATLAB创建的检查点文件®的版本。surrogateopt
可能抛出错误或给出不一致的结果。
例子:“checkfile.mat”
例子:“C: \ Program Files \ MATLAB \ docs \ checkpointNov2019.mat”
数据类型:字符
|字符串
选择
- - - - - -从检查点文件恢复的选项
[]
(默认)|optimoptions
从一个受限的集合中的选项
从检查点文件恢复优化的选项,指定为optimoptions
可以从原始选项中更改的选项(来自受限集)。您可以更改的选项有:
BatchUpdateInterval
CheckpointFile
显示
MaxFunctionEvaluations
MaxTime
MinSurrogatePoints
ObjectiveLimit
OutputFcn
PlotFcn
UseParallel
UseVectorized
例子:opts = optimoptions(options,' maxfunctionassessments ',400);
输出参数
exitflag
- - -原因surrogateopt
停止
整数
原因surrogateopt
停止,返回为该表中描述的整数值之一。
出口标志 | 描述 |
---|---|
|
由于下列原因之一,问题具有唯一可行解:
|
3. |
可行点找到了。求解器停止,因为找到的新的可行点太少,无法继续。 |
|
目标函数值小于 |
|
函数求值的次数超过 |
|
优化由输出函数或图函数结束。 |
|
由于下列情况之一,没有找到可行点:
|
输出
—优化流程信息
结构
算法
surrogateopt
重复执行以下步骤:
通过抽样创建一组试验点
MinSurrogatePoints
取边界内的随机点,并在试验点处求目标函数值。通过插值一个径向基函数通过所有随机试验点来创建目标函数的代理模型。
创建一个价值函数,赋予替代项一些权重,赋予到试验点的距离一些权重。通过在当前点(自上次代理重置以来找到的最佳点)周围的区域中随机抽样价值函数来定位价值函数的一个小值。使用这个点,称为自适应点,作为一个新的试验点。
评估自适应点上的目标,并基于此点及其值更新代理。如果目标函数值远远低于之前观察到的最佳(最低)值,则计算为“成功”,否则计算为“失败”。
如果之前出现了三次成功,则向上更新样本分布的离散度
马克斯(据nvar, 5)
失败,据nvar
是维数。向下更新色散马克斯(据nvar, 5)
失败发生在三次成功之前。继续步骤3,直到所有的试点都在
MinSampleDistance
的值。这时,通过丢弃代理上的所有自适应点来重置代理,重置规模,然后回到第1步进行创建MinSurrogatePoints
新的随机试验点用于评价。
详情请参见代理优化算法.
选择功能
应用程序
的优化Live Editor任务提供了一个可视化的界面surrogateopt
.
扩展功能
自动平行支撑
通过使用并行计算工具箱™自动并行运行计算来加速代码。
若要并行运行,请设置“UseParallel”
选项真正的
.
Options = optimoptions('
solvername
”、“UseParallel’,真的)
有关更多信息,请参见如何在全局优化工具箱中使用并行处理.
版本历史
在R2018b中介绍
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。