Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

fminimax

求解 minimax 约束问题

说明

fminimax 寻找能够最小化一组目标函数最大值的点。

此问题可以包括任何类型的约束。具体来说,fminimax 寻找由下式指定的问题的最小值:

minxmaxiFi(x)  such that  {c(x)0ceq(x)=0AxbAeqx=beqlbxub

其中 b 和 beq 是向量,A 和 Aeq 是矩阵,c(x)、ceq(x) 和 F(x) 是返回向量的函数。F(x)、c(x) 和 ceq(x) 可以是非线性函数。

x、lb 和 ub 可以作为向量或矩阵传递;请参阅矩阵参量

您还可以使用以下等式和 fminimax 求解最大最小化问题

maxxminiFi(x)=minxmaxi(Fi(x)).

您可以求解以下形式的问题

minxmaxi|Fi(x)|

(求解过程中需要使用 AbsoluteMaxObjectiveCount 选项。)请参阅使用一个目标的绝对值求解 minimax 问题

示例

x = fminimax(fun,x0)x0 开始,求 fun 中所述的函数的 minimax 解 x

注意

传递额外参数说明如何将额外的参数传递给目标函数和非线性约束函数(如有必要)。

示例

x = fminimax(fun,x0,A,b) 在满足线性不等式 A*x ≤ b 的情况下求解 minimax 问题。

x = fminimax(fun,x0,A,b,Aeq,beq) 进一步在满足线性等式 Aeq*x = beq 的情况下求解 minimax 问题。如果不存在不等式,则设置 A = []b = []

示例

x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub) 在满足边界 lb x ub 的情况下求解 minimax 问题。如果不存在等式,请设置 Aeq = []beq = []。如果 x(i) 无下界,则设置 lb(i) = –Inf;如果 x(i) 无上界,则设置 ub(i) = Inf

注意

请参阅迭代可能违反约束

注意

如果为问题指定的输入边界不一致,则输出 xx0,输出 fval[]

示例

x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) 在满足 nonlcon 中定义的非线性不等式 c(x) 或等式 ceq(x) 的情况下求解 minimax 问题。该函数会进行优化,以满足 c(x) ≤ 0ceq(x) = 0。如果不存在边界,则设置 lb = [] 和/或 ub = []

示例

x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 使用在 options 中指定的优化选项求解 minimax 问题。使用 optimoptions 可设置这些选项。

x = fminimax(problem) 求解 problem 的 minimax 问题,它是 problem 中所述的一个结构体。

示例

[x,fval] = fminimax(___) 对上述任何语法,返回目标函数 fun 在解 x 处计算的值。

示例

[x,fval,maxfval,exitflag,output] = fminimax(___) 还返回解 x 处目标函数的最大值、一个描述 fminimax 退出条件的值 exitflag,以及一个包含优化过程信息的结构体 output

示例

[x,fval,maxfval,exitflag,output,lambda] = fminimax(___) 还返回结构体 lambda,其字段包含在解 x 处的拉格朗日乘数。

示例

全部折叠

创建 sincos 函数及其在区间 [–pi,pi] 上的最大值的绘图。

t = linspace(-pi,pi);
plot(t,sin(t),'r-')
hold on
plot(t,cos(t),'b-');
plot(t,max(sin(t),cos(t)),'ko')
legend('sin(t)','cos(t)','max(sin(t),cos(t))','Location','NorthWest')

Figure contains an axes object. The axes object contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent sin(t), cos(t), max(sin(t),cos(t)).

该绘图显示最大值的两个局部最小值,其中一个接近 1,另一个接近 -2。求接近 1 的最小值。

fun = @(x)[sin(x);cos(x)];
x0 = 1;
x1 = fminimax(fun,x0)
Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x1 = 0.7854

求接近 -2 的最小值。

x0 = -2;
x2 = fminimax(fun,x0)
Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x2 = -2.3562

此示例中的目标函数是线性函数加上常量的形式。有关目标函数的说明和绘图,请参阅比较 fminimax 和 fminunc

