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];
找到极大极小点的不平等(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
解决Bound-Constrained极大极小问题
这个例子的目标函数是线性加常数。描述和目标函数的情节,看到的比较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] = unitdisk c (x) = x (1) ^ 2 + x (2) ^ 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
选择,比较这阴谋情节的例子最大的罪恶,因为最小化。
获得极大极小值
获得极大极小点的位置和目标函数的值。描述和目标函数的情节,看到的比较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
所有三个目标函数极大极小点都包含相同的值。无约束问题通常有至少两个目标是平等的解决方案,因为如果一个点不是一个局部最小值为任何目的,只有一个目标的最大值,然后可以降低的最大目标。
获得所有的极小极大输出
这个例子的目标函数是线性加常数。描述和目标函数的情节,看到的比较fminimax和fminunc。
设置目标函数的三个线性函数形式 为三个向量 和三个常量 。
一个= (1,1);b = (1, 1);c = [0, 1];a0 = 2;b0 = 3;c0 = 4;有趣= @ (x) [x * + a0, * b + b0, x * c + c0];
找到极大极小点的不平等(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-count价值约束steplength导数过程0 4 0 6 1 9 5 0 1 4.889 8.882 e-16 1 -0.302 0.981 - 2 14黑森修改两次3 19 3.4 -0.302 8.132 e-09 1黑森修改局部最小值的两倍。约束满足。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 stepsize: 6.0684平台以及算法:“激活集”firstorderopt: [] constrviolation: 8.1323 e-09消息:“局部最小值。约束满足....”
λ=结构体字段:低(2 x1双):上:[2 x1双]eqlin: [0 x1双]eqnonlin: [0 x1双]ineqlin: 0.2000 ineqnonlin: [0 x1双]
检查返回的信息:
两个目标函数值相等的解决方案。
4迭代和19中的求解收敛函数评估。
的
lambda.ineqlin
值为零,表明线性约束的解决方案很活跃。
输入参数
有趣的
- - - - - -目标函数
函数处理|函数名
目标函数,指定为一个函数处理或函数名。有趣的
是一个函数,它接受一个向量x
并返回一个向量F
的目标函数值x
。你可以指定函数有趣的
作为一个函数的函数处理文件:
x = fminimax (@myfun x0,目标,重量)
在哪里myfun
MATLAB是一种®等功能
函数F = myfun F (x) =…在x %计算函数值。
有趣的
还可以为一个匿名函数是一个函数处理:
x = fminimax (@ (x) sin (x) * x), x0,目标,重量);
fminimax
通过x
任何非线性目标函数和约束函数的形状x0
论点。例如,如果x0
是5-by-3数组,那么fminimax
通过x
来有趣的
作为一个5-by-3数组。然而,fminimax
增加线性约束矩阵一个
或Aeq
与x
转换后x
的列向量x (:)
。
最小化最坏的绝对值的一些元素的向量F(x)(即最小{最大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
3x1+ 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
3x1+ 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我< < = =元素个数(磅)
。
如果磅
有更少的元素比x0
,解决者发出警告。
例子:指定,所有的x分量都是积极的,使用磅= 0(大小(x0))
。
数据类型:双
乌兰巴托
- - - - - -上界
真正的向量|真正的数组
上界,指定为一个真正的向量或真正的数组。如果元素的数量x0
等于元素的数量乌兰巴托
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
对所有我
。
如果元素个数(乌兰巴托)<元素个数(x0)
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
为1我< < = =元素个数(乌兰巴托)
。
如果乌兰巴托
有更少的元素比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] = mycon c (x) =…%计算非线性不等式测查x =…在x %计算非线性等式。
假设的梯度约束也可以计算和的SpecifyConstraintGradient
选择是真正的
,规定:
选择= optimoptions (‘fminimax’,‘SpecifyConstraintGradient’,真的)
在这种情况下,函数nonlcon
还必须返回,在第三和第四输出参数,GC
的梯度,c (x)
,GCeq
的梯度,量表(x)
。看到非线性约束解释如何“conditionalize”梯度用于解决者,不接受提供的梯度。
如果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 |
一个或多个用户定义的函数,每个迭代的优化函数调用。通过一个函数处理或处理单元阵列的功能。默认是没有( |
PlotFcn |
情节在算法执行时出现进步的各种措施。从预定义的情节或编写自己的选择。通过一个名称,名称或函数的函数处理或单元阵列处理。自定义绘制函数,通过函数处理。默认是没有(
自定义函数使用相同的语法作为输出函数。看到输出函数优化工具箱和输出函数和情节函数的语法。 为 |
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
。
扩展功能
自动并行支持金宝app
加速代码通过自动运行并行计算使用并行计算工具箱™。
版本历史
之前介绍过的R2006a
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。金宝app
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。