surrogateopt

对于耗时的目标函数的全局极小替代优化

描述

surrogateopt功能是耗时的目标函数的全局解算器。

surrogateopt尝试解决表单中的问题

x f ( x ) 这样 { x UB c ( x ) 0 x 整数, INTCON

该求解器在多维空间中搜索实值目标函数的全局最小值,满足有界约束、可选整数约束和可选非线性不等式约束。surrogateopt最适合于需要很长的时间来评估目标函数。目标函数可以非光滑。求解器需要对所有变量的有限范围。求解器可以选择保持一个检查点文件符合停机条件后,能够从崩溃或部分执行,或优化持续复苏。

例子

x= surrogateopt (objconstr,,UB)搜索一个全局的最小值objconstr(x)的在该区域lb <= x <= ub。如果objconstr(x)的返回结构,然后surrogateopt搜索最少objconstr .Fval (x),受objconstr(x)的.Ineq <= 0

请注意

传递额外的参数(优化工具箱)解释了如何额外的参数,传递给目标函数,如果必要的。

例子

x= surrogateopt (objconstr,,UB,INTCON)要求变量中列出INTCON取整数值。

例子

x= surrogateopt (___,选项)修改使用该选项搜索过程选项。指定选项按照前面任何语法输入参数组合。

例子

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

例子

x= surrogateopt (checkpointFile)继续运行从国家优化保存的检查点文件。看到与保点工作文件

例子

x= surrogateopt (checkpointFile,选择)继续运行在状态中保存的检查点文件的优化,并替换选项checkpointFile与那些在选择。看到检查点文件

例子

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

例子

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

例子

(x,fval,exitflag,输出,试用] = 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);磅= [-2.1,-2.1];乌兰巴托=磅;x = surrogateopt (objconstr磅,乌兰巴托)

Surrogateopt停止,因为它超过了“options.MaxFunctionEvaluations”功能评价极限集。
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)^ 2 +(X(2)-1/3)^ 2  - (1/3)^ 2;

呼叫surrogateopt使用0下界和每个组件上的2/3的上限。

磅= (0,0);乌兰巴托= (2/3,2/3);[x, fval exitflag] = surrogateopt (@objconstr磅,乌兰巴托)

Surrogateopt停止,因为它超过了“options.MaxFunctionEvaluations”功能评价极限集。
X =1×20.6541 - 0.4277
FVAL = 0.1197
exitflag = 0

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

DISP(objconstr(x)的.Ineq)
6.7195e-04

约束函数值是接近零,表示该约束是在溶液活性。

找出最小的ps_example二维变量的函数x它的第一个组件被限制为整数值,所有的组件都在-5和5之间。

INTCON = 1;rng默认%用于重现objconstr = @ps_example;磅= [-5,-5];UB = [5,5];X = surrogateopt(objconstr,LB,UB,INTCON)

Surrogateopt停止,因为它超过了“options.MaxFunctionEvaluations”功能评价极限集。
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);磅= [-2.1,-2.1];乌兰巴托=磅;[xpt材料,Ypts] = meshgrid(三3);startpts = [xpt材料(:),Ypts (:));选择= optimoptions (“surrogateopt”,“PlotFcn”,'surrogateoptplot',...“InitialPoints”,startpts,“MaxFunctionEvaluations”,120);x = surrogateopt (objconstr、磅、乌兰巴托、期权)

Surrogateopt停止,因为它超过了“options.MaxFunctionEvaluations”功能评价极限集。
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.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] = surrogateopt(objconstr,LB,UB,选项)
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);磅= [-2.1,-2.1];乌兰巴托=磅;选择= optimoptions (“surrogateopt”,“PlotFcn”,'surrogateoptplot');[X,FVAL,exitflag,输出] = surrogateopt(objconstr,LB,UB,选项)

Surrogateopt停止,因为它超过了“options.MaxFunctionEvaluations”功能评价极限集。
X =1×20.0895 - -0.7130
FVAL = -1.0316
exitflag = 0
输出=结构体字段:elapsedtime:46.9309 funccount:200 constrviolation:0 ineq:[1X0双] rngstate:1x1的结构]消息: '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);磅= [-2.1,-2.1];乌兰巴托=磅;选择= optimoptions (“surrogateopt”,“MaxFunctionEvaluations”,20);[x, fval exitflag、输出试验]= surrogateopt (objconstr、磅、乌兰巴托、期权);

Surrogateopt停止,因为它超过了“options.MaxFunctionEvaluations”功能评价极限集。

从之前评估的点开始,优化另外20个功能评估。

options.InitialPoints =试验;[x, fval exitflag、输出试验]= surrogateopt (objconstr、磅、乌兰巴托、期权);

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);磅= [-2.1,-2.1];乌兰巴托=磅;opts.MaxFunctionEvaluations = 30;[X,FVAL,exitflag,输出] = surrogateopt(objconstr,LB,UB,OPTS)

Surrogateopt停止,因为它超过了“options.MaxFunctionEvaluations”功能评价极限集。
X =1×20.0067 - -0.7343
FVAL = -0.9986
exitflag = 0
输出=结构体字段:elapsedtime:11.7528 funccount:30 constrviolation:0 ineq:[1×0双] rngstate:[1×1结构]消息: 'Surrogateopt停止,因为它超过了↵'options.MaxFunctionEvaluations功能评价极限集'”

