Main Content

本页采用了机器翻译。点击此处可查看英文原文。

surrogateopt

用于全局最小化耗时目标函数的替代优化

说明

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

surrogateopt 尝试解决以下形式的问题

minxf(x) such that {lbxubA·xbAeq·x=beqc(x)0xi integer, iintcon.

求解器在多个维度中搜索实值目标函数的全局最小值,并受边界、可选线性约束、可选整数约束和可选非线性不等式约束。surrogateopt 最适合需要很长时间才能评估的目标函数。目标函数可以是非平滑的。求解器要求所有变量都有有限的边界。求解器可以选择维护检查点文件,以便从崩溃或部分执行中恢复,或者在满足停止条件后继续优化。目标函数 f(x)可以为空([]),在这种情况下 surrogateopt 会尝试找到一个满足所有约束的点。

示例

x = surrogateopt(objconstr,lb,ub) 在区域 lb <= x <= ub 中寻找 objconstr(x) 的全局最小值。如果 objconstr(x) 返回一个结构体,则 surrogateopt 会搜索最少 objconstr(x).Fval,并以 objconstr(x).Ineq <= 0 为准。

注意

传递额外参数 解释了如何在必要时将额外参数传递给目标函数。

示例

x = surrogateopt(objconstr,lb,ub,intcon) 要求 intcon 中列出的变量取整数值。

示例

x = surrogateopt(objconstr,lb,ub,intcon,A,b,Aeq,beq) 要求解 x 满足不等式 A*x <= b 和等式 Aeq*x = beq。如果不存在不等式,则设置 A = []b = []。类似地,如果不存在等式,则设置 Aeq = []beq = []

示例

x = surrogateopt(___,options) 使用 options 中的选项修改搜索过程。在前面的语法中,在任意输入参量组合后指定 options

示例

x = surrogateopt(problem) 搜索 problem 的最小值,该结构体在 problem 中描述。

示例

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

示例

x = surrogateopt(checkpointFile,opts) 继续从已保存的检查点文件中的状态运行优化,并用 opts 中的选项替换 checkpointFile 中的选项。请参阅 检查点文件

示例

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

示例

[x,fval,exitflag,output] = surrogateopt(___) 还返回 exitflag,一个描述求解器停止的原因的整数,以及 output,一个描述优化过程的结构体。

示例

[x,fval,exitflag,output,trials] = surrogateopt(___) 还返回一个包含所有评估点及其点处的目标函数值的结构体。

示例

全部折叠

在区域 -2.1 <= x(i) <= 2.1 中寻找六峰驼峰函数的最小值。该函数有两个全局极小值,目标函数值为 -1.0316284...,以及四个局部极小值,目标函数值更高。

rng default % For reproducibility
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 = surrogateopt(objconstr,lb,ub)

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

    0.0898   -0.7131

找到罗森布洛克函数的最小值

100(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),它在结构体字段 Fval 中返回罗森布洛克函数的值,并在结构体字段 Ineq 中以 c(x)0 形式返回非线性约束值。

type objconstr
function 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;

在每个分量上使用 0 的下界和 2/3 的上界来调用 surrogateopt

lb = [0,0];
ub = [2/3,2/3];
[x,fval,exitflag] = surrogateopt(@objconstr,lb,ub)

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

    0.6546    0.4277

fval = 0.1194
exitflag = 0

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

disp(objconstr(x).Ineq)
   9.9334e-04

约束函数值接近于零,表明约束在解有效。

对于二维变量 x,求出 ps_example 函数的最小值,该变量的第一个分量限制为整数值,并且所有分量都在 -5 到 5 之间。

intcon = 1;
rng default % For reproducibility
objconstr = @ps_example;
lb = [-5,-5];
ub = [5,5];
x = surrogateopt(objconstr,lb,ub,intcon)

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

   -5.0000    0.0004

最小化区域 -2.1 <= x(i) <= 2.1 中的六峰驼峰函数。该函数有两个全局极小值,目标函数值为 -1.0316284...,以及四个局部极小值,目标函数值更高。

要系统地搜索该区域,请使用规则的起点网格。将 120 设置为函数计算的最大次数。使用 'surrogateoptplot' 绘图函数。要了解 'surrogateoptplot' 图,请参阅 解释 surrogateoptplot

rng default % For reproducibility
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);
startpts = [Xpts(:),Ypts(:)];
options = optimoptions('surrogateopt','PlotFcn','surrogateoptplot',...
    'InitialPoints',startpts,'MaxFunctionEvaluations',120);