将目标函数设置为形式为 dot(x,v)+v0 的三个线性函数,v 分别为三个向量,v0 分别为三个常量。

a = [1;1];
b = [-1;1];
c = [0;-1];
a0 = 2;
b0 = -3;
c0 = 4;
fun = @(x)[x*a+a0,x*b+b0,x*c+c0];

在不等式 x(1) + 3*x(2) <= –4 线束下求 minimax 点。

A = [1,3];
b = -4;
x0 = [-1,-2];
x = fminimax(fun,x0,A,b)
Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

   -5.8000    0.6000

此示例中的目标函数是线性函数加上常量的形式。有关目标函数的说明和绘图,请参阅比较 fminimax 和 fminunc

将目标函数设置为形式为 dot(x,v)+v0 的三个线性函数,v 分别为三个向量,v0 分别为三个常量。

a = [1;1];
b = [-1;1];
c = [0;-1];
a0 = 2;
b0 = -3;
c0 = 4;
fun = @(x)[x*a+a0,x*b+b0,x*c+c0];

设置边界 –2 <= x(1) <= 2–1 <= x(2) <= 1,并从 [0,0] 开始求解 minimax 问题。

lb = [-2,-1];
ub = [2,1];
x0 = [0,0];
A = []; % No linear constraints
b = [];
Aeq = [];
beq = [];
[x,fval] = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

   -0.0000    1.0000

fval = 1×3

    3.0000   -2.0000    3.0000

在本例中,解不唯一。许多点满足约束,并且具有相同的 minimax 值。绘制表示三个目标函数的最大值的曲面,并绘制一条红线显示具有相同 minimax 值的点。

[X,Y] = meshgrid(linspace(-2,2),linspace(-1,1));
Z = max(fun([X(:),Y(:)]),[],2);
Z = reshape(Z,size(X));
surf(X,Y,Z,'LineStyle','none')
view(-118,28)
hold on
line([-2,0],[1,1],[3,3],'Color','r','LineWidth',8)
hold off

Figure contains an axes object. The axes object contains 2 objects of type surface, line.

此示例中的目标函数是线性函数加上常量的形式。有关目标函数的说明和绘图,请参阅比较 fminimax 和 fminunc

将目标函数设置为形式为 dot(x,v)+v0 的三个线性函数,v 分别为三个向量,v0 分别为三个常量。

a = [1;1];
b = [-1;1];
c = [0;-1];
a0 = 2;
b0 = -3;
c0 = 4;
fun = @(x)[x*a+a0,x*b+b0,x*c+c0];

unitdisk 函数表示非线性不等式约束 x21

type unitdisk
function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];

x0 = [0,0] 开始,在 unitdisk 约束下求解 minimax 问题。

x0 = [0,0];
A = []; % No other constraints
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = @unitdisk;
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

   -0.0000    1.0000

通过使用 AbsoluteMaxObjectiveCount 选项,fminimax 可以对 i 的前几个值的 Fi(x)|Fi(x)| 的最大值求最小值。要最小化目标的 k 的绝对值,需要排列目标函数值,使 F1(x)Fk(x) 是绝对值最小化的目标,并将 AbsoluteMaxObjectiveCount 选项设置为 k

此示例要最小化 sincos 的最大值,将 sin 指定为第一个目标,并将 AbsoluteMaxObjectiveCount 设置为 1。

fun = @(x)[sin(x),cos(x)];
options = optimoptions('fminimax','AbsoluteMaxObjectiveCount',1);
x0 = 1;
A = []; % No constraints
b = [];
Aeq = [];
beq = [];
lb = [];
ub = [];
nonlcon = [];
x1 = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x1 = 0.7854

x0 = –2 开始尝试。

x0 = -2;
x2 = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x2 = -3.1416

绘制函数。

t = linspace(-pi,pi);
plot(t,max(abs(sin(t)),cos(t)))

Figure contains an axes object. The axes object contains an object of type line.