设置选项使用100分功能的评价(这意味着70多家已经完成),然后重新启动优化。

opts.MaxFunctionEvaluations = 100;[X2,fval2,exitflag2,输出2] = surrogateopt('checkfile.mat',OPTS)

Surrogateopt停止,因为它超过了“options.MaxFunctionEvaluations”功能评价极限集。
x2 =1×20.0895 - -0.7130
fval2 = -1.0316
exitflag2 = 0
输出2 =结构体字段:elapsedtime: 64.8767 funccount: 100 constrviolation: 0 ineq:[1×0双]rngstate: [1×1 struct]消息:“Surrogateopt停止,因为它超过了函数评估限制由↵options.MaxFunctionEvaluations’。”

输入参数

全部折叠

目标函数和非线性约束,指定为函数句柄或函数名。objconstr只接受一个参数x,其中x是一个行向量。objconstr返回下列内容之一:

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

  • 结构体。如果结构包含字段Fval,然后surrogateopt试图最小化objconstr .Fval (x)。如果结构包含字段Ineq,然后surrogateopt试图使该字段的所有组件非正:objconstr(x)的.Ineq <= 0所有条目。objconstr(x)的必须包括Fval要么Ineq字段,或两者兼而有之。surrogateopt忽略了其他领域。

有关使用非线性约束的示例,请参见解决非线性约束问题,带有非线性约束的代理优化,解决问题的可行性。有关之间转换信息surrogateopt结构语法和其他求解程序,参见packfcn转换surrogateopt表格及其他求解形式之间的非线性约束

数据类型:function_handle|烧焦|

下界,指定为有限实数向量。表示下界元素xUB。的长度UB必须等于变量的数objconstr接受。

警告

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

请注意

surrogateopt允许相等的项UB。对于每一个INTCON, 你必须有小区(磅(ⅰ))<=地板(UB(i))的。看到建设代孕细节

例:磅= [0;-20;4)手段X(1)≥0,x (2)≥-20,x (3)≥4

数据类型:

上界,指定为有限实向量。UB表示上限逐元素在xUB。的长度UB必须等于变量的数objconstr接受。

警告

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

请注意

surrogateopt允许相等的项UB。对于每一个INTCON, 你必须有小区(磅(ⅰ))<=地板(UB(i))的。看到建设代孕细节

例:UB = [10; -20; 4]手段X(1)≤10,x (2)≤-20,x (3)≤4

数据类型:

整型变量,指定为正整数的向量,其值来自1问题变量的数量。每个值在INTCON代表一个x整数值的分量。

例:以指定其中的偶数项x是整数值,INTCON2:2:nvars

数据类型:

选项,指定为的输出optimoptions

欲了解更多信息,请参阅代孕优化选项

选项 描述
CheckpointFile

文件名设置检查点并重新启动优化。该文件具有。垫数据类型。看到与保点工作文件

检查点需要时间。这个开销是,否则需要一点时间来评估职能尤其引人注目。

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

ConstraintTolerance 公差非线性限制,作为最大所有非线性约束函数值,其中正值表示违反了测定。该公差是一个绝对(而不是相对)容差;看到公差和停止条件(优化工具箱)。 正标量。默认是1E-3
显示

显示器的水平返回在命令行。

  • '最后'(默认) - 在迭代结束退出消息。

  • “关”或同等“没有”——没有显示。

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

InitialPoints 求解的初始点。

矩阵初始点,其中每行是一个点。或者,与现场结构X,它的值是初始点的矩阵,并且这些可选字段:

  • Fval含在初始点的目标函数的值的向量

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

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

MaxFunctionEvaluations 目标函数评估的最大数量,停止准则。 正整数。默认是马克斯(200年,50 *据nvar),其中NVAR问题是变量的数目。
MAXTIME 最大运行时间(秒)。实际运行时间可超过MAXTIME因为需要时间来评估一个目标函数或因为并行处理延迟。 正标量。默认是天道酬勤
MinSampleDistance 由自适应采样器产生的试验点之间的最小距离。看到代理优化算法 正标量。默认是1E-3
MinSurrogatePoints 随机采样点的最低数量,创造以替代创作阶段的开始。看到代理优化算法 整数至少NVAR+ 1.默认是MAX(20,2 * NVAR),其中NVAR问题是变量的数目。
ObjectiveLimit 目标函数值的公差。如果计算出的目标函数值小于ObjectiveLimit,算法停止。 标量值的两倍。默认是
OutputFcn 输出功能报告解决程序的进度或停止解决程序。看到输出功能 功能名称,功能手柄,或函数名或手柄的电池阵列。默认是[]
PlotFcn

绘图功能,以显示求解进度或停止求解。看到绘图功能

