替代优化全球最小化耗时的客观函数
代理选择
是一个全局求解器,用于求解耗时的目标函数。
代理选择
试图解决表格的问题
解算器在多个维度中搜索实值目标函数的全局最小值,受边界、可选线性约束、可选整数约束和可选非线性不等式约束的约束。代理选择
最适合于需要很长时间计算的目标函数。目标函数可以是非光滑的。这个解算器要求所有变量有有限的界。求解器可以选择维护检查点文件,以支持从崩溃或部分执行中恢复,或在满足停止条件后继续优化。目标函数F(x)可以为空([]
), 在这种情况下代理选择
试图找到一个满足所有约束条件的点。
在区域内寻找六峰驼背函数的最小值-2.1<=x(i)<=2.1
. 该函数有两个全局极小值和目标函数值-1.0316284……
以及4个具有较高目标函数值的局部最小值。
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.MaxFunctionEvaluations'设置的函数求值限制。
X =1×20.0895 -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)^2 + (x(2)-1/3)^2;
称呼代理选择
每个组件的下界为0,上界为2/3。
lb = [0,0];UB = [2/3,2 / 3];[x,fval,ExitFlag] = TrustogateOpt(@ Objconstr,LB,UB)
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
X =1×20.6541 0.4279
fval = 0.1197
exitflag = 0
检查解处非线性约束的值。
disp (objconstr (x) .Ineq)
7.0843e-04
约束函数值接近零,表示约束在解决方案处有效。
求最小值ps_example
二维变量的函数x
其第一个分量限制为整数值,且所有分量都介于–5和5之间。
intcon = 1;rng默认的%的再现性objconstr = @ps_example;磅= (5,5);乌兰巴托= (5,5);x = surrogateopt (objconstr磅,乌兰巴托,intcon)
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
X =1×2-5.0000 0.0001
最小化该区域的六峰驼背功能-2.1<=x(i)<=2.1
. 该函数有两个全局极小值和目标函数值-1.0316284……
以及4个具有较高目标函数值的局部最小值。
要系统地搜索区域,请使用常规网格的起点。将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);磅= [-2.1,-2.1];乌兰巴托=磅;[XPTS,YPTS] = MeshGrid(-3:3);startpls = [xpts(:),YPTS(:)];选择= optimoptions (“surrogateopt”,“PlotFcn”,“surrogateoptplot”,...“InitialPoints”startpts,“MaxFunctionEvaluations”, 120);x = surrogateopt (objconstr、磅、乌兰巴托、期权)
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
X =1×2-0.0904 - 0.7127
代理选择
最小化受线性不等式约束的非线性目标函数。最小化200次函数计算。
objconstr = @multirosenbrock;据nvar = 6;磅= 2 *的(据nvar, 1);乌兰巴托=磅;intcon = [];据nvar = 1 (1);b = 3;Aeq = [];说真的= [];选择= optimoptions (“surrogateopt”,“MaxFunctionEvaluations”, 200);[溶胶,fval exitflag、输出]=...代理选项(objconstr、lb、ub、intcon、A、b、Aeq、beq、选项)
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
索尔=1×60.1404 0.0203 0.3112 0.1215 0.1271 0.0329
fval = 2.0644
exitflag = 0
输出=带字段的结构:Elapsedtime:19.0752 Funccount:200 ConnabRimation:0 Ineq:[1x0 Double] RngState:[1x1 struct]消息:'TrustogateOpt停止,因为它超过了...'所设置的函数评估限制
创建一个问题结构,代表该区域的六驼驼背函数-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;选项=options(“surrogateopt”,“MaxFunctionEvaluations”,120);问题=结构(“目标”objconstr,...“磅”,[-2.1,-2.1],...'UB',[2.1,2.1],...“选项”,选项,...“规划求解”,“surrogateopt”);x = trustogateopt(问题)
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
X =1×20.0895 -0.7130
最小化六驼峰驼背函数并返回最小化点和目标函数值。设置选项以抑制所有其他显示。
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);磅= [-2.1,-2.1];乌兰巴托=磅;选择= optimoptions (“surrogateopt”,“显示”,“关”,“PlotFcn”,[]); [x,fval]=代理选项(objconstr,lb,ub,选项)
X =1×20.0895 -0.7130
fval = -1.0316.
通过请求来监视代理优化过程代理选择
返回更多输出。使用“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);磅= [-2.1,-2.1];乌兰巴托=磅;选择= optimoptions (“surrogateopt”,“PlotFcn”,“surrogateoptplot”);[x, fval exitflag、输出]= surrogateopt (objconstr、磅、乌兰巴托、期权)
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
X =1×20.0895 -0.7130
fval = -1.0316.
exitflag = 0
输出=带字段的结构:Elapsedtime:45.0007 Funccount:200 Cankerviolation:0 Ineq:[1x0 Double] RngState:[1x1 struct]消息:'Trustogateopt停止,因为它超过了...'设定的函数评估限制
通过设置一个很小的函数求值的最大数目,快速结束代理优化。为了准备重新启动优化的可能性,请求所有解算器输出。
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);磅= [-2.1,-2.1];乌兰巴托=磅;选择= optimoptions (“surrogateopt”,“MaxFunctionEvaluations”, 20);[x, fval exitflag、输出试验]= surrogateopt (objconstr、磅、乌兰巴托、期权);
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
从先前评估的点开始,再优化20次功能评估。
选项。初始点=审判; [x,fval,exitflag,output,trials] = surrogateopt(objconstr,lb,ub,options);
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
通过将这40个功能评估的曲线图与搜索全局最小值,您可以看到,重新启动代理优化与让求解器连续运行是不同的。
要启用由于崩溃或任何其他原因而重新启动代理优化,请设置检查点文件名。
选择= 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;opts.MaxFunctionEvaluations=30;[x,fval,exitflag,output]=代理选项(objconstr,lb,ub,opts)
Trustogateopt停止,因为它超出了“选项”QuaxFunctioneValuations'设置的函数评估限制。
X =1×20.0067 -0.7343
fval = -0.9986.
exitflag = 0
输出=带字段的结构:[1×0 double] rngstate: [1×1 struct] message: 'Surrogateopt停止,因为它超过了↵'options. maxfunctionevalues '设置的函数求值限制。'
设置选项以使用100个函数评估(这意味着比已经完成的多70个),然后重新启动优化。
opts.maxfunctionevaluations = 100;[X2,FVAL2,EXITFLAG2,OUTPUT2] = TREROGATEOPT('checkfile.mat',选择)
Trustogateopt停止,因为它超出了“选项”QuaxFunctioneValuations'设置的函数评估限制。
x2 =1×20.0895 -0.7130
fval2=-1.0316
exitflag2 = 0
output2 =带字段的结构:[1×0 double] rngstate: [1×1 struct] message: 'Surrogateopt停止,因为它超过了↵'options. maxfunctionevalues '设置的函数求值限制。'
objconstr
—目标函数与非线性约束目标函数和非线性约束,指定为函数句柄或函数名称。objconstr
接受单个参数x
,在那里x
通常是行矢量。但是,当矢量化
选择是真的
,x
是一个包含options.batchupdateinterval.
行;每行代表一个要计算的点。objconstr
返回以下其中一项:
实标量fval=objconstr(x)
.
结构。如果结构包含该字段Fval
,然后代理选择
尽量减少objconstr(x).Fval
。如果结构包含该字段Ineq
,然后代理选择
尝试使该字段非呈现的所有组件:objconstr(x).ineq <= 0
所有条目。objconstr(x)
必须包括Fval
或者Ineq
字段,或两者都有。代理选择
忽略了其他领域。
当矢量化
选择是真的
和BatchUpdateInterval
大于1,objconstr
在每一行工作x
并返回以下内容之一:
实向量fval=objconstr(x)
.fval
列向量是options.batchupdateinterval.
条目(或更少用于最后函数评估BatchUpdateInterval
并不是平均分配最大函数求值
).
具有向量项的结构。如果结构包含该字段Fval
,然后代理选择
尽量减少objconstr(x).Fval
, 和objconstr(x).Fval
向量的长度是多少BatchUpdateInterval
(或更少)。如果结构包含该字段Ineq
,然后代理选择
尝试使该字段非呈现的所有组件:objconstr(x).ineq <= 0
对于所有的条目,并且objconstr(x).Ineq
包含多达BatchUpdateInterval
参赛作品。
目标函数objconstr.Fval
可为空([]
), 在这种情况下代理选择
试图找到一个满足所有约束条件的点。看到解决可行性问题.
有关使用非线性约束的示例,请参见求解非线性约束问题,具有非线性约束的代理优化, 和解决可行性问题.的转换信息代理选择
结构语法和其他解算器,请参见packfcn
和转换Trustogateopt表单和其他求解器表格之间的非线性约束有关使用向量化批计算的示例,请参见定制并行仿真的矢量化代理优化.
数据类型:功能手柄
|字符
|字符串
Intcon.
—整数变量整数变量,指定为具有以下值的正整数向量1.
到问题变量的数量。每个值在Intcon.
代表一个x
整数值组件。
例子:指定偶数条目x
是整数值,Intcon.
到据nvar 2:2:
.
数据类型:双
A.
—线性不平等约束线性不等式约束,指定为实矩阵。A.
是一个M
——- - - - - -据nvar
矩阵,M
是不等式的个数。
A.
编码M
线性不等式
A * x < =
,
在哪里x
是栏矢量据nvar
变量x (:)
, 和B
列向量是M
元素。
例如,指定
x1.+ 2x2.≤ 10
3.x1.+ 4x2.≤ 20
5.x1.+ 6x2.≤30日
给这些约束:
a = [1,2; 3,4; 5,6];B = [10; 20; 30];
例子:要指定控制变量的和为1或更小,请给出约束条件一个= 1 (1,N)
和b=1
.
数据类型:双
B
—线性不平等约束线性不等式约束,指定为实向量。B
是一个M
- 与...相关的矢量A.
矩阵,如果你通过的话B
作为行向量,求解器内部转换B
到列向量b (:)
.
B
编码M
线性不等式
A * x < =
,
在哪里x
是栏矢量N
变量x (:)
, 和A.
是大小的矩阵M
——- - - - - -N
.
例如,指定
x1.+ 2x2.≤ 10
3.x1.+ 4x2.≤ 20
5.x1.+ 6x2.≤30日
给这些约束:
a = [1,2; 3,4; 5,6];B = [10; 20; 30];
例子:要指定控制变量的和为1或更小,请给出约束条件一个= 1 (1,N)
和b=1
.
数据类型:双
Aeq
—线性等式约束线性等式约束,指定为实矩阵。Aeq
是一个我
——- - - - - -据nvar
矩阵,我
是平等的数量。
Aeq
编码我
线性等式
Aeq*x=beq
,
在哪里x
是栏矢量N
变量x (:)
, 和说真的
列向量是我
元素。
例如,指定
x1.+ 2x2.+ 3x3.= 10
2.x1.+ 4x2.+x3.= 20,
给这些约束:
Aeq=[1,2,3;2,4,1];beq=[10;20];
例子:要指定控制变量的和为1,请给出约束条件Aeq=一(1,N)
和beq=1
.
数据类型:双
说真的
—线性等式约束线性等式约束,指定为实向量。说真的
是一个我
- 与...相关的矢量Aeq
矩阵,如果你通过的话说真的
作为行向量,求解器内部转换说真的
到列向量说真的(:)
.
说真的
编码我
线性等式
Aeq*x=beq
,
在哪里x
是栏矢量N
变量x (:)
, 和Aeq
是大小的矩阵MEQ.
——- - - - - -N
.
例如,指定
x1.+ 2x2.+ 3x3.= 10
2.x1.+ 4x2.+x3.= 20,
给这些约束:
Aeq=[1,2,3;2,4,1];beq=[10;20];
例子:要指定控制变量的和为1,请给出约束条件Aeq=一(1,N)
和beq=1
.
数据类型:双
选项
—选项最佳选择
选项,指定为的输出最佳选择
.
有关更多信息,请参见代理优化选项.
选项 | 描述 | 价值观 |
---|---|---|
BatchUpdateInterval |
|
正整数。默认是 |
检查点文件 |
用于检查点和重新启动优化的文件名。该文件包含 检查点是需要时间的。这种开销对于那些需要很少时间计算的函数来说尤其明显。 |
文件名或文件路径,以字符串或字符数组形式给出。如果指定的文件名没有路径, |
ConstraintTolerance |
非线性约束公差,测量为所有非线性约束函数值的最大值,正值表示违反。该公差为绝对(非相对)公差;看见公差和停止标准. | 正标量。默认是1e-3 . |
展示 |
在命令行返回的显示级别。 |
|
InitialPoints |
解算器的初始点。 | 初始点矩阵,每一行是一个点。或者,一个有场的结构
看到算法控制.默认是 |
最大函数求值 |
目标函数计算的最大次数,一个停止准则。 |
正整数。默认是最大值(200,50*nvar) ,在那里nvar 为问题变量的数量。 |
MaxTime |
最大运行时间(秒)。实际运行时间可以超过MaxTime 由于评估目标函数所需的时间或并行处理延迟。 |
正标量。默认是Inf . |
MinSampleDistance |
自适应采样器产生的试验点之间的最小距离。看到代理优化算法. | 正标量。默认是1e-3 . |
minsurrogatePoints. |
在代理项创建阶段开始时要创建的最小随机采样点数。看见代理优化算法. 当 |
至少是整数nvar + 1。默认是最大(20,2 * NVAR) ,在那里nvar 为问题变量的数量。 |
客观限度 |
目标函数值的容差。如果可行点的计算目标函数值小于客观限度 ,算法停止。 |
标量值的两倍。默认是负 . |
输出FCN |
输出函数报告求解程序的进度或停止求解程序。看到输出函数. | 函数名、函数句柄或函数名或句柄的单元格数组。默认是[] . |
绘图仪 |
打印函数以显示解算器进度或停止解算器。请参阅绘图函数. |
函数名、函数句柄或函数名或句柄的单元格数组。内置绘图功能是:
|
UseParallel |
指示是否并行计算目标函数值的布尔值。 不能同时指定两者 |
布尔。默认是假 .对于算法详细信息,请参阅并行Trustogateopt算法. |
UseVectorized |
布尔值,指示是否批量计算目标函数的大小 不能同时指定两者 |
布尔。默认是假 。有关示例,请参阅定制并行仿真的矢量化代理优化. |
例子:options=options('subrogateopt'、'Display'、'iter'、'UseParallel',true)
问题
—问题结构问题结构,指定为具有以下字段的结构:
客观的
-目标函数,可以包含非线性约束,指定为函数名或函数句柄
磅
的下界x
UB.
-的上界x
解算器
—“surrogateopt”
艾奈克
-线性不等式约束矩阵(可选)
Bineq.
线性不等式约束向量(可选)
Aeq
-线性等式约束矩阵(可选)
说真的
-线性等式约束向量(可选)
选项
-使用最佳选择
rngstate.
-重置随机数生成器状态的字段(可选)
Intcon.
-指定整数值的字段x
组件(可选)
请注意
这些问题
需要字段:客观的
,磅
,UB.
,解算器
, 和选项
.
数据类型:结构
检查点文件
—检查点文件路径检查点文件的路径,指定为字符串或字符向量。检查点文件具有。垫
扩展。如果你指定了一个没有路径的文件名,代理选择
使用当前文件夹中的检查点文件。
检查点文件存储用于恢复优化的优化状态。代理选择
在每次函数求值时更新检查点文件,这样即使在代理选择
过早停止。有关示例,请参阅从检查点文件重新启动代理优化.
代理选择
当检查点文件具有有效的检查点文件
选择。
当从检查点文件恢复时,可以更改一些选项。看到选择
.
检查点文件中的数据在。垫
总体安排为避免错误或其他意外结果,请在调用之前不要修改数据代理选择
.
警告
不恢复代理选择
从使用不同MATLAB创建的检查点文件®版本代理选择
可能会抛出错误或给出不一致的结果。
例子:'checkfile.mat'
例子:“C: \ Program Files \ MATLAB \ docs \ checkpointNov2019.mat”
数据类型:字符
|字符串
选择
—从检查点文件恢复的选项[]
(默认)|最佳选择
来自受限集的选项用于从检查点文件恢复优化的选项,指定为最佳选择
可以从原始选项更改的选项(来自受限集)。您可以更改的选项有:
BatchUpdateInterval
检查点文件
展示
最大函数求值
MaxTime
minsurrogatePoints.
客观限度
输出FCN
绘图仪
UseParallel
UseVectorized
例子:opts = Optimoptions(选项,'MaxFunctionEvaluations',400);
出口滞后
- 原因代理选择
停了下来原因代理选择
已停止,作为此表中描述的整数值之一返回。
出口标志 | 描述 |
---|---|
|
由于以下之一,问题具有独特的可行解决方案:
|
3. |
找到可行点。解算器停止,因为找到的新可行点太少,无法继续。 |
|
目标函数值小于 |
|
函数求值的次数超过 |
|
优化由输出函数或绘图函数终止。 |
|
由于以下原因之一,未找到可行点:
|
输出
- 有关优化过程的信息关于优化过程的信息,作为带有以下字段的结构返回:
代理选择
重复执行以下步骤:
通过抽样创建一组试验点minsurrogatePoints.
在边界内的随机点,并在试验点处计算目标函数。
通过对所有随机试验点插值径向基函数,创建目标函数的替代模型。
创建一个优点函数,为代理项赋予一些权重,并为到试验点的距离赋予一些权重。通过在在任点(自最后一个代理重置以来找到的最佳点)周围的区域中随机取样价值函数来定位价值函数的一个小值。使用这个点,称为自适应点,作为一个新的试验点。
在自适应点评估目标,并基于该点及其值更新代理项。如果目标函数值远远低于之前观察到的最佳(最低)值,则计算“成功”,否则计算“失败”。
如果之前三次成功,则向上更新样本分布的离散度马克斯(据nvar, 5)
失败,在哪里nvar
是维数。更新向下散布如果马克斯(据nvar, 5)
失败先于成功。
从步骤3继续,直到所有试验点都在MinSampleDistance
计算的点数。此时,通过丢弃代理的所有自适应点来重置代理,重置比例,然后回到第1步创建minsurrogatePoints.
新的随机测试点用于评估。
有关详细信息,请参见代理优化算法.
这个优化实时编辑器任务为代理选择
.
要并行运行,请设置“UseParallel”
选项真的
.
选择= optimoptions ('
solvername
','使用adplallel',true)
有关更多信息,请参见如何在全局优化工具箱中使用并行处理.
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。