解决极大极小约束问题
fminimax
寻找使一组目标函数的最大值最小化的点。
问题包括任何类型的约束。详细地fminimax
寻求以下公式指定的问题的最小值:
哪里B.和说真的是向量,一种和AEQ.矩阵,C(X),CEQ.(X), 和F(X)是返回向量的函数。F(X),C(X), 和CEQ.(X)可以是非线性函数。
X那磅,乌兰巴托可以作为向量或矩阵传递;看见矩阵的参数.
你也可以用fminimax
,使用身份
你可以解决表格的问题
通过使用absolutemaxObjectiveCount.
选择权;看见使用一个目标的绝对值来解决极小的问题.
罪
和余弦
创造一个情节罪
和余弦
函数及其在区间内的最大值[–π,π]
.
t = linspace(π-π);情节(t,罪(t)“r-”)持有在绘图(T,COS(T),“b -”);情节(t,马克斯(罪(t),因为(t)),“高”)传说(“罪(t)”那“因为(t)”那“马克斯(罪(t),因为(t))”那“位置”那“西北”)
该曲线显示了两个最大,一个接近1的局部最小值,另一个局部最小值。找到最小近1。
有趣= @ (x) [sin (x), cos (x));x0 = 1;x0, x1 = fminimax(有趣)
地方最低可能。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长的值的量,但是满足约束公差的值满足。
x1 = 0.7854
求-2附近的最小值。
x0=-2;x2=fminimax(乐趣,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(乐趣,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(乐趣,x0,A,b,Aeq,beq,lb,ub)
地方最低可能。约束满足。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(fun([x(:),y(:)],[],2);z =重塑(z,size(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];
这单位盘
函数表示非线性不等式约束
.
类型单位盘
函数c = unitdisk(x) c = x(1)²+ x(2)²- 1;测查= [];
用。求解极大极小问题单位盘
约束,从x0 = (0,0)
.
x0 = (0,0);a = [];%没有其他限制b=[];Aeq=[];beq=[];lb=[];ub=[];nonlcon=@unitdisk;x=fminimax(趣味、x0、A、b、Aeq、beq、lb、ub、非LCON)
地方最低可能。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长的值的量,但是满足约束公差的值满足。
x =1×2-0.0000 - 1.0000
fminimax
可以最小化其中一个的最大值
或
的前几个值
通过使用absolutemaxObjectiveCount.
选择权。使…的绝对值最小化
对目标的函数值进行排序,使
通过
目标是绝对最小化吗absolutemaxObjectiveCount.
选择K.
.
在这个例子中,最小化的最大值罪
和余弦
具体说明罪
作为第一个目标,并设定absolutemaxObjectiveCount.
为1。
有趣= @ (x) [sin (x), cos (x));选择= optimoptions (“fminimax”那“绝对MaxObjectiveCount”,1); x0=1;A=[];%无约束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.
选项,将此绘图与示例中的绘图进行比较最小正反最大值.
获得极小极大点的位置和目标函数的值。有关目标函数的描述和绘图,请参见比较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(有趣,x0)
地方最低可能。约束满足。Fminimax停止,因为当前搜索方向的大小小于步长的值的量,但是满足约束公差的值满足。
x =1×2-2.5000 - 2.2500
fval=1×31.7500 1.7500 1.7500
所有三个目标函数在最低限度点处具有相同的值。无约束问题通常具有至少两个等于解决方案的目标,因为如果任何目标的点不是局部最小值,并且只有一个目标具有最大值,则可以降低最大目标。
这个例子的目标函数是线性加常数。有关目标函数的描述和绘图,请参见比较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”那“显示”那'iter'); Aeq=[];%没有其他限制说真的= [];磅= [];乌兰巴托= [];nonlcon = [];[x, fval maxfval, exitflag,输出,λ)=...fminimax(有趣,x0, A、b Aeq,说真的,磅,乌兰巴托,nonlcon,选项)
目标最大线搜索方向Iter F计数值约束步长导数程序0 4 0 6 1 9 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 lssteplength:1步长:6.0684e-10算法:“活动集”firstorderopt:[]冲突:8.1323e-09消息:“…”
λ=带字段的结构:下:[2x1 double]上:[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,目标,重量);
的用户定义值X
和F
是数组,fminimax
使用线性索引将它们转换为向量(请参见数组索引).
最小化矢量某些元素的最坏情况绝对值F(X)(即min{max abs{F(X)}}),将这些目标划分为F的第一个元素并使用优化选择
设定absolutemaxObjectiveCount.
选择这些目标的数量。这些目标必须被划分为向量的第一个元素F
返回的有趣的
.例如,看到使用一个目标的绝对值来解决极小的问题.
假设目标函数的梯度也可以计算出来和这specifyobjectivegradient.
选择是真正的
,按下列规定:
选择= optimoptions(‘fminimax’,‘SpecifyObjectiveGradient’,真的)
在本例中,函数有趣的
必须在第二个输出参数中返回渐变值G
(a)在X
.梯度由偏导数组成df / dx.每一个F
当时X
. 如果F
是长度的向量m
和X
长度N
,在哪里N
是的长度x0
,然后是梯度G
的F (x)
是一个N
-借-m
矩阵G (i, j)
是的偏导数F (j)
关于x(我)
(那就是j
th列G
是物体的梯度j
目标函数F (j)
).如果您定义F
作为数组,则前面的讨论适用于F (:)
的线性排序F
数组。无论如何,G
是一个二维矩阵。
注
设置specifyobjectivegradient.
来真正的
仅当问题没有非线性约束时,或当问题具有带约束的非线性约束时,该方法才有效specifyConstraintGRadient.
设置为真正的
.在内部,目标被折叠到约束中,因此求解器需要提供梯度(客观和约束)以避免估计梯度。
数据类型:烧焦
|一串
|function_handle.
x0
-起始点一种
-线性不等式约束线性不等式约束,指定为实矩阵。一种
是一个m
-借-N
矩阵,在哪里m
是不平等的数量,和N
是变量的数量(元素的数量x0
).对于大问题,请通过一种
作为稀疏矩阵。
一种
编码m
线性不等式
A*x<=b
那
哪里X
列向量是N
变量x(:)
,B.
是一个具有m
元素。
例如,指定
X1+ 2X2≤10
3.X1+ 4X2≤20
5.X1+ 6X2≤30日
输入以下约束条件:
= [1, 2, 3, 4, 5, 6);b =(10、20、30);
例子:要指定x分量的和为1或更小,请使用A=一(1,N)
和B = 1
.
数据类型:双重的
B.
-线性不等式约束线性不平等约束,指定为真正的矢量。B.
是一个m
元素向量相关的一种
矩阵。如果你通过了B.
作为行向量,求解器内部转换B.
到列向量b(:)
.对于大问题,不予考虑B.
作为一个稀疏向量。
B.
编码m
线性不等式
A*x<=b
那
哪里X
列向量是N
变量x(:)
,一种
矩阵的大小是多少m
-借-N
.
例如,考虑一下这些不平等:
X1+ 2X2≤10
3.X1+ 4X2≤20
5.X1+ 6X2≤30。
输入以下约束指定不等式。
= [1, 2, 3, 4, 5, 6);b =(10、20、30);
例子:要指定x分量的和为1或更小,请使用A=一(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];Beq = [10; 20];
例子:若要指定x分量的总和为1,请使用Aeq = 1 (1, N)
和Beq = 1
.
数据类型:双重的
说真的
-线性等式约束线性等式约束,指定为实向量。说真的
是一个我
元素向量相关的AEQ.
矩阵。如果你通过了说真的
作为行向量,求解器内部转换说真的
到列向量贝基(:)
.对于大问题,不予考虑说真的
作为一个稀疏向量。
说真的
编码我
线性等式
Aeq * x =说真的
那
哪里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 = 1 (1, N)
和Beq = 1
.
数据类型:双重的
磅
-下界下限,指定为实向量或实数组。如果x0
等于中的元素数磅
,然后磅
指定
x(我)> =磅(我)
总的来说一世
.
如果努美尔(磅)<努美尔(x0)
,然后磅
指定
x(我)> =磅(我)
为1<=i<=numel(磅)
.
如果有更少的元素磅
比在x0
,解算器发出警告。
例子:要指定所有x分量都为正值,请使用lb=零(尺寸(x0))
.
数据类型:双重的
乌兰巴托
-上界上界,指定为实向量或实数组。如果元素的数量x0
等于中的元素数乌兰巴托
,然后乌兰巴托
指定
x(i)<=ub(i)
总的来说一世
.
如果numel(Ub)
乌兰巴托
指定
x(i)<=ub(i)
为1<=i<=numel(ub)
.
如果有更少的元素乌兰巴托
比在x0
,解算器发出警告。
例子:要指定所有x分量都小于1,使用UB =α(大小(x0))
.
数据类型:双重的
非LCON
-非线性约束非线性约束,指定为函数句柄或函数名。非LCON
是接受向量还是数组的函数X
并返回两个数组,c (x)
和CEQ(x)
.
c (x)
非线性不等式约束数组在X
.fminimax
试图满足
c(x)<=0
的所有条目C
.
CEQ(x)
是非线性平等约束的数组X
.fminimax
试图满足
ceq(x)=0
的所有条目CEQ.
.
例如,
x = fminimax (@mycon @myfun, x0,…)
哪里麦肯
是一个MATLAB函数,如:
函数[c,ceq] = mycon(x)%计算非线性不等式在x. ceq =…计算x处的非线性等式。
假设约束的梯度也可以计算出来和这specifyConstraintGRadient.
选择是真正的
,按下列规定:
options=options('fminimax','specifyconstraintgradent',true)
在本例中,函数非LCON
还必须返回,在第三和第四个输出参数中,GC
,梯度c (x)
,GCeq
,梯度CEQ(x)
.看非线性约束有关如何“条件化”渐变以在不接受提供的渐变的解算器中使用的说明,请参见。
如果非LCON
返回一个向量C
的m
组件和X
长度N
,在哪里N
是的长度x0
,然后是梯度GC
的c (x)
是一个N
-借-m
矩阵,在哪里GC(i,j)
是的偏导数c(j)
关于x(我)
(那就是j
th列GC
是物体的梯度j
不平等限制c(j)
).同样地,如果CEQ.
有P.
组件,梯度GCeq
的CEQ(x)
是一个N
-借-P.
矩阵,在哪里GCeq (i, j)
是的偏导数行政长官(j)
关于x(我)
(那就是j
th列GCeq
是物体的梯度j
平等约束行政长官(j)
).
注
设置specifyConstraintGRadient.
来真正的
只是有效的时候specifyobjectivegradient.
被设置为真正的
.在内部,目标被折叠到约束中,因此求解器需要同时提供梯度(目标和约束),以避免估计梯度。
注
因为优化工具箱™ 函数只接受类型为的输入双重的
,用户提供的目标和非线性约束函数必须返回类型的输出双重的
.
看传递额外参数有关如何参数化非线性约束函数的说明非LCON
,如有需要。
数据类型:烧焦
|function_handle.
|一串
选择权
-优化选项优化选择
|结构,如optimset
回报的输出,指定为优化选项优化选择
或一种结构,如optimset
返回。
某些选择缺席优化选择
显示。这些选项在下表中以斜体显示。有关详细信息,请参见视图选项.
有关具有不同名称的选项的详细信息optimset
, 看当前和旧选项名称.
选项 | 描述 |
---|---|
absolutemaxObjectiveCount. |
元素数F一世(X)要使F一世.看使用一个目标的绝对值来解决极小的问题. 为 |
约束耐受性 |
约束违背的终止容限(正标量)。默认值是 为 |
诊断 | 显示关于要最小化或解决的功能的诊断信息。的选择是 |
DiffMaxChange | 有限差分梯度(正标量)变量的最大变化。默认值为 |
DiffMinChange | 有限差分梯度(正标量)变量变化的最小值。默认值是 |
|
显示水平(见迭代显示):
|
有限差分步长 |
有限差分的标量或向量步长因子。当你设定
签名'(x)= sign(x) 除了符号′(0)=1 . 中心有限差分是
有限差分步长 展开成一个向量。默认值是sqrt (eps) 对于正向有限差分,和EPS ^(1/3) 用于中央有限差异。为 |
有限差分类型 |
用于估计梯度的有限差分类型 当估计两种类型的有限差异时,算法小心遵循界限。例如,它可能是向后差异而不是前向差异,以避免在界限之外的点处评估。 为 |
FunctionTolerance |
函数值的终止公差(正标量)。默认值是 为 |
欢乐支票 | 检查是否表示目标函数和约束值有效。 |
MaxFunctionEvaluations. |
允许的最大函数求值数(正整数)。默认值是 为 |
最大 |
允许的最大迭代次数(正整数)。默认值是 为 |
maxsqpiter. | 允许的最大SQP迭代次数(正整数)。默认值是 |
MeritFunction | 如果此选项设置为 |
OptimalityTolerance |
一阶最优性的终止容限(正标量)。默认值是 为 |
OutputFcn |
一个或多个用户定义的函数,用于在每次迭代时调用优化函数。通过功能句柄或功能句柄的单元格数组。默认值为none( |
Plotfcn. |
显示算法执行过程中各种进度的图。从预定义的情节中选择或编写您自己的。传递名称、函数句柄或由名称或函数句柄组成的单元数组。对于定制的绘图函数,传递函数句柄。默认值为none(
自定义绘图功能使用与输出功能相同的语法。看优化工具箱的输出函数和输出函数和绘图函数语法. 为 |
Rellinesrchbnd. | 直线搜索步长上的相对界(一个实非负标量值),使总位移在 |
RelLineSrchBndDuration | 中指定的边界所对应的迭代次数 |
specifyConstraintGRadient. |
用户定义的非线性约束函数的梯度。此选项设置为 为 |
specifyobjectivegradient. |
由用户定义的目标函数的梯度。参考的描述 为 |
阶跃公差 |
终止上公差 为 |
TolConSQP | 内部迭代SQP约束冲突的终止容差(正标量)。默认值为 |
TypicalX |
典型的 |
UseParallel |
使用并行计算的选项。当此选项设置为 |
例子:optimoptions(“fminimax”、“PlotFcn”、“optimplotfval”)
fval
-目标函数在解处的值解的目标函数值,以实数组形式返回。通常地fval
=有趣的(x)
.
马克斯瓦尔
-解的目标函数值的最大值目标函数在解处值的最大值,作为实标量返回。maxfval = max (fval (:))
.
ExitFlag.
- - -原因fminimax
停止原因fminimax
停止,返回整数。
|
函数收敛到一个解 |
|
搜索方向的大小小于指定的公差,约束冲突小于 |
|
方向导数的大小小于指定的公差,且约束冲突小于 |
|
超出迭代次数 |
|
通过输出函数或绘图函数停止 |
|
没有找到可行点。 |
输出
-优化流程信息有关优化过程的信息,返回与此表中字段的结构。
迭代 |
采取的迭代人数 |
功能计数 |
功能评估的数量 |
lssteplength |
相对于搜索方向的行搜索步长的大小 |
违反合同 |
约束函数的极大值 |
stepsize |
最后一次位移的长度 |
算法 |
优化算法 |
第一顺序选择 |
一阶最优性的衡量 |
信息 |
退出消息 |
这优化活动编辑器任务为fminimax
.
要并行运行,请设置“UseParallel”
选择真正的
.
选择= optimoptions ('
solvername
”、“UseParallel’,真的)
有关详细信息,请参阅在优化工具箱中使用并行计算.
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。