fminimax
求解极大极小约束问题
语法
描述
fminimax
求一个使一组目标函数的最大值最小的点。
这个问题包括任何类型的约束。在细节,fminimax
求指定的问题的最小值
在哪里b而且说真的是向量,一个而且Aeq为矩阵,且c(x),量表信(x),F(x)是返回向量的函数。F(x),c(x),量表信(x)可以是非线性函数。
x,磅,乌兰巴托可以作为向量或矩阵传递;看到矩阵的参数。
你也可以用fminimax
,使用恒等式
你可以解决这种形式的问题
通过使用AbsoluteMaxObjectiveCount
选择;看到利用一个目标的绝对值求解极大极小问题。
例子
最大的罪
而且因为
创建一个情节的罪
而且因为
函数及其在区间内的最大值(π-π,)
。
T = linspace(-pi,pi);情节(t,罪(t)的r -)举行在情节(t, cost,“b -”);情节(t,马克斯(罪(t),因为(t)),“柯”)传说(“罪(t)”,“因为(t)”,“马克斯(罪(t),因为(t))”,“位置”,“西北”)
该图显示了最大值的两个局部最小值,一个在1附近,另一个在-2附近。求1附近的最小值。
Fun = @(x)[sin(x);cos(x)];X0 = 1;X1 = fminimax(fun,x0)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
X1 = 0.7854
求-2附近的最小值。
X0 = -2;X2 = fminimax(fun,x0)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
X2 = -2.3562
求解线性约束极大极小问题
本例的目标函数是线性加常数。有关目标函数的描述和图,请参见比较fminimax和fminunc。
将目标函数设为如下形式的三个线性函数 对于三个向量 还有三个常数 。
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
。
A = [1,3];B = -4;X0 = [-1,-2];x = fminimax(fun,x0,A,b)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×2-5.8000 - 0.6000
求解有界约束极大极小问题
本例的目标函数是线性加常数。有关目标函数的描述和图,请参见比较fminimax和fminunc。
将目标函数设为如下形式的三个线性函数 对于三个向量 还有三个常数 。
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)
。
Lb = [-2,-1];Ub = [2,1];X0 = [0,0];A = [];%无线性约束B = [];Aeq = [];Beq = [];[x,fval] = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×2-0.0000 - 1.0000
fval =1×33.0000 -2.0000 3.0000
在这种情况下,解不是唯一的。许多点满足约束条件且具有相同的极大极小值。绘制代表三个目标函数最大值的曲面,并绘制一条红线表示具有相同minimax值的点。
[X,Y] = meshgrid(linspace(-2,2),linspace(-1,1));Z = max(fun([X(:),Y(:)]),[],2);Z =重塑(Z,大小(X));冲浪(X, Y, Z,“线型”,“没有”)视图(-118,28)保持在线((2,0),[1],[3 3],“颜色”,“r”,“线宽”, 8)从
寻找非线性约束下的极大极小
本例的目标函数是线性加常数。有关目标函数的描述和图,请参见比较fminimax和fminunc。
将目标函数设为如下形式的三个线性函数 对于三个向量 还有三个常数 。
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
函数表示非线性不等式约束
。
类型unitdisk
函数[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;Ceq = [];
求解服从的极大极小问题unitdisk
约束,从X0 = [0,0]
。
X0 = [0,0];A = [];%无其他约束B = [];Aeq = [];Beq = [];Lb = [];Ub = [];Nonlcon = @unitdisk;x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×2-0.0000 - 1.0000
利用一个目标的绝对值求解极大极小问题
fminimax
能使最大值最小化吗
或
的前几个值
通过使用AbsoluteMaxObjectiveCount
选择。使…的绝对值最小化
对目标函数的值进行排列,使
通过
目标是否为绝对最小化,并设定了AbsoluteMaxObjectiveCount
选项k
。
在这个例子中,最小化的最大值罪
而且因为
,指定罪
作为第一个目标,并设定AbsoluteMaxObjectiveCount
为1。
Fun = @(x)[sin(x),cos(x)];选项= optimoptions(“fminimax”,“AbsoluteMaxObjectiveCount”1);X0 = 1;A = [];%无约束B = [];Aeq = [];Beq = [];Lb = [];Ub = [];Nonlcon = [];x1 = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
X1 = 0.7854
试着从X0 = -2
。
X0 = -2;x2 = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
X2 = -3.1416
画出函数。
T = linspace(-pi,pi);情节(t,马克斯(abs (sin (t)),因为(t)))
看看效果如何AbsoluteMaxObjectiveCount
选项,将此图形与示例中的图形进行比较最小化sin和cos的最大值。
获取极大极小值
得到极大极小点的位置和目标函数的值。有关目标函数的描述和图,请参见比较fminimax和fminunc。
将目标函数设为如下形式的三个线性函数 对于三个向量 还有三个常数 。
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)
求出极大极小点和值。
X0 = [0,0];[x,fval] = fminimax(fun,x0)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×2-2.5000 - 2.2500
fval =1×31.7500 1.7500 1.7500
这三个目标函数在极大极小点处具有相同的值。无约束问题通常有至少两个在解处相等的目标,因为如果一个点不是任何目标的局部最小值,并且只有一个目标具有最大值,那么最大目标可以降低。
获取所有Minimax输出
本例的目标函数是线性加常数。有关目标函数的描述和图,请参见比较fminimax和fminunc。
将目标函数设为如下形式的三个线性函数 对于三个向量 还有三个常数 。
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
。
A = [1,3];B = -4;X0 = [-1,-2];
为迭代显示设置选项,并获得所有求解器输出。
选项= optimoptions(“fminimax”,“显示”,“通路”);Aeq = [];%无其他约束Beq = [];Lb = [];Ub = [];Nonlcon = [];[x, fval maxfval, exitflag,输出,λ)=...fminimax(有趣,x0, A、b Aeq,说真的,磅,乌兰巴托,nonlcon,选项)
目的最大行搜索方向Iter f计数值约束步长导数步骤0 4 0 6 19 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。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束被满足到约束公差值之内。
x =1×2-5.8000 - 0.6000
fval =1×3-3.2000 3.4000 3.4000
Maxfval = 3.4000
Exitflag = 4
输出=带字段的结构:迭代:4 funcCount: 19 lssteplth: 1 stepsize: 6.0684e-10 algorithm: 'active-set' firstorderopt: [] constrviolation: 8.1323e-09 message: '本地最小值可能。约束满足……”
λ=带字段的结构:Lower: [2x1 double] upper: [2x1 double] eqlin: [0x1 double] eqnonlin: [0x1 double] ineqlin: 0.2000 ineqnonlin: [0x1 double]
检查返回的信息:
两个目标函数值在解处相等。
求解器在4次迭代和19次函数求值中收敛。
的
lambda.ineqlin
值为非零,表示线性约束在解处是有效的。
输入参数
有趣的
- - - - - -目标函数
函数处理|函数名
目标函数,指定为函数句柄或函数名。有趣的
一个函数接受一个向量吗x
并返回一个向量F
,处求值的目标函数x
。您可以指定函数有趣的
作为函数文件的函数句柄:
X = fminimax(@myfun,x0,目标,重量)
在哪里myfun
是一个MATLAB®函数如
函数F = myfun(x...计算x处的函数值。
有趣的
也可以是匿名函数的函数句柄:
X = fminimax(@(X)sin(X .* X),x0,目标,权重);
fminimax
通过x
你的目标函数和任何非线性约束函数的形状x0
论点。例如,如果x0
是一个5乘3的数组吗fminimax
通过x
来有趣的
作为一个5 × 3的数组。然而,fminimax
乘以线性约束矩阵一个
或Aeq
与x
转换后x
对列向量x (:)
。
使矢量中某些元素的最坏情况绝对值最小化F(x),即min{max abs{F(x)}}),将这些目标划分到F的第一个元素中并使用optimoptions
设置AbsoluteMaxObjectiveCount
选择这些目标的数量。这些目标必须被分割成向量的第一个元素F
返回的有趣的
。有关示例,请参见利用一个目标的绝对值求解极大极小问题。
假设目标函数的梯度也可以计算而且的SpecifyObjectiveGradient
选择是真正的
,由:
选项= optimoptions(“fminimax”,“SpecifyObjectiveGradient”,真正的)
在这种情况下,函数有趣的
必须在第二个输出参数中返回梯度值吗G
(矩阵)在x
。梯度由偏导数组成dF / dx每一个F
在这一点上x
。如果F
向量是长度的吗米
而且x
长度n
,在那里n
的长度x0
,然后是梯度G
的F (x)
是一个n
——- - - - - -米
矩阵G (i, j)
的偏导数是F (j)
关于x(我)
(即j
的第Th列G
的梯度是j
第Th目标函数F (j)
).如果你定义F
作为数组,则前面的讨论适用于F (:)
的线性排序F
数组中。无论如何,G
是一个二维矩阵。
请注意
设置SpecifyObjectiveGradient
来真正的
只有当问题没有非线性约束时有效,还是当问题有非线性约束时有效SpecifyConstraintGradient
设置为真正的
。在内部,目标被折叠到约束中,所以求解器需要同时提供梯度(目标和约束),以避免估计梯度。
数据类型:字符
|字符串
|function_handle
x0
- - - - - -初始点
真正的向量|真正的数组
一个
- - - - - -线性不等式约束
真正的矩阵
线性不等式约束,指定为实矩阵。一个
是一个米
——- - - - - -N
矩阵,米
不等式的数量,和N
变量的数量(元素的数量x0
).对于大问题,可以通过一个
作为一个稀疏矩阵。
一个
编码米
线性不等式
A*x <= b
,
在哪里x
列向量是N
变量x (:)
,b
列向量是米
元素。
例如,考虑以下不等式:
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30日
通过输入以下约束来指定不等式。
A = [1,2;3,4;5,6];B = [10;20;30];
例子:要指定x分量的和为1或更小,请使用A = ones(1,N)
而且B = 1
。
数据类型:双
b
- - - - - -线性不等式约束
真正的向量
线性不等式约束,指定为实向量。b
是一个米
元素的相关向量一个
矩阵。如果你通过了b
作为行向量,解算器内部转换b
对列向量b (:)
。对于大问题,可以通过b
作为一个稀疏向量。
b
编码米
线性不等式
A*x <= b
,
在哪里x
列向量是N
变量x (:)
,一个
矩阵的大小米
——- - - - - -N
。
例如,考虑以下不等式:
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30。
通过输入以下约束来指定不等式。
A = [1,2;3,4;5,6];B = [10;20;30];
例子:要指定x分量的和为1或更小,请使用A = ones(1,N)
而且B = 1
。
数据类型:双
Aeq
- - - - - -线性等式约束
真正的矩阵
线性等式约束,指定为实矩阵。Aeq
是一个我
——- - - - - -N
矩阵,我
等式的个数,和N
变量的数量(元素的数量x0
).对于大问题,可以通过Aeq
作为一个稀疏矩阵。
Aeq
编码我
线性等式
Aeq*x = beq
,
在哪里x
列向量是N
变量x (:)
,说真的
列向量是我
元素。
例如,考虑以下不等式:
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
。
数据类型:双
说真的
- - - - - -线性等式约束
真正的向量
线性等式约束,指定为实向量。说真的
是一个我
元素的相关向量Aeq
矩阵。如果你通过了说真的
作为行向量,解算器内部转换说真的
对列向量说真的(:)
。对于大问题,可以通过说真的
作为一个稀疏向量。
说真的
编码我
线性等式
Aeq*x = beq
,
在哪里x
列向量是N
变量x (:)
,Aeq
矩阵的大小我
——- - - - - -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
。
数据类型:双
磅
- - - - - -下界
真正的向量|真正的数组
下界,指定为实向量或实数组。如果元素的个数x0
等于里面元素的个数磅
,然后磅
指定
X (i) >= lb(i)
对所有我
。
如果数值(lb) <数值(x0)
,然后磅
指定
X (i) >= lb(i)
为1 <= I <= number (lb)
。
如果磅
元素少于x0
,解算器发出警告。
例子:要指定所有x分量都是正的,使用Lb = 0 (size(x0))
。
数据类型:双
乌兰巴托
- - - - - -上界
真正的向量|真正的数组
上界,指定为实向量或实数组。如果元素的个数x0
等于里面元素的个数乌兰巴托
,然后乌兰巴托
指定
X (i) <= ub(i)
对所有我
。
如果Numel (ub) < Numel (x0)
,然后乌兰巴托
指定
X (i) <= ub(i)
为1 <= I <= numel(ub)
。
如果乌兰巴托
元素少于x0
,解算器发出警告。
例子:要指定所有x分量都小于1,使用Ub = ones(size(x0))
。
数据类型:双
nonlcon
- - - - - -非线性约束
函数处理|函数名
非线性约束,指定为函数句柄或函数名。nonlcon
函数接受向量或数组吗x
并返回两个数组,c (x)
而且量表(x)
。
c (x)
非线性不等式的约束数组是在x
。fminimax
试图满足C (x) <= 0
对于所有c
。量表(x)
非线性等式约束的数组是在x
。fminimax
试图满足Ceq (x) = 0
对于所有量表信
。
例如,
X = fminimax(@myfun,x0,…,@mycon)
在哪里mycon
为MATLAB函数,如下所示:
函数[c,ceq] = mycon(x) c =…计算x上的非线性不等式ceq =…计算x处的非线性等式。
假设约束的梯度也可以计算出来而且的SpecifyConstraintGradient
选择是真正的
,由:
options = optimoptions('fminimax',' specyconstraintgradient ',true)
在这种情况下,函数nonlcon
还必须在第三和第四个输出参数中返回,GC
,的梯度c (x)
,GCeq
,的梯度量表(x)
。看到非线性约束有关如何“条件化”梯度以用于不接受提供梯度的求解器的解释。
如果nonlcon
返回一个向量c
的米
组件和x
长度n
,在那里n
的长度x0
,然后是梯度GC
的c (x)
是一个n
——- - - - - -米
矩阵,GC (i, j)
的偏导数是c (j)
关于x(我)
(即j
的第Th列GC
的梯度是j
t不等式约束c (j)
).同样地,如果量表信
有p
分量,梯度GCeq
的量表(x)
是一个n
——- - - - - -p
矩阵,GCeq (i, j)
的偏导数是量表(j)
关于x(我)
(即j
的第Th列GCeq
的梯度是j
等式约束量表(j)
).
请注意
设置SpecifyConstraintGradient
来真正的
仅在以下情况下有效SpecifyObjectiveGradient
设置为真正的
。在内部,目标被折叠到约束中,所以求解器需要同时提供梯度(目标和约束),以避免估计梯度。
请注意
因为优化工具箱™函数只接受类型的输入双
,用户提供的目标函数和非线性约束函数必须返回类型的输出双
。
看到传递额外参数为说明如何参数化非线性约束函数nonlcon
,如有需要。
数据类型:字符
|function_handle
|字符串
选项
- - - - - -优化选项
的输出optimoptions
|结构,例如optimset
返回
的优化选项,指定为的输出optimoptions
或者一个结构,比如optimset
的回报。
中缺少一些选项optimoptions
显示。这些选项在下表中以斜体字显示。详细信息请参见视图优化选项。
有关具有不同名称的选项的详细信息optimset
,请参阅当前和遗留选项名称。
选项 | 描述 |
---|---|
AbsoluteMaxObjectiveCount |
元素数量F我(x),使的绝对值最小F我。看到利用一个目标的绝对值求解极大极小问题。 为 |
ConstraintTolerance |
约束违反的终止容差(一个正标量)。默认为 为 |
诊断 | 显示关于要最小化或解决的功能的诊断信息。选项是 |
DiffMaxChange | 有限差梯度(正标量)变量的最大变化。默认为 |
DiffMinChange | 有限差分梯度(正标量)的最小变量变化。默认为 |
|
显示水平(见迭代显示):
|
FiniteDifferenceStepSize |
有限差分的标量或矢量步长因子。当你设置
符号' (x) =符号(x) 除了符号' (0)= 1 。中心有限差分为
FiniteDifferenceStepSize 展开成一个向量。默认为sqrt (eps) 对于正向有限差分,和eps ^ (1/3) 对于中心有限差分。为 |
FiniteDifferenceType |
用于估计梯度的有限差分类型 该算法在估计这两种类型的有限差分时谨慎地服从边界。例如,它可能需要一个后向差分,而不是前向差分,以避免在边界外的点求值。 为 |
FunctionTolerance |
函数值(正标量)上的终止公差。默认为 为 |
FunValCheck | 检查是否表示目标函数和约束值有效。 |
MaxFunctionEvaluations |
允许的最大函数求值数(正整数)。默认为 为 |
MaxIterations |
允许的最大迭代次数(正整数)。默认为 为 |
MaxSQPIter | 允许的最大SQP迭代数(正整数)。默认为 |
MeritFunction | 如果此选项设置为 |
OptimalityTolerance |
一阶最优性(正标量)上的终止容差。默认为 为 |
OutputFcn |
优化函数在每次迭代时调用的一个或多个用户定义函数。传递一个函数句柄或函数句柄的单元格数组。默认值为none ( |
PlotFcn |
显示算法执行过程中各种进度度量的图表。从预定义的情节中选择或编写自己的。传递名称、函数句柄或名称或函数句柄的单元格数组。对于自定义绘图函数,传递函数句柄。默认值为none (
自定义绘图函数使用与输出函数相同的语法。看到优化工具箱的输出函数而且输出函数和图函数语法。 为 |
RelLineSrchBnd | 相对边界(一个实非负标量值)上的直线搜索步长,使总位移在 |
RelLineSrchBndDuration | 中指定的边界的迭代次数 |
SpecifyConstraintGradient |
用户定义的非线性约束函数的梯度。当此选项设置为 为 |
SpecifyObjectiveGradient |
由用户定义的目标函数的梯度。参考的描述 为 |
StepTolerance |
终止公差 为 |
TolConSQP | 内部迭代SQP约束违反的终止容差(一个正标量)。默认为 |
TypicalX |
典型的 |
UseParallel |
使用并行计算的选项。当此选项设置为 |
例子:optimoptions(“fminimax”、“PlotFcn”、“optimplotfval”)
问题
- - - - - -问题的结构
结构
问题结构,指定为具有此表中的字段的结构。
字段名 | 条目 |
---|---|
|
目标函数有趣的 |
|
起始点x |
|
线性不等式约束的矩阵 |
|
线性不等式约束的向量 |
|
矩阵的线性等式约束 |
|
线性等式约束的向量 |
磅 |
下界向量 |
乌兰巴托 |
上界向量 |
|
非线性约束函数 |
|
“fminimax” |
|
创建的选项optimoptions |
你必须提供至少客观的
,x0
,解算器
,选项
字段问题
结构。
数据类型:结构体
输出参数
fval
-目标函数值的解
真正的数组
目标函数在解处的值,作为实数组返回。一般来说,fval
=有趣的(x)
。
maxfval
-求解时目标函数值的最大值
真正的标量
目标函数值在解处的最大值,作为实标量返回。Maxfval = max(fval(:))
。
exitflag
- - -原因fminimax
停止
整数
原因fminimax
停止,以整数形式返回。
|
函数收敛到一个解 |
|
搜索方向的幅度小于指定公差,约束违反小于 |
|
方向导数的幅度小于规定的公差,约束违反小于 |
|
超过迭代次数 |
|
被输出函数或绘图函数停止 |
|
没有找到可行点。 |
输出
—优化过程信息
结构
关于优化过程的信息,作为带有此表中的字段的结构返回。
迭代 |
迭代次数 |
funcCount |
函数求值的数量 |
lssteplength |
直线搜索步长相对于搜索方向的大小 |
constrviolation |
约束函数的最大值 |
stepsize |
最后一次位移的长度 |
算法 |
所使用的优化算法 |
firstorderopt |
一阶最优性的度量 |
消息 |
退出消息 |
选择功能
应用程序
的优化活动编辑器任务提供了一个可视化界面fminimax
。
扩展功能
自动平行支撑万博1manbetx
通过使用并行计算工具箱™自动并行运行计算来加速代码。
要并行运行,请设置“UseParallel”
选项真正的
。
Options = optimoptions('
solvername
”、“UseParallel’,真的)
有关更多信息,请参见在优化工具箱中使用并行计算。
版本历史
R2006a之前介绍
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入该命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。