fminimax
求解极大极小约束问题
语法
描述
fminimax
求一个点,使一组目标函数的最大值最小。
这个问题包括任何类型的约束。在细节,fminimax
求问题的最小值
在哪里b而且说真的是向量,一个而且Aeq矩阵,c(x),量表信(x),F(x)是返回向量的函数。F(x),c(x),量表信(x)可以是非线性函数。
x,磅,乌兰巴托可作为向量或矩阵传递;看到矩阵的参数.
你也可以用fminimax
,使用恒等式
你可以解决形式的问题
通过使用AbsoluteMaxObjectiveCount
选择;看到利用一个目标的绝对值求解极大极小问题.
例子
最小化最大的罪
而且因为
创建一个情节罪
而且因为
函数及其在区间上的最大值(π-π,)
.
t = linspace(π-π);情节(t,罪(t)的r -)举行在情节(t, cost,“b -”);情节(t,马克斯(罪(t),因为(t)),“柯”)传说(“罪(t)”,“因为(t)”,“马克斯(罪(t),因为(t))”,“位置”,“西北”)
图中显示了最大值的两个局部极小值,一个在1附近,另一个在-2附近。求1附近的最小值。
有趣= @ (x) [sin (x), cos (x));x0 = 1;x0, x1 = fminimax(有趣)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束条件满足到约束公差值之内。
x1 = 0.7854
求-2附近的最小值。
x0 = 2;x0, x2 = fminimax(有趣)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束条件满足到约束公差值之内。
x2 = -2.3562
求解线性约束极小极大问题
本例的目标函数是线性加常数。有关目标函数的描述和图,请参见比较fminimax和fminunc.
将目标函数设置为窗体的三个线性函数 为三个向量 和三个常量 .
一个= (1,1);b = (1, 1);c = [0, 1];a0 = 2;b0 = 3;c0 = 4;有趣= @ (x) [x * + a0, * b + b0, x * c + c0];
求不等式下的极小极大点X (1) + 3* X (2) <= -4
.
一个= [1,3];b = 4;x0 = [1, 2];x = fminimax(乐趣,x0, A, b)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束条件满足到约束公差值之内。
x =1×2-5.8000 - 0.6000
求解有界约束极小极大问题
本例的目标函数是线性加常数。有关目标函数的描述和图,请参见比较fminimax和fminunc.
将目标函数设置为窗体的三个线性函数 为三个向量 和三个常量 .
一个= (1,1);b = (1, 1);c = [0, 1];a0 = 2;b0 = 3;c0 = 4;有趣= @ (x) [x * + a0, * b + b0, x * c + c0];
设定界限,-2 <= x(1) <= 2
而且-1 <= x(2) <= 1
求解极大极小问题从(0,0)
.
磅= (2,1);乌兰巴托= (2,1);x0 = (0,0);一个= [];%无线性约束b = [];Aeq = [];说真的= [];[x, fval] = fminimax (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束条件满足到约束公差值之内。
x =1×2-0.0000 - 1.0000
fval =1×33.0000 -2.0000 3.0000
在这种情况下,解不是唯一的。许多点满足约束条件且具有相同的极大极小值。画出代表三个目标函数最大值的曲面,画出具有相同极大极小值的点的红线。
(X, Y) = meshgrid (linspace (2, 2), linspace (1,1));Z = max(乐趣([X (:), Y (:))), [], 2);Z =重塑(Z,大小(X));冲浪(X, Y, Z,“线型”,“没有”)视图(-118年28)在线((2,0),[1],[3 3],“颜色”,“r”,“线宽”, 8)从
求非线性约束下的极小极大值
本例的目标函数是线性加常数。有关目标函数的描述和图,请参见比较fminimax和fminunc.
将目标函数设置为窗体的三个线性函数 为三个向量 和三个常量 .
一个= (1,1);b = (1, 1);c = [0, 1];a0 = 2;b0 = 3;c0 = 4;有趣= @ (x) [x * + a0, * b + b0, x * c + c0];
的unitdisk
函数表示非线性不等式约束
.
类型unitdisk
函数[c,ceq] = unitdisk(x) c = x(1)²+ x(2)²- 1;测查= [];
求极小极大问题的解unitdisk
约束,从x0 = (0,0)
.
x0 = (0,0);一个= [];%没有其他约束b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = @unitdisk;x = fminimax (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束条件满足到约束公差值之内。
x =1×2-0.0000 - 1.0000
利用一个目标的绝对值求解极大极小问题
fminimax
能使两者的最大值最小化吗
或
的前几个值
通过使用AbsoluteMaxObjectiveCount
选择。使…的绝对值最小
在目标中,排列目标函数值使
通过
目标是否为绝对最小化,并设定AbsoluteMaxObjectiveCount
选项k
.
在本例中,将的最大值最小化罪
而且因为
,指定罪
作为第一个目标,并且设定AbsoluteMaxObjectiveCount
为1。
有趣= @ (x) [sin (x), cos (x));选择= optimoptions (“fminimax”,“AbsoluteMaxObjectiveCount”1);x0 = 1;一个= [];%没有约束b = [];Aeq = [];说真的= [];磅= [];乌兰巴托= [];nonlcon = [];x1 = fminimax (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束条件满足到约束公差值之内。
x1 = 0.7854
试着从x0 = 2
.
x0 = 2;x2 = fminimax (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束条件满足到约束公差值之内。
x2 = -3.1416
绘制函数。
t = linspace(π-π);情节(t,马克斯(abs (sin (t)),因为(t)))
看看效果AbsoluteMaxObjectiveCount
选项,将此图与示例中的图进行比较最小化sin和cos的最大值.
获得极大极小值
得到极大极小点的位置和目标函数的值。有关目标函数的描述和图,请参见比较fminimax和fminunc.
将目标函数设置为窗体的三个线性函数 为三个向量 和三个常量 .
一个= (1,1);b = (1, 1);c = [0, 1];a0 = 2;b0 = 3;c0 = 4;有趣= @ (x) [x * + a0, * b + b0, x * c + c0];
设置初始点为(0,0)
求出极小极大点和值。
x0 = (0,0);[x, fval] = fminimax(有趣,x0)
局部最小值。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长公差值的两倍,约束条件满足到约束公差值之内。
x =1×2-2.5000 - 2.2500
fval =1×31.7500 1.7500 1.7500
三个目标函数在极大极小点处具有相同的值。无约束问题通常有至少两个在解处相等的目标,因为如果一个点不是任何目标的局部最小值,并且只有一个目标具有最大值,那么最大目标可以降低。
获取所有的Minimax输出
本例的目标函数是线性加常数。有关目标函数的描述和图,请参见比较fminimax和fminunc.
将目标函数设置为窗体的三个线性函数 为三个向量 和三个常量 .
一个= (1,1);b = (1, 1);c = [0, 1];a0 = 2;b0 = 3;c0 = 4;有趣= @ (x) [x * + a0, * b + b0, x * c + c0];
求不等式下的极小极大点X (1) + 3* X (2) <= -4
.
一个= [1,3];b = 4;x0 = [1, 2];
为迭代显示设置选项,并获得所有求解器输出。
选择= optimoptions (“fminimax”,“显示”,“通路”);Aeq = [];%没有其他约束说真的= [];磅= [];乌兰巴托= [];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修改两次3 19 3.4 8.132e-09 1 -0.302 Hessian修改两次局部最小值。约束满足。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算法:'active-set' firstorderopt: [] constrbreach: 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 < =
,
在哪里x
列向量是N
变量x (:)
,b
列向量是米
元素。
例如,考虑以下这些不等式:
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30日
通过输入以下约束指定不等式。
= [1, 2, 3, 4, 5, 6);b =(10、20、30);
例子:要指定x分量的和为1或更小,请使用一个= 1 (1,N)
而且b = 1
.
数据类型:双
b
- - - - - -线性不等式约束
真正的向量
线性不等式约束,指定为实向量。b
是一个米
元素向量相关的一个
矩阵。如果你通过b
作为行向量,求解器内部转换b
到列向量b (:)
.对于大问题,不考虑b
作为一个稀疏向量。
b
编码米
线性不等式
A * x < =
,
在哪里x
列向量是N
变量x (:)
,一个
矩阵的大小米
——- - - - - -N
.
例如,考虑以下这些不等式:
x1+ 2x2≤10
3.x1+ 4x2≤20
5x1+ 6x2≤30。
通过输入以下约束指定不等式。
= [1, 2, 3, 4, 5, 6);b =(10、20、30);
例子:要指定x分量的和为1或更小,请使用一个= 1 (1,N)
而且b = 1
.
数据类型:双
Aeq
- - - - - -线性等式约束
真正的矩阵
线性等式约束,指定为实矩阵。Aeq
是一个我
——- - - - - -N
矩阵,我
等式的个数,和N
变量的个数(元素的个数?x0
).对于大问题,不考虑Aeq
作为一个稀疏矩阵。
Aeq
编码我
线性等式
Aeq * x =说真的
,
在哪里x
列向量是N
变量x (:)
,说真的
列向量是我
元素。
例如,考虑以下这些不等式:
x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20,
通过输入以下约束指定不等式。
Aeq =[1、2、3、2、4、1];说真的=(10、20);
例子:要指定x分量的和为1,使用Aeq = 1 (1, N)
而且说真的= 1
.
数据类型:双
说真的
- - - - - -线性等式约束
真正的向量
线性等式约束,指定为实向量。说真的
是一个我
元素向量相关的Aeq
矩阵。如果你通过说真的
作为行向量,求解器内部转换说真的
到列向量说真的(:)
.对于大问题,不考虑说真的
作为一个稀疏向量。
说真的
编码我
线性等式
Aeq * x =说真的
,
在哪里x
列向量是N
变量x (:)
,Aeq
矩阵的大小我
——- - - - - -N
.
例如,考虑以下等式:
x1+ 2x2+ 3x3.= 10
2x1+ 4x2+x3.= 20。
通过输入以下约束来指定等式。
Aeq =[1、2、3、2、4、1];说真的=(10、20);
例子:要指定x分量的和为1,使用Aeq = 1 (1, N)
而且说真的= 1
.
数据类型:双
磅
- - - - - -下界
真正的向量|真正的数组
下界,指定为实向量或实数组。如果元素的个数x0
等于元素的个数磅
,然后磅
指定
x(我)> =磅(我)
对所有我
.
如果元素个数(磅)<元素个数(x0)
,然后磅
指定
x(我)> =磅(我)
为1 <= I <= numel(lb)
.
如果磅
元素少于x0
,求解者发出警告。
例子:要指定所有x分量都是正的,使用磅= 0(大小(x0))
.
数据类型:双
乌兰巴托
- - - - - -上界
真正的向量|真正的数组
上界,指定为实向量或实数组。如果元素的个数x0
等于元素的个数乌兰巴托
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
对所有我
.
如果元素个数(乌兰巴托)<元素个数(x0)
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
为1 <= I <= numel(ub)
.
如果乌兰巴托
元素少于x0
,求解者发出警告。
例子:要指定所有x分量都小于1,使用乌兰巴托= 1(大小(x0))
.
数据类型:双
nonlcon
- - - - - -非线性约束
函数处理|函数名
非线性约束,指定为函数句柄或函数名。nonlcon
函数是否接受向量或数组x
并返回两个数组,c (x)
而且量表(x)
.
c (x)
是非线性不等式的数组约束在x
.fminimax
试图满足c (x) < = 0
对于所有的项c
.量表(x)
是非线性等式约束的数组x
.fminimax
试图满足量表(x) = 0
对于所有的项量表信
.
例如,
x = fminimax (@mycon @myfun, x0,…)
在哪里mycon
是一个MATLAB函数,如:
函数[c,ceq] = mycon(x) c =…计算非线性不等式在x. ceq =…计算在x处的非线性等式。
假设约束条件的梯度也可以计算出来而且的SpecifyConstraintGradient
选择是真正的
,按下列规定:
选择= optimoptions(‘fminimax’,‘SpecifyConstraintGradient’,真的)
在这种情况下,函数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
th不等式约束c (j)
).同样地,如果量表信
有p
组件,梯度GCeq
的量表(x)
是一个n
——- - - - - -p
矩阵,GCeq (i, j)
的偏导数是多少量表(j)
关于x(我)
(即j
th列GCeq
梯度是多少j
th等式约束量表(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 |
显示算法执行过程中各种进度度量的图。从预定义的情节中选择或编写自己的情节。传递名称、函数句柄或名称或函数句柄的单元格数组。对于自定义plot函数,传递函数句柄。默认值是none (
自定义plot函数使用与输出函数相同的语法。看到优化工具箱的输出函数而且输出函数和图函数语法. 为 |
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 |
一阶最优性的度量 |
消息 |
退出消息 |
选择功能
应用程序
的优化Live Editor任务提供了一个可视化的界面fminimax
.
扩展功能
自动并行支持
通过使用并行计算工具箱™自动并行运行计算来加速代码。
若要并行运行,请设置“UseParallel”
选项真正的
.
选择= optimoptions ('
solvername
”、“UseParallel’,真的)
有关更多信息,请参见在优化工具箱中使用并行计算.
版本历史
之前介绍过的R2006a
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。