要查看 AbsoluteMaxObjectiveCount 选项的效果,请将此绘图与示例最小化 sin 和 cos 的最大值中的绘图进行比较。

获取 minimax 点的位置和目标函数的值。有关目标函数的说明和绘图,请参阅比较 fminimax 和 fminunc

将目标函数设置为形式为 dot(x,v)+v0 的三个线性函数,v 分别为三个向量,v0 分别为三个常量。

a = [1;1];
b = [-1;1];
c = [0;-1];
a0 = 2;
b0 = -3;
c0 = 4;
fun = @(x)[x*a+a0,x*b+b0,x*c+c0];

将初始点设置为 [0,0],并求 minimax 点和值。

x0 = [0,0];
[x,fval] = fminimax(fun,x0)
Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

   -2.5000    2.2500

fval = 1×3

    1.7500    1.7500    1.7500

所有三个目标函数在 minimax 点都有相同的值。无约束问题通常至少有两个在解处相等的目标,因为如果一个点不是任何目标的局部最小值并且只有一个目标具有最大值,则最大目标可能会降低。

此示例中的目标函数是线性函数加上常量的形式。有关目标函数的说明和绘图,请参阅比较 fminimax 和 fminunc

将目标函数设置为形式为 dot(x,v)+v0 的三个线性函数,v 分别为三个向量,v0 分别为三个常量。

a = [1;1];
b = [-1;1];
c = [0;-1];
a0 = 2;
b0 = -3;
c0 = 4;
fun = @(x)[x*a+a0,x*b+b0,x*c+c0];

在不等式 x(1) + 3*x(2) <= –4 线束下求 minimax 点。

A = [1,3];
b = -4;
x0 = [-1,-2];

设置选项以显示迭代输出,并获得所有求解器输出。

options = optimoptions('fminimax','Display','iter');
Aeq = []; % No other constraints
beq = [];
lb = [];
ub = [];
nonlcon = [];
[x,fval,maxfval,exitflag,output,lambda] =...
    fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
                  Objective        Max     Line search     Directional 
 Iter F-count         value    constraint   steplength      derivative   Procedure 
    0      4              0             6                                            
    1      9              5             0            1           0.981     
    2     14          4.889     8.882e-16            1          -0.302    Hessian modified twice  
    3     19            3.4     8.132e-09            1          -0.302    Hessian modified twice  

Local minimum possible. Constraints satisfied.

fminimax stopped because the size of the current search direction is less than
twice the value of the step size tolerance and constraints are 
satisfied to within the value of the constraint tolerance.
x = 1×2

   -5.8000    0.6000

fval = 1×3

   -3.2000    3.4000    3.4000

maxfval = 3.4000
exitflag = 4
output = struct with fields:
         iterations: 4
          funcCount: 19
       lssteplength: 1
           stepsize: 6.0684e-10
          algorithm: 'active-set'
      firstorderopt: []
    constrviolation: 8.1323e-09
            message: 'Local minimum possible. Constraints satisfied....'

lambda = struct with fields:
         lower: [2x1 double]
         upper: [2x1 double]
         eqlin: [0x1 double]
      eqnonlin: [0x1 double]
       ineqlin: 0.2000
    ineqnonlin: [0x1 double]

检查返回的信息:

  • 两个目标函数值在解处相等。

  • 求解器在经过 4 次迭代和 19 次函数计算后收敛。

  • lambda.ineqlin 值非零,表示线性约束在解处为活动状态。

输入参数

全部折叠

目标函数,指定为函数句柄或函数名称。fun 函数接受向量 x,并返回向量 F,即在 x 处计算的目标函数值。对于函数文件,您可以将函数 fun 指定为函数句柄:

x = fminimax(@myfun,x0,goal,weight)

其中 myfun 是一个 MATLAB® 函数,例如

function F = myfun(x)
F = ...         % Compute function values at x.

fun 也可以是匿名函数的函数句柄:

x = fminimax(@(x)sin(x.*x),x0,goal,weight);