功能名称,功能手柄,或函数名或手柄的电池阵列。内置情节的功能是:

  • “optimplotfvalconstr”(默认值)-绘制最佳可行目标函数值的直线图。如果没有目标函数,则将最大非线性约束违逆作图为直线作图。

    • 该图显示不可行点为红色和可行点为蓝色。

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

  • 'optimplotfval'- 绘制发现作为线图的最佳目标函数值。

  • 'optimplotx'- 绘制发现条形图的最佳解决方案。

  • 'surrogateoptplot'-绘制每次迭代的目标函数值,显示算法的哪个阶段产生该值,以及在该阶段和总体上找到的最佳值。看到解读surrogateoptplot

UseParallel 布尔值,指示是否并行计算目标函数值。 布尔。默认是。对于算法的详细信息,请参阅并行surrogateopt算法

例:选择= optimoptions (‘surrogateopt’,‘显示’,‘iter’,‘UseParallel’,真的)

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

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

  • -下界x

  • UB- 上界x

  • 求解- - - - - -“surrogateopt”

  • 选项- 选项与创建optimoptions

  • rngstate-可选字段来重置随机数生成器的状态

  • INTCON- 可选字段指定的整数值x组件

请注意

在各领域问题需要除rngstateINTCON

数据类型:结构体

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

检查点文件存储优化的状态恢复的优化。surrogateopt在更新每个功能评估检查点文件,这样你就可以,即使恢复优化surrogateopt过早地停止。例如,参见从检查点文件重新启动代孕优化

surrogateopt创建检查点文件时,它有一个有效的CheckpointFile选项。

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

在一个检查点文件中的数据是在。垫格式。为了避免错误或其他意外的结果,称之前没有修改数据surrogateopt

警告

不恢复surrogateopt从用另一个MATLAB创建的检查点文件®版。surrogateopt可以抛出一个错误,或者给不一致的结果。

例:'checkfile.mat'

例:“C:\ Program Files文件\ MATLAB \文档\ checkpointNov2019.mat”

数据类型:烧焦|

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

  • CheckpointFile

  • 显示

  • MaxFunctionEvaluations

  • MAXTIME

  • MinSurrogatePoints

  • ObjectiveLimit

  • OutputFcn

  • PlotFcn

  • UseParallel

例:OPTS = optimoptions(选项 'MaxFunctionEvaluations',400);

输出参数

全部折叠

解决方案,返回作为一个真正的载体。x具有长度相同的UB

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

  • 什么时候objconstr返回一个标,fval是标量objconstr(x)的

  • 什么时候objconstr返回结构,fval是价值objconstr .Fval (x),目标函数值为x(如果该值存在)。

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

出口标志 描述

10

所有的上界UB等于下界surrogateopt返回可行点而不执行任何优化。

1

目标函数值小于options.ObjectiveLimit。此出口标志优先于出口标志10当适用。

0

功能评价的数量超过options.MaxFunctionEvaluations或经过时间超过options.MaxTime。如果问题具有非线性不等式,所述溶液是可行的。

1

该优化通过输出功能或绘图功能终止。

2

没有可行点发现,由于下列情况之一:

  • 一个下界磅(ⅰ)超过相应的上限UB(ⅰ)。在这种情况下,surrogateopt返回X = []fval = []

  • 磅= UB和点是不可行的。在这种情况下,x =磅,.Fval fval = objconstr (x)

  • 磅< =乌兰巴托没有可行的解决方案。在这种情况下,x最不可行的点是什么.Fval fval = objconstr (x)

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

  • funccount-功能评估的总数。

  • elapsedtime- 跑步时间,以秒为解算器,通过测量抽搐/toc

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

  • constrviolation- 最大约束冲突,如果有的话。constrviolation = max (output.ineq)

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

  • rngstate- 就在算法开始前的MATLAB随机数生成器的状态。使用此字段重现你的结果。看到结果重现,讨论如何使用rngstate遗传算法

点评估,返回与这些领域的结构:

  • X- 矩阵与nvars列,其中nvars要么UB。每一行的X代表一个点由评价surrogateopt

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

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

试用结构具有与。相同的形式options.InitialPoints结构。因此,可以通过传递试用结构作为InitialPoints选项。

算法

surrogateopt反复执行下列步骤操作:

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

  2. 通过在所有随机试验点内插径向基函数,建立目标函数的代理模型。

  3. 创建一个价值函数,让一些体重来替代一些重量从审判点的距离。通过随机抽样在围绕现任点的区域中的评价函数(自上次复位替代最佳点发现)找到评价函数的值小。利用这一点,叫做自适应点,作为一个新的试验点。

  4. 评估目的的适应性点,并更新基于这一点,其价值的替代品。计数“成功”,如果目标函数值是比以前的最佳(最低)值观察到足够低,和计数“失败”,否则。

  5. 更新样本分布的向上如果前3次成功发生分散MAX(NVAR,5)失败,其中NVAR为维数。更新向下的弥散MAX(NVAR,5)失败发生在三次成功之前。

  6. 从第3步开始,直到所有的测试点都在范围内MinSampleDistance求值点的集合。此时,通过丢弃代理中的所有自适应点来重置代理,重置比例,然后回到步骤1来创建MinSurrogatePoints新的随机试验点进行评估。

有关详细信息,请参见代理优化算法

扩展功能

介绍了R2018b