x = surrogateopt(objconstr,lb,ub,options)

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

    0.0900   -0.7125

最小化受线性不等式约束的非线性目标函数。最小化 200 个函数计算。

objconstr = @multirosenbrock;
nvar = 6;
lb = -2*ones(nvar,1);
ub = -lb;
intcon = [];
A = ones(1,nvar);
b = 3;
Aeq = [];
beq = [];
options = optimoptions('surrogateopt','MaxFunctionEvaluations',200);
[sol,fval,exitflag,output] = ...
    surrogateopt(objconstr,lb,ub,intcon,A,b,Aeq,beq,options)

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
sol = 1×6

    0.2072    0.0437    0.1360    0.0066    0.1196   -0.0002

fval = 2.1853
exitflag = 0
output = struct with fields:
        elapsedtime: 21.8621
          funccount: 200
    constrviolation: 0
               ineq: [1x0 double]
           rngstate: [1x1 struct]
            message: 'surrogateopt stopped because it exceeded the function evaluation limit set by ...'

创建一个表示区域 -2.1 <= x(i) <= 2.1 中的六峰驼峰函数的问题结构体。将 120 设置为函数计算的最大次数。

rng default % For reproducibility
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 = optimoptions('surrogateopt','MaxFunctionEvaluations',120);
problem = struct('objective',objconstr,...
    'lb',[-2.1,-2.1],...
    'ub',[2.1,2.1],...
    'options',options,...
    'solver','surrogateopt');
x = surrogateopt(problem)

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

    0.0898   -0.7131

最小化六峰驼峰函数并返回最小化点和目标函数值。设置选项以抑制所有其他显示。

rng default % For reproducibility
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;
options = optimoptions('surrogateopt','Display','off','PlotFcn',[]);
[x,fval] = surrogateopt(objconstr,lb,ub,options)
x = 1×2

    0.0898   -0.7131

fval = -1.0316

通过请求 surrogateopt 返回更多输出来监控替代优化过程。使用 'surrogateoptplot' 绘图函数。要了解 'surrogateoptplot' 图,请参阅 解释 surrogateoptplot

rng default % For reproducibility
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;
options = optimoptions('surrogateopt','PlotFcn','surrogateoptplot');
[x,fval,exitflag,output] = surrogateopt(objconstr,lb,ub,options)

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

    0.0898   -0.7131

fval = -1.0316
exitflag = 0
output = struct with fields:
        elapsedtime: 16.0643
          funccount: 200
    constrviolation: 0
               ineq: [1x0 double]
           rngstate: [1x1 struct]
            message: 'surrogateopt stopped because it exceeded the function evaluation limit set by ...'

通过设置较小的函数计算最大次数来快速完成替代优化。为了准备重新开始优化的可能性,请求所有求解器输出。

rng default % For reproducibility
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;
options = optimoptions('surrogateopt','MaxFunctionEvaluations',20);
[x,fval,exitflag,output,trials] = surrogateopt(objconstr,lb,ub,options);

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.

从之前评估的点开始,优化另外 20 个函数计算。

options.InitialPoints = trials;
[x,fval,exitflag,output,trials] = surrogateopt(objconstr,lb,ub,options);

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.

通过将这 40 个函数计算的图与 搜索全局最小值 中的图进行比较,您会发现重新启动替代优化与求解器连续运行并不相同。

为了能够由于崩溃或任何其他原因重新启动替代优化,请设置检查点文件名。