fminimaxx0 参数的形状将 x 传递给目标函数和任何非线性约束函数。例如,如果 x0 是 5×3 数组,则 fminimaxx 以 5×3 数组的形式传递给 fun。但是,在将 x 转换为列向量 x(:) 后,fminimax 会将线性约束矩阵 AAeq 乘以 x

要最小化向量 F(x) 的某些元素的最差情形下的绝对值(即 min{max abs{F(x)} }),请将这些目标划分到 F 的前几个元素中,并使用 optimoptions AbsoluteMaxObjectiveCount 选项设置为这些目标的数目。这些目标必须划分到 fun 返回的向量 F 的前几个元素中。有关示例,请参阅使用一个目标的绝对值求解 minimax 问题

假设目标函数的梯度也可以计算并且 SpecifyObjectiveGradient 选项是 true,设置如下:

options = optimoptions('fminimax','SpecifyObjectiveGradient',true)

在这种情况下,函数 fun 必须在第二个输出参数中返回 x 处的梯度值 G(矩阵)。梯度由每个 Fx 点处的偏导数 dF/dx 组成。如果 F 是长度为 m 的向量,且 x 的长度为 n,其中 nx0 的长度,则 F(x) 的梯度 Gn×m 矩阵,其中 G(i,j)F(j) 关于 x(i) 的偏导数(即,G 的第 j 列是第 j 个目标函数 F(j) 的梯度)。如果您将 F 定义为数组,则前面的讨论适用于 F(:),即 F 数组的线性排序。在任何情形下,G 都是一个二维矩阵。

注意

仅当问题没有非线性约束时,或当问题有非线性约束且 SpecifyConstraintGradient 设置为 true 时,将 SpecifyObjectiveGradient 设置为 true 才有效。在算法内部,目标被折叠到约束中,因此要为求解器提供两种梯度(目标和约束),以避免估计梯度。

数据类型: char | string | function_handle

初始点,指定为实数向量或实数数组。求解器使用 x0 中的元素数量和 x0 的大小来确定 fun 接受的变量数量和大小。

示例: x0 = [1,2,3,4]

数据类型: double

线性不等式约束,指定为实矩阵。AM×N 矩阵,其中 M 是不等式的数目,而 N 是变量的数目(x0 中的元素数)。对于大型问题,将 A 作为稀疏矩阵传递。

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

A*x <= b,

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

例如,假设有以下不等式:

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

通过输入以下约束来指定不等式。

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

示例: 要指定 x 分量总和等于或小于 1,请使用 A = ones(1,N)b = 1

数据类型: double

线性不等式约束,指定为实数向量。b 是与 A 矩阵相关的包含 M 个元素的向量。如果将 b 作为行向量传递,求解器会在内部将 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];

示例: 要指定 x 分量总和等于或小于 1,请使用 A = ones(1,N)b = 1

数据类型: double

线性等式约束,指定为实矩阵。AeqMe×N 矩阵,其中 Me 是等式的数目,而 N 是变量的数目(x0 中的元素数)。对于大型问题,将 Aeq 作为稀疏矩阵传递。

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

Aeq*x = beq,

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

例如,假设有以下不等式:

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

通过输入以下约束来指定不等式。

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

示例: 要指定 x 分量总和为 1,请使用 Aeq = ones(1,N)beq = 1

数据类型: double

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

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

Aeq*x = beq,

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

例如,请参考以下等式:

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

通过输入以下约束来指定等式。

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

示例: 要指定 x 分量总和为 1,请使用 Aeq = ones(1,N)beq = 1

数据类型: double

下界,指定为实数向量或实数数组。如果 x0 中的元素数等于 lb 中的元素数,则 lb 指定

x(i) >= lb(i)(对于全部 i)。

如果 numel(lb) < numel(x0),则 lb 指定

x(i) >= lb(i) (1 <= i <= numel(lb))。

如果 lb 的元素数少于 x0,求解器将发出警告。

示例: 要指定所有 x 分量为正,请使用 lb = zeros(size(x0))

数据类型: double

