主要内容

surrogateopt

耗时目标函数全局最小化的代理优化

描述

surrogateopt函数是耗时的目标函数的全局求解器。

surrogateopt试图解决形式上的问题

最小值 x f x 这样 x 乌兰巴托 c x 0 x 整数, intcon

该求解器在多个维度上搜索实值目标函数的全局最小值,受限于边界、可选整数约束和可选非线性不等式约束。surrogateopt最适合于需要很长时间来评估的目标函数。目标函数可以是非光滑的。求解器要求所有变量的边界都是有限的。求解器可以有选择地维护检查点文件,以支持从崩溃或部分执行中恢复,或在满足停止条件后继续优化。

例子

x= surrogateopt (objconstr乌兰巴托的全局最小值搜索objconstr (x)在这个地区Lb <= x <= ub.如果objconstr (x)然后返回一个结构surrogateopt搜索最小值objconstr (x)。Fval,以objconstr (x)。Ineq <= 0

请注意

传递额外参数解释如何在必要时向目标函数传递额外的参数。

例子

x= surrogateopt (objconstr乌兰巴托intcon中列出的变量intcon取整数值。

例子

x= surrogateopt (___选项中的选项修改搜索过程选项.指定选项在前面语法中的任何输入参数组合之后。

例子

x= surrogateopt (问题搜索的最小值问题中描述的结构问题

例子

x= surrogateopt (checkpointFile从保存的检查点文件中的状态继续运行优化。看到使用检查点文件

例子

x= surrogateopt (checkpointFile选择继续从已保存检查点文件中的状态运行优化,并替换checkpointFile有了这些选择.看到检查点文件

例子

xfval= surrogateopt(___还返回由求解器找到的目标函数的最佳(最小)值,使用前面语法中的任何输入参数组合。

例子

xfvalexitflag输出= surrogateopt(___同样的回报exitflag,一个描述求解器停止原因的整数,和输出,描述优化过程的结构。

例子

xfvalexitflag输出试用= surrogateopt(___还返回一个包含所有已评估点和这些点的目标函数值的结构。

例子

全部折叠

在该区域搜索最小的六峰驼背函数-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.0895 - -0.7130

求Rosenbrock函数的最小值

1 0 0 x 2 - x 1 2 2 + 1 - x 1 2

在非线性约束下,解位于点[1/3,1/3]周围半径为1/3的圆盘上:

x 1 - 1 / 3. 2 + x 2 - 1 / 3. 2 1 / 3. 2

为此,编写一个函数objconstr(x)返回结构字段中Rosenbrock函数的值Fval,并返回表单中的非线性约束值 c x 0 在结构领域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.6541 - 0.4277
Fval = 0.1197
Exitflag = 0

检查解处的非线性约束值。

disp (objconstr (x) .Ineq)
6.7195 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.0005

使该地区的六驼峰驼背功能最小化-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×2-0.0904 - 0.7127

创建一个代表该区域六峰驼背函数的问题结构-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×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);Lb = [-2.1,-2.1];Ub = -lb;选项= optimoptions(“surrogateopt”“显示”“关闭”“PlotFcn”[]);[x,fval] = surrogateopt(objconstr,lb,ub,options)
x =1×20.0895 - -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.0895 - -0.7130
Fval = -1.0316
Exitflag = 0
输出=带有字段的结构:elapsedtime: 52.9362 funccount: 200 constrviolation: 0 ineq: [1x0 double] rngstate: [1x1 struct] message: '代理选择停止,因为它超过了函数计算限制设置…'

通过设置一个很小的函数计算最大值来快速完成代理优化。要为重新启动优化的可能性做好准备,请请求所有求解器输出。

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;选择。maxfunctionassessments = 30;[x,fval,exitflag,output] = 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个)并重新启动优化。

选择。MaxFunctionEvaluations = 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接受一个参数x,在那里x是行向量。objconstr返回以下之一:

  • 真正的标量Fval = objconstr(x)

  • 结构。如果结构包含字段Fval,然后surrogateopt尽量减少objconstr (x)。Fval.如果结构包含字段Ineq,然后surrogateopt试图使该字段的所有组成部分为非正的:objconstr (x)。Ineq <= 0对于所有的条目。objconstr (x)必须包括FvalIneqFields,或者两者都有。surrogateopt忽略其他字段。

有关使用非线性约束的示例,请参见解决非线性约束问题非线性约束下的代理优化,解决可行性问题.的转换信息surrogateopt结构语法和其他求解器,请参见packfcn而且在代理选择形式和其他求解器形式之间转换非线性约束

数据类型:function_handle|字符|字符串

下界,指定为有限实向量。中的元素的下界x乌兰巴托.的长度而且乌兰巴托必须等于变量的个数objconstr接受。

谨慎

虽然对于大多数求解器是可选的,是否需要输入surrogateopt

请注意

surrogateopt允许相等的条目而且乌兰巴托.为每一个intcon,你一定有Ceil (lb(i)) <=地板(ub(i)).看到构造代理详细信息

例子:Lb = [0;-20;4]意味着X(1)≥0X(2)≥-20X(3)≥4

数据类型:

上界,指定为有限实向量。乌兰巴托中元素的上界x乌兰巴托.的长度而且乌兰巴托必须等于变量的个数objconstr接受。

谨慎

虽然乌兰巴托对于大多数求解器是可选的,乌兰巴托是否需要输入surrogateopt

请注意

surrogateopt允许相等的条目而且乌兰巴托.为每一个intcon,你一定有Ceil (lb(i)) <=地板(ub(i)).看到构造代理详细信息

例子:Ub = [10;-20;4]意味着X(1)≤10X(2)≤-20X(3)≤4

数据类型:

整数变量,指定为一个正整数向量,其值来自1问题变量的数量。中的每个值intcon代表一个x整数值的组件。

例子:要指定偶数项x是否为整数值intcon据nvar 2:2:

数据类型:

选项,指定为的输出optimoptions

有关更多信息,请参见代理优化选项

选项 描述
CheckpointFile

检查点和重新启动优化的文件名。该文件具有.mat数据类型。看到使用检查点文件

检查点需要时间。对于那些计算时间较短的函数,这种开销尤其明显。

文件名或文件路径,以字符串或字符数组形式给出。如果指定的文件名没有路径,surrogateopt将检查点文件保存在当前文件夹中。

ConstraintTolerance 非线性约束的公差,用所有非线性约束函数值的最大值来衡量,其中正值表示违规。这种公差是绝对的(不是相对的)公差;看到公差和停止标准 积极的标量。默认是1 e - 3
显示

命令行返回的显示级别。

  • “最后一次”(默认)—在迭代结束时退出消息。

  • “关闭”或者是同等的“没有”-不显示。

  • “通路”-迭代显示;看到命令行显示

InitialPoints 初始点求解。

初始点的矩阵,每一行是一个点。或者,一个带场的结构X,其值为初始点的矩阵,以及以下可选字段:

  • Fval,一个包含目标函数在初始点的值的向量

  • Ineq,一个包含非线性不等式约束值的矩阵

看到算法控制.默认是[]

MaxFunctionEvaluations 目标函数评估的最大值,一个停止准则。 正整数。默认是马克斯(200年,50 *据nvar),在那里据nvar是问题变量的个数。
MaxTime 以秒为单位的最大运行时间。实际运行时间可超过MaxTime因为评估一个目标函数需要时间,或者因为并行处理延迟。 积极的标量。默认是
MinSampleDistance 自适应采样器产生的试验点之间的最小距离。看到代理优化算法 积极的标量。默认是1 e - 3
MinSurrogatePoints 在代理创建阶段开始时要创建的最小随机样本点数量。看到代理优化算法 至少为整数据nvar+ 1。默认是2 *据nvar max(20日),在那里据nvar是问题变量的个数。
ObjectiveLimit 公差对目标函数值的影响。如果计算出的目标函数值小于ObjectiveLimit,算法停止。 双标量值。默认是
OutputFcn 输出函数报告求解程序的进度或停止求解程序。看到输出函数 函数名、函数句柄或函数名或句柄的单元格数组。默认是[]
PlotFcn

绘图功能显示求解程序的进度或停止求解程序。看到绘制函数

函数名、函数句柄或函数名或句柄的单元格数组。内置的plot函数是:

  • “optimplotfvalconstr”(默认)-将找到的最佳可行目标函数值绘制为线形图。如果没有目标函数,将最大的非线性约束违例用折线图表示。

    • 图中红色表示不可行点,蓝色表示可行点。

    • 如果没有目标函数,图标题显示可行解的数量。万博 尤文图斯

  • “optimplotfval”-将找到的最佳目标函数值绘制成折线图。

  • “optimplotx”-将找到的最佳解决方案绘制成柱状图。

  • “surrogateoptplot”-绘制每次迭代的目标函数值,显示算法的哪个阶段产生的值,以及该阶段和整体发现的最佳值。看到解释surrogateoptplot

UseParallel 布尔值,指示是否并行计算目标函数值。 布尔。默认是.有关算法的详细信息,请参见并行代理选择算法

例子:options = optimoptions('surrogateopt','Display','iter','UseParallel',true)

问题结构,指定为具有以下字段的结构:

  • 客观的-目标函数,可以包括非线性约束,指定为函数名或函数句柄

  • 的下界x

  • 乌兰巴托-的上限x

  • 解算器- - - - - -“surrogateopt”

  • 选项-使用创建的选项optimoptions

  • rngstate—可选字段,用于重置随机数生成器的状态

  • intcon—可选字段,指定整型值x组件

请注意

的所有字段问题都是必需的rngstate而且intcon

数据类型:结构体

检查点文件的路径,指定为字符串或字符向量。检查点文件具有.mat扩展。如果指定的文件名没有路径,surrogateopt使用当前文件夹中的检查点文件。

检查点文件存储用于恢复优化的优化状态。surrogateopt在每次函数计算时更新检查点文件,因此即使在surrogateopt过早地停止。示例请参见从检查点文件重新启动代理优化

surrogateopt当检查点文件具有有效的CheckpointFile选择。

从检查点文件恢复时,可以更改一些选项。看到选择

检查点文件中的数据在.mat格式。为了避免错误或其他意想不到的结果,在调用之前不要修改数据surrogateopt

警告

不要重新开始surrogateopt从用不同的MATLAB创建的检查点文件®的版本。surrogateopt可能抛出错误或给出不一致的结果。

例子:“checkfile.mat”

例子:“C: \ Program Files \ MATLAB \ docs \ checkpointNov2019.mat”

数据类型:字符|字符串

从检查点文件恢复优化的选项,指定为optimoptions可以从原始选项中更改的选项(来自受限集)。您可以更改的选项有:

  • CheckpointFile

  • 显示

  • MaxFunctionEvaluations

  • MaxTime

  • MinSurrogatePoints

  • ObjectiveLimit

  • OutputFcn

  • PlotFcn

  • UseParallel

例子:opts = optimoptions(options,' maxfunctionassessments ',400);

输出参数

全部折叠

解,作为实向量返回。x长度和而且乌兰巴托

目标函数在解处的值,作为实数返回。

  • objconstr返回一个标量,fval是标量objconstr (x)

  • objconstr返回一个结构,fval是值objconstr (x)。Fval,目标函数值在x(如果该值存在)。

原因surrogateopt停止,返回为该表中描述的整数值之一。

出口标志 描述

10

所有上界乌兰巴托等于下界吗surrogateopt返回可行点,不执行任何优化。

1

目标函数值小于选项。ObjectiveLimit.此退出标志优先于退出标志10当两者都适用时。

0

函数求值的次数超过选项。MaxFunctionEvaluations或运行时间超过选项。MaxTime.如果问题存在非线性不等式,则解是可行的。

-1

优化由输出函数或图函数结束。

-2

由于下列情况之一,没有找到可行点:

  • 下限磅(我)超过相应的上限乌兰巴托(我).在这种情况下,surrogateopt返回X = []而且Fval = []

  • Lb = ub重点是是不可行的。在这种情况下,X = lb,Fval = objconstr(x)。Fval

  • Lb <= ub并且没有找到可行的解。在这种情况下,x这是最不可行的,而且Fval = objconstr(x)。Fval

关于优化过程的信息,作为包含以下字段的结构返回:

  • funccount-函数评估总数。

  • elapsedtime-运行求解器的时间,以秒为单位,以抽搐/toc

  • 消息—算法停止的原因。

  • constrviolation-最大限制违反,如果有。constrviolate = max(output.ineq)

  • ineq-解处的不等式约束值x.如果objconstr然后返回一个结构ineqobjconstr (x)。Ineq.否则,ineq是空的。

  • rngstate-算法开始前的MATLAB随机数生成器状态。使用此字段可重新生成结果。看到复制的结果,讨论使用rngstate遗传算法

计算的点,作为具有以下字段的结构返回:

  • X-矩阵据nvar列,据nvar的长度乌兰巴托.每一行X表示一个点的值surrogateopt

  • Fval-列向量,其中每一项都是对应行的目标函数值X

  • Ineq的矩阵,每一行表示对应行的约束函数值X

试用结构的形式与选项。InitialPoints结构。因此,您可以通过传递试用结构作为InitialPoints选择。

算法

surrogateopt重复执行以下步骤:

  1. 通过抽样创建一组试验点MinSurrogatePoints取边界内的随机点,并在试验点处求目标函数值。

  2. 通过插值一个径向基函数通过所有随机试验点来创建目标函数的代理模型。

  3. 创建一个价值函数,赋予替代项一些权重,赋予到试验点的距离一些权重。通过在当前点(自上次代理重置以来找到的最佳点)周围的区域中随机抽样价值函数来定位价值函数的一个小值。使用这个点,称为自适应点,作为一个新的试验点。

  4. 评估自适应点上的目标,并基于此点及其值更新代理。如果目标函数值远远低于之前观察到的最佳(最低)值,则计算为“成功”,否则计算为“失败”。

  5. 如果之前出现了三次成功,则向上更新样本分布的离散度马克斯(据nvar, 5)失败,据nvar是维数。向下更新色散马克斯(据nvar, 5)失败发生在三次成功之前。

  6. 继续步骤3,直到所有的试点都在MinSampleDistance的值。这时,通过丢弃代理上的所有自适应点来重置代理,重置规模,然后回到第1步进行创建MinSurrogatePoints新的随机试验点用于评价。

详情请参见代理优化算法

选择功能

应用程序

优化Live Editor任务提供了一个可视化的界面surrogateopt

扩展功能

在R2018b中介绍