opts = optimoptions('surrogateopt','CheckpointFile','checkfile.mat');

创建一个优化问题并设置少量的函数计算。

rng default % For reproducibility
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] = surrogateopt(objconstr,lb,ub,opts)

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

    0.0067   -0.7343

fval = -0.9986
exitflag = 0
output = struct with fields:
        elapsedtime: 28.7221
          funccount: 30
    constrviolation: 0
               ineq: [1×0 double]
           rngstate: [1×1 struct]
            message: 'Surrogateopt stopped because it exceeded the function evaluation limit set by ↵'options.MaxFunctionEvaluations'.'

设置选项以使用 100 个函数计算(这意味着比已经完成的多 70 个)并重新启动优化。

opts.MaxFunctionEvaluations = 100;
[x2,fval2,exitflag2,output2] = surrogateopt('checkfile.mat',opts)

Surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x2 = 1×2

    0.0895   -0.7130

fval2 = -1.0316
exitflag2 = 0
output2 = struct with fields:
        elapsedtime: 159.2411
          funccount: 100
    constrviolation: 0
               ineq: [1×0 double]
           rngstate: [1×1 struct]
            message: 'Surrogateopt stopped because it exceeded the function evaluation limit set by ↵'options.MaxFunctionEvaluations'.'

输入参数

全部折叠

目标函数和非线性约束,指定为函数句柄或函数名称。objconstr 接受单个参量 x,其中 x 通常是行向量。但是,当 Vectorized 选项为 true 时,x 是一个包含 options.BatchUpdateInterval 行的矩阵;每行代表一个要评估的点。objconstr 返回以下之一:

  • 实数标量 fval = objconstr(x)

  • 结构体。如果结构体包含字段 Fval,则 surrogateopt 会尝试最小化 objconstr(x).Fval。如果结构体包含字段 Ineq,则 surrogateopt 会尝试使该字段的所有分量都为非正数:所有条目均为 objconstr(x).Ineq <= 0objconstr(x) 必须包含 FvalIneq 字段,或者同时包含两者。surrogateopt 会忽略其他字段。

Vectorized 选项为 trueBatchUpdateInterval 大于一时,objconstrx 的每一行进行操作并返回下列之一:

  • 实数向量 fval = objconstr(x)fval 是一个具有 options.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在 surrogateopt 形式和其他求解器形式之间转换非线性约束;有关使用向量化批量评估的示例,请参阅 用于自定义并行模拟的向量化替代优化

数据类型: function_handle | char | string

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

小心

虽然 lb 对于大多数求解器来说是可选的,但 lb 对于 surrogateopt 来说是必需的输入。

注意

surrogateopt 允许在 lbub 中有相等的条目。对于 intcon 中的每个 i,必须有 ceil(lb(i)) <= floor(ub(i))。请参阅 构建替代细节

示例: lb = [0;-20;4] 表示 x(1) ≥ 0x(2) ≥ -20x(3) ≥ 4

数据类型: double

上界,指定为有限实数向量。ub 表示 lb x ub 中元素的上界。lbub 的长度必须等于 objconstr 接受的变量数量。

小心

虽然 ub 对于大多数求解器来说是可选的,但 ub 对于 surrogateopt 来说是必需的输入。

注意

surrogateopt 允许在 lbub 中有相等的条目。对于 intcon 中的每个 i,必须有 ceil(lb(i)) <= floor(ub(i))。请参阅 构建替代细节

示例: ub = [10;-20;4] 表示 x(1) ≤ 10x(2) ≤ -20x(3) ≤ 4

数据类型: double

整数变量,指定为正整数向量,其值从 1 到问题变量的数量。intcon 中的每个值代表一个整数值的 x 分量。

示例: 要指定 x 中的偶数项为整数值,请将 intcon 设置为 2:2:nvars

数据类型: double

线性不等式约束,指定为实矩阵。A 是一个 M×nvars 矩阵,其中 M 是不等式的数量。

A 以如下形式编写 M 个线性不等式