上界,指定为实数向量或实数数组。如果 x0 中的元素数等于 ub 中的元素数,则 ub 指定

x(i) <= ub(i)(对于全部 i)。

如果 numel(ub) < numel(x0),则 ub 指定

x(i) <= ub(i) (1 <= i <= numel(ub))。

如果 ub 的元素数少于 x0,求解器将发出警告。

示例: 要指定 x 的所有分量小于 1,请使用 ub = ones(size(x0))

数据类型: double

非线性约束,指定为函数句柄或函数名称。nonlcon 函数接受向量或数组 x,并返回两个数组 c(x)ceq(x)

  • c(x) 是由 x 处的非线性不等式约束组成的数组。fminimax 尝试满足

    c(x) <= 0 for all entries of c.

  • ceq(x) 是由 x 处的非线性等式约束组成的数组。fminimax 尝试满足

    ceq(x) = 0 for all entries of ceq.

例如,

x = fminimax(@myfun,x0,...,@mycon)

其中 mycon 是一个 MATLAB 函数,例如:

function [c,ceq] = mycon(x)
c = ...     % Compute nonlinear inequalities at x.
ceq = ...   % Compute nonlinear equalities at x.

假设约束的梯度也可以计算SpecifyConstraintGradient 选项是 true,设置如下:

options = optimoptions('fminimax','SpecifyConstraintGradient',true)

在本例中,函数 nonlcon 还必须在第三个输出参数 GC 中返回 c(x) 的梯度,在第四个输出参数 GCeq 中返回 ceq(x) 的梯度。请参阅非线性约束,了解如何“条件化”处理梯度,以将其用于不接受原始梯度的求解器。

如果 nonlcon 返回由 m 个分量组成的向量 cx 的长度为 n,其中 nx0 的长度,则 c(x) 的梯度 GCn×m 矩阵,其中 GC(i,j)c(j) 关于 x(i) 的偏导数(即,GC 的第 j 列是第 j 个不等式约束 c(j) 的梯度)。同样,如果 ceqp 个分量,ceq(x) 的梯度 GCeqn×p 矩阵,其中 GCeq(i,j)ceq(j) 关于 x(i) 的偏导数(即,GCeq 的第 j 列是第 j 个等式约束 ceq(j) 的梯度)。

注意

仅当 SpecifyObjectiveGradient 设置为 true 时,将 SpecifyConstraintGradient 设置为 true 才有效。在内部,目标折叠到约束中,因此求解器需要按顺序提供的两个梯度(目标和约束)以避免估计梯度。

注意

由于 Optimization Toolbox™ 函数只接受 double 类型的输入,用户提供的目标和非线性约束函数必须返回 double 类型的输出。

如有必要,请参阅传递额外参数以了解如何参数化非线性约束函数 nonlcon

数据类型: char | function_handle | string

优化选项,指定为 optimoptions 的输出或 optimset 等返回的结构体。

optimoptions 显示中缺少某些选项。这些选项在下表中以斜体显示。有关详细信息,请参阅查看优化选项

有关在 optimset 中具有不同名称的选项的详细信息,请参阅当前选项名称和旧选项名称

选项描述
AbsoluteMaxObjectiveCount

用于最小化 Fi 绝对值的 Fi(x) 的元素数。请参阅使用一个目标的绝对值求解 minimax 问题

对于 optimset,名称是 MinAbsMax

ConstraintTolerance

约束违反值的终止容差(正标量)。默认值为 1e-6。请参阅容差和停止条件

对于 optimset,名称是 TolCon

Diagnostics

显示关于要最小化或求解的函数的诊断信息。选项是 'on''off'(默认值)。

DiffMaxChange

有限差分梯度变量的最大变化(正标量)。默认值为 Inf

DiffMinChange

有限差分梯度变量的最小变化(正标量)。默认值为 0

Display