A*x <= b

其中,x 是由 nvars 个变量组成的列向量 x(:)b 是具有 M 个元素的列向量。

例如,要指定

x1 +2x2 ≤10
3x1 +4x2 ≤20
5x1 +6x2 ≤30,

提供以下约束:

A = [1,2;3,4;5,6];
b = [10;20;30];

示例: 要指定控制变量的总和为 1 或更小,请给出约束 A = ones(1,N)b = 1

数据类型: double

线性不等式约束,指定为实数向量。b 是与 A 矩阵相关的包含 M 个元素的向量。如果将 b 作为行向量传递,求解器会在内部将 b 转换为列向量 b(:)

b 以如下形式编写 M 个线性不等式

A*x <= b

其中,x 是由 N 个变量组成的列向量 x(:)A 是大小为 M×N 的矩阵。

例如,要指定

x1 +2x2 ≤10
3x1 +4x2 ≤20
5x1 +6x2 ≤30,

提供以下约束:

A = [1,2;3,4;5,6];
b = [10;20;30];

示例: 要指定控制变量的总和为 1 或更小,请给出约束 A = ones(1,N)b = 1

数据类型: double

线性等式约束,指定为实矩阵。AeqMe×nvars 矩阵,其中 Me 是等式的数量。

Aeq 以如下形式编写 Me 个线性等式

Aeq*x = beq

其中,x 是由 N 个变量组成的列向量 x(:)beq 是具有 Me 个元素的列向量。

例如,要指定

x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,

提供以下约束:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

示例: 要指定控制变量的总和为 1,请给出约束 Aeq = ones(1,N)beq = 1

数据类型: double

线性等式约束,指定为实数向量。beq 是与 Aeq 矩阵相关的包含 Me 个元素的向量。如果将 beq 作为行向量传递,求解器会在内部将 beq 转换为列向量 beq(:)

beq 以如下形式编写 Me 个线性等式

Aeq*x = beq

其中,x 是由 N 个变量组成的列向量 x(:)Aeq 是大小为 Meq×N 的矩阵。

例如,要指定

x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,

提供以下约束:

Aeq = [1,2,3;2,4,1];
beq = [10;20];

示例: 要指定控制变量的总和为 1,请给出约束 Aeq = ones(1,N)beq = 1

数据类型: double

选项,指定为 optimoptions 的输出。

有关详细信息,请参阅替代优化选项

选项描述
BatchUpdateInterval
  • 替代更新之前的函数计算次数。

  • 向量化评估中要传递的点数。当 UseVectorizedtrue 时,surrogateopt 传递一个大小为 BatchUpdateInterval×nvar 的矩阵,其中 nvar 是问题变量的数量。矩阵的每一行代表一个评估点。每批评估完成后,输出函数和绘图函数都会更新。

正整数。默认值是 1

CheckpointFile

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

检查点需要时间。对于那些只需很少时间进行评估的函数来说,这种开销尤其明显。

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

ConstraintTolerance非线性约束的容差,以所有非线性约束函数值的最大值来衡量,正值表示违反规定。此容差是绝对(非相对)容差;请参阅 容差和停止条件非负标量。默认值是 1e-3
Display

命令行返回的显示级别。

  • 'final'(默认)-迭代结束时的退出消息。

  • 'off' 或等效的 'none' - 无显示。

  • 'iter' - 迭代显示;请参阅 命令行显示

InitialPoints求解器的初始点。

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

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

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

请参阅 算法控制。默认值是 []

MaxFunctionEvaluations

目标函数评估的最大次数,停止条件。

非负整数。默认值为 max(200,50*nvar),其中 nvar 是问题变量的数量。
MaxTime最大运行时间(秒)。由于评估目标函数所需的时间或并行处理延迟,实际运行时间可能会超过 MaxTime非负标量。默认值是 Inf
MinSampleDistance自适应采样器生成的试验点之间的最小距离。请参阅 替代优化算法非负标量。默认值是 1e-6
MinSurrogatePoints

在替代创建阶段开始时要创建的最小随机样本点数。请参阅 替代优化算法

BatchUpdateInterval > 1 时,用于创建替代的最小随机样本点数是 MinSurrogatePointsBatchUpdateInterval 中较大者。

至少为 nvar + 1 的整数。默认值为 max(20,2*nvar),其中 nvar 是问题变量的数量。
ObjectiveLimit对目标函数值的容忍度。如果可行点的计算目标函数值小于 ObjectiveLimit,则算法停止。双精度标量值。默认值是 -Inf
OutputFcn输出函数用于报告求解器进度或停止求解器。请参阅 输出函数函数名称、函数句柄或者函数名称或句柄的元胞数组。默认值是 []
PlotFcn

绘图函数显示求解器进度或停止求解器。请参阅 绘图函数

函数名称、函数句柄或者函数名称或句柄的元胞数组。内置绘图函数有:

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

    • 该图用一种颜色显示不可行点,用另一种颜色显示可行点。

    • 如果没有目标函数,则图标题将显示可行解的数量。

  • 'optimplotfval' - 将找到的最佳目标函数值绘制为线图。

  • 'optimplotx' - 将找到的最佳解绘制为条形图。

  • 'surrogateoptplot' - 绘制每次迭代的目标函数值,显示算法的哪个阶段产生的值以及在此阶段和整体中找到的最佳值。请参阅 解释 surrogateoptplot

UseParallel

布尔值,指示是否并行计算目标函数值。

您不能同时指定 UseParallel = trueUseVectorized = true。如果将两者都设置为 true,则求解器将忽略 UseVectorized 并尝试使用并行池进行并行计算(如果可能)。

布尔值。默认值是 false。有关算法的详细信息,请参阅 并行 surrogateopt 算法
UseVectorized

布尔值,指示是否以 BatchUpdateInterval 大小的批次计算目标函数值。

您不能同时指定 UseParallel = trueUseVectorized = true。如果将两者都设置为 true,则求解器将忽略 UseVectorized 并尝试使用并行池进行并行计算(如果可能)。

布尔值。默认值是 false。有关示例,请参阅 用于自定义并行模拟的向量化替代优化

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

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

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

  • lb - x 的下界

  • ub - x 的上界

  • solver'surrogateopt'

  • Aineq - 线性不等式约束矩阵(可选)

  • bineq - 线性不等式约束向量(可选)

  • Aeq -线性等式约束矩阵(可选)

  • beq -线性等式约束向量(可选)

  • options - 使用 optimoptions 创建的选项

  • rngstate - 用于重置随机数生成器状态的字段(可选)

  • intcon - 指定整数值 x 分量的字段(可选)

注意

这些 problem 字段是必需的:objectivelbubsolveroptions

数据类型: struct

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

检查点文件存储优化的状态以便恢复优化。surrogateopt 会在每次函数评估时更新检查点文件,因此即使 surrogateopt 过早停止,您也可以恢复优化。有关示例,请参阅 从检查点文件重新启动替代优化

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

从检查点文件恢复时您可以更改一些选项。请参阅 opts

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

警告

不要从使用不同 MATLAB® 版本创建的检查点文件恢复 surrogateoptsurrogateopt 可能会引发错误或产生不一致的结果。

示例: 'checkfile.mat'

示例: "C:\Program Files\MATLAB\docs\checkpointNov2019.mat"

数据类型: char | string

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

  • BatchUpdateInterval

  • CheckpointFile

  • Display

  • MaxFunctionEvaluations

  • MaxTime

  • MinSurrogatePoints

  • ObjectiveLimit

  • OutputFcn

  • PlotFcn

  • UseParallel

  • UseVectorized

示例: opts = optimoptions(options,'MaxFunctionEvaluations',400);

输出参量

全部折叠

解决方案,以实数向量返回。x 的长度与 lbub 相同。

解处的目标函数值,以实数形式返回。

  • objconstr 返回标量时,fval 就是标量 objconstr(x)

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