显示级别(请参阅迭代输出):

  • 'off''none' 不显示输出。

  • 'iter' 显示每次迭代的输出,并给出默认退出消息。

  • 'iter-detailed' 显示每次迭代的输出,并给出带有技术细节的退出消息。

  • 'notify' 仅当函数不收敛时才显示输出,并给出默认退出消息。

  • 'notify-detailed' 仅当函数不收敛时才显示输出,并给出技术性退出消息。

  • 'final'(默认值)仅显示最终输出,并给出默认退出消息。

  • 'final-detailed' 仅显示最终输出,并给出带有技术细节的退出消息。

FiniteDifferenceStepSize

有限差分的标量或向量步长因子。当您将 FiniteDifferenceStepSize 设置为向量 v 时,前向有限差分 delta

delta = v.*sign′(x).*max(abs(x),TypicalX);

其中 sign′(x) = sign(x)(例外是 sign′(0) = 1)。中心有限差分是

delta = v.*max(abs(x),TypicalX);

标量 FiniteDifferenceStepSize 扩展为向量。对于正向有限差分,默认值为 sqrt(eps);对于中心有限差分,默认值为 eps^(1/3)

对于 optimset,名称是 FinDiffRelStep

FiniteDifferenceType

用于估计梯度的有限差分的类型,'forward'(默认值)或 'central'(中心化)。'central' 需要两倍的函数计算次数,但通常更准确。

当同时估计这两种类型的有限差分时,该算法小心地遵守边界。例如,为了避免在边界之外的某个点进行计算,可能需要后向差分,而不是前向差分。

对于 optimset,名称是 FinDiffType

FunctionTolerance

函数值的终止容差(正标量)。默认值为 1e-6。请参阅容差和停止条件

对于 optimset,名称是 TolFun

FunValCheck

检查目标函数和约束值是否有效。如果为 'on',则当目标函数或约束返回值 complexInfNaN 时,会显示错误。默认值 'off' 不显示错误。

MaxFunctionEvaluations

允许的函数计算最大次数,为正整数。默认值为 100*numberOfVariables。请参阅容差和停止条件迭代和函数计算次数

对于 optimset,名称是 MaxFunEvals

MaxIterations

允许的迭代最大次数,为正整数。默认值为 400。请参阅容差和停止条件迭代和函数计算次数

对于 optimset,名称是 MaxIter

MaxSQPIter

允许的 SQP 迭代最大次数(正整数)。默认值为 10*max(numberOfVariables, numberOfInequalities + numberOfBounds)

MeritFunction

如果此选项设置为 'multiobj'(默认值),请使用目标达到或 minimax 评价函数。如果此选项设置为 'singleobj',则使用 fmincon 评价函数。

OptimalityTolerance

一阶最优性的终止容差(正标量)。默认值为 1e-6。请参阅一阶最优性测度

对于 optimset,名称是 TolFun

OutputFcn

优化函数在每次迭代中调用的一个或多个用户定义的函数。传递函数句柄或函数句柄的元胞数组。默认值是“无”([])。请参阅Output Function and Plot Function Syntax

PlotFcn

在算法执行过程中显示各种进度测量值的绘图。从预定义绘图中选择,或者自行编写。传递名称、函数句柄或由名称或函数句柄组成的元胞数组。对于自定义绘图函数,传递函数句柄。默认值是“无”([])。

  • 'optimplotx' 绘制当前点。

  • 'optimplotfunccount' 绘制函数计数。

  • 'optimplotfval' 绘制目标函数值。

  • 'optimplotconstrviolation' 绘制最大约束违反值。

  • 'optimplotstepsize' 绘制步长。

自定义绘图函数使用与输出函数相同的语法。请参阅Optimization Toolbox 的输出函数Output Function and Plot Function Syntax

对于 optimset,名称是 PlotFcns

RelLineSrchBnd

线搜索步长的相对边界(非负实数标量值),使得 x 中的总位移满足 |Δx(i)| ≤ relLineSrchBnd· max(|x(i)|,|typicalx(i)|)。当求解器采取过大的步时,此选项可控制 x 中位移的模。默认值是“无”([])。

RelLineSrchBndDuration