原因 surrogateopt 停止,以此表描述的整数值之一返回。

退出标志描述

10

由于以下原因之一,问题有唯一可行的解:

  • 所有上界 ub 都等于下界 lb

  • 线性等式约束 Aeq*x = beq 和边界有唯一解点。

surrogateopt 返回可行点和函数值,而不执行任何优化。

3找到可行点。求解器停止,因为找到的新可行点太少,无法继续。

1

目标函数值小于 options.ObjectiveLimit。当两个退出标志都适用时,此退出标志的优先级高于退出标志 10

0

函数计算的次数超过 options.MaxFunctionEvaluations 或历时超过 options.MaxTime。如果该问题有非线性不等式,则解可行。

-1

优化被输出函数或绘图函数终止。

-2

由于以下原因之一,找不到可行点:

  • 下界 lb(i) 超过对应的上界 ub(i)。或者对于 intcon 中 i,存在一个或多个 ceil(lb(i)) 超过对应的 floor(ub(i))。在这种情况下,surrogateopt 返回 x = []fval = []

  • lb = ub 并且点 lb 不可行。在这种情况下,x = lbfval = objconstr(x).Fval

  • 线性约束和整数约束(如果存在)与边界一同存在时是不可行的。在这种情况下,surrogateopt 返回 x = []fval = []

  • 边界、整数和线性约束是可行的,但在非线性约束下找不到可行解。在这种情况下,x 是非线性约束下最小的最大不可行性点,并且 fval = objconstr(x).Fval

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

  • funccount -函数计算总数。

  • elapsedtime - 运行求解器所花费的时间(以秒为单位),以 tic/toc 为单位测量。

  • message - 算法停止的原因。

  • constrviolation - 最大非线性约束违反(如果有)。constrviolation = max(output.ineq)

  • ineq -解 x 处的非线性不等式约束值。如果 objconstr 返回一个结构体,那么 ineq = objconstr(x).Ineq。否则,ineq 为空。

  • rngstate - 算法开始之前 MATLAB 随机数生成器的状态。使用此字段来重现您的结果。请参阅 重现结果,其中讨论了将 rngstate 用于 ga

评估的点以具有以下字段的结构体形式返回:

  • X - 包含 nvars 列的矩阵,其中 nvarslbub 的长度。X 的每一行代表由 surrogateopt 评估的一个点。

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

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

trials 结构体与 options.InitialPoints 结构体具有相同的形式。因此,您可以通过将 trials 结构体作为 InitialPoints 选项传递来继续优化。

算法

surrogateopt 重复执行以下步骤:

  1. 通过在边界内采样 MinSurrogatePoints 个随机点来创建一组试验点,并在试验点处评估目标函数。

  2. 通过对所有随机试验点插入径向基函数来创建目标函数的替代模型。

  3. 创建一个优化函数,为替代赋予一些权重,为与试验点的距离赋予一些权重。通过在现任点(自上次替代重置以来找到的最佳点)周围的区域中随机采样优值函数来找到优化函数优化函数的一个小值。使用此点(称为自适应点)作为新的试验点。

  4. 在自适应点处评估目标,并根据该点及其值更新替代。如果目标函数值足够低于之前观察到的最佳(最低)值,则算作“成功”,否则算作“失败”。

  5. 如果在 max(nvar,5) 次失败之前发生三次成功,则向上更新样本分布的离散度,其中 nvar 是维数。如果在三次成功之前发生 max(nvar,5) 失败,则向下更新分散度。

  6. 从步骤 3 继续,直到所有试验点都在评估点的 MinSampleDistance 范围内。此时,通过丢弃替代中的所有自适应点来重置替代,重置比例,并返回步骤 1 以创建 MinSurrogatePoints 个新的随机试验点进行评估。

有关详细信息,请参阅替代优化算法

替代功能

App

优化实时编辑器任务为 surrogateopt 提供了一个可视化界面。

扩展功能

版本历史记录

在 R2018b 中推出

全部展开