RelLineSrchBnd 所指定的边界应处于活动状态的迭代次数。默认值为 1

SpecifyConstraintGradient

用户定义的非线性约束函数梯度。当此选项设置为 true 时,fminimax 预计约束函数有四个输出,如 nonlcon 中所述。当此选项设置为 false(默认值)时,fminimax 使用有限差分估计非线性约束的梯度。

对于 optimset,名称为 GradConstr,值为 'on''off'

SpecifyObjectiveGradient

用户定义的目标函数梯度。请参考 fun 的说明,了解如何定义梯度。将此选项设置为 true,以使 fminimax 采用用户定义的目标函数梯度。设置为默认值 false 会导致 fminimax 使用有限差分来估计梯度。

对于 optimset,名称为 GradObj,值为 'on''off'

StepTolerance

x 的终止容差(正标量)。默认值为 1e-6。请参阅容差和停止条件

对于 optimset,名称是 TolX

TolConSQP

内部迭代 SQP 约束违反值的终止容差(正标量)。默认值为 1e-6

TypicalX

典型的 x 值。TypicalX 中的元素数等于 x0(即起点)中的元素数。默认值为 ones(numberofvariables,1)fminimax 函数使用 TypicalX 缩放有限差分来进行梯度估计。

UseParallel

使用并行计算的选项。当此选项设置为 true 时,fminimax 将以并行方式估计梯度。默认值为 false。请参阅并行计算

示例: optimoptions('fminimax','PlotFcn','optimplotfval')

问题结构体,指定为具有下表中字段的结构体。

字段名称条目

objective

目标函数 fun

x0

x 的初始点

Aineq

线性不等式约束的矩阵

bineq

线性不等式约束的向量

Aeq

线性等式约束的矩阵

beq

线性等式约束的向量
lb由下界组成的向量
ub由上界组成的向量

nonlcon

非线性约束函数

solver

'fminimax'

options

optimoptions 创建的选项

您必须在 problem 结构体中至少提供 objectivex0solveroptions 字段。

数据类型: struct

输出参数

全部折叠

解,以实数向量或实数数组形式返回。x 的大小与 x0 的大小相同。通常情况下,当 exitflag 为正时,x 是该问题的局部解。有关解质量的信息,请参阅求解成功后

解处的目标函数值,以实数数组形式返回。通常,fval = fun(x)

解处的目标函数最大值,以实数标量形式返回。maxfval = max(fval(:))

fminimax 停止的原因,以整数形式返回。

1

函数收敛于解 x

4

搜索方向的模小于指定的容差,约束违反值小于 options.ConstraintTolerance

5

方向导数的模小于指定容差,约束违反值小于 options.ConstraintTolerance

0

迭代次数超过 options.MaxIterations 或函数计算次数超过 options.MaxFunctionEvaluations

-1

由输出函数或绘图函数停止

-2

找不到可行点。

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

iterations

执行的迭代次数

funcCount

函数计算次数

lssteplength

搜索方向上线搜索步的大小

constrviolation

约束函数的最大值

stepsize

x 中最后一次位移的长度

algorithm

使用的优化算法

firstorderopt

一阶最优性的测度

message

退出消息

解处的拉格朗日乘数,以结构体形式返回,其中包含下表中的字段。

lower

对应于 lb 的下界

upper

对应于 ub 的上界

ineqlin

对应于 Ab 的线性不等式

eqlin

对应于 Aeqbeq 的线性等式

ineqnonlin

对应于 nonlconc 的非线性不等式

eqnonlin

对应于 nonlconceq 的非线性等式

算法

fminimax 将 minimax 问题转换为目标达到问题,然后使用 fgoalattain 求解转换后的目标达到问题,从而对 minimax 问题求解。转换将所有目标设置为 0,并将所有权重设置为 1。请参阅Multiobjective Optimization Algorithms中的公式 1

替代功能

App

优化实时编辑器任务为 fminimax 提供可视化界面。

扩展功能

版本历史记录

在 R2006a 之前推出