求解线性规划问题
线性规划求解
查找指定问题的最小值
F那X那B.那贝卡那磅,乌兰巴托向量,一种和AEQ.矩阵。
笔记
linprog.
仅适用于基于求解器的方法。有关这两种优化方法的讨论,请参见首先选择基于问题或基于解决者的方法.
找到最低限度X
= linprog (问题
)问题
中所描述的结构问题
.
你可以导入一个问题
结构从一个MPS文件使用mpsread
.您还可以创建问题
来自A.的结构OptimizationProblem
对象的使用prob2struct.
.
解决由线性不等式定义的简单线性程序。
对于这个例子,使用这些线性不等式约束:
A = [1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1];B = [2 1 2 1 -1 2];
使用目标函数 .
f = [-1 -1/3];
解线性规划。
x = linprog (f, A, b)
找到最优解。
x =2×10.6667 - 1.3333
解决由线性不等式和线性等分定义的简单线性程序。
对于这个例子,使用这些线性不等式约束:
A = [1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1];B = [2 1 2 1 -1 2];
使用线性等式约束 .
Aeq = [1 1/4];说真的= 1/2;
使用目标函数 .
f = [-1 -1/3];
解线性规划。
x = linprog (f, A、b、Aeq beq)
找到最优解。
x =2×10 2
用线性不等式、线性等式和边界解决一个简单的线性规划。
对于这个例子,使用这些线性不等式约束:
A = [1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1];B = [2 1 2 1 -1 2];
使用线性等式约束 .
Aeq = [1 1/4];说真的= 1/2;
设置这些界限:
磅= (-0.5);乌兰巴托= [1.5,1.25];
使用目标函数 .
f = [-1 -1/3];
解线性规划。
x = linprog (f, A、b Aeq,说真的,磅,乌兰巴托)
找到最优解。
x =2×10.1875 - 1.2500
“内点”
算法使用该方法解决线性程序“内点”
算法。
对于这个例子,使用这些线性不等式约束:
A = [1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1];B = [2 1 2 1 -1 2];
使用线性等式约束 .
Aeq = [1 1/4];说真的= 1/2;
设置这些界限:
磅= (-0.5);乌兰巴托= [1.5,1.25];
使用目标函数 .
f = [-1 -1/3];
设置选项以使用“内点”
算法。
选择= optimoptions ('linprog'那“算法”那“内点”);
使用求解线性程序“内点”
算法。
x = linprog (f, A、b Aeq,说真的,磅,乌兰巴托,选项)
最低发现满足约束。优化完成,因为目标函数在可行的方向上是非减小的,以便在功能公差的所选值内,并且对约束公差的所选值满足约束。
x =2×10.1875 - 1.2500
linprog.
这个例子展示了如何使用基于问题的方法设置一个问题,然后使用基于求解器的方法解决它。现在的问题是
创建一个OptimizationProblem
对象命名概率
代表这个问题。
x = Optimvar(“x”那下界的, 1'上行',1.5);y = Optimvar(“y”那下界的,-1 / 2,'上行', 1.25);概率= optimproblem ('客观的', x + y / 3,“ObjectiveSense”那“马克斯”);prob.constraints.c1 = x + y <= 2;prob.constraints.c2 = x + y / 4 <= 1;prob.constraints.c3 = x - y <= 2;prob.constraints.c4 = x / 4 + y> = -1;prob.constraints.c5 = x + y> = 1;prob.constraints.c6 = -x + y <= 2;prob.constraints.c7 = x + y / 4 == 1/2;
将问题对象转换为问题结构。
问题= prob2struct(概率);
解决由此产生的问题结构。
[溶胶,fval exitflag、输出]= linprog(问题)
找到最优解。
索尔=2×10.1875 - 1.2500
fval = -0.6042
exitflag = 1
输出=结构体字段:迭代:0构造:0消息:“找到了最佳解决方案。' algorithm: 'dual-simplex' firstorderopt: 0
返回的fval.
即使解决方案组件是阳性的,也是消极的。在内部,prob2struct.
将最大化问题转化为目标函数负的最小化问题。看最大化客观.
它的组成部分索尔
对应哪个优化变量?检查变量
财产概率
.
概率。变量
ans =结构体字段:x: [1 x1 optim.problemdef。y: [1x1 optimi .problemdef.OptimizationVariable]
你可能期望的那样,索尔(1)
对应于X
,索尔(2)
对应于y
.看算法.
计算一个简单线性规划的解和目标函数值。
不等式约束为
A = [1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1];B = [2 1 2 1 -1 2];
目标函数为 .
f = [-1 -1/3];
解决问题并返回目标函数值。
[x, fval] = linprog (f, A, b)
找到最优解。
x =2×10.6667 - 1.3333
fval = -1.1111
获取退出标志和输出结构以更好地理解解决方案流程和质量。
对于这个例子,使用这些线性不等式约束:
A = [1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1];B = [2 1 2 1 -1 2];
使用线性等式约束 .
Aeq = [1 1/4];说真的= 1/2;
设置这些界限:
磅= (-0.5);乌兰巴托= [1.5,1.25];
使用目标函数 .
f = [-1 -1/3];
设置选项以使用对偶单纯形的
算法。
选择= optimoptions ('linprog'那“算法”那对偶单纯形的);
求解线性程序并请求函数值、退出标志和输出结构。
[x, fval exitflag、输出]= linprog (f, A、b Aeq,说真的,磅,乌兰巴托,选项)
找到最优解。
x =2×10.1875 - 1.2500
fval = -0.6042
exitflag = 1
输出=结构体字段:迭代:0构造:0消息:“找到了最佳解决方案。' algorithm: 'dual-simplex' firstorderopt: 0
fval.
时,目标函数值大于返回目标函数值,因为有更多的约束。
ExitFlag.
= 1表示解决方案可靠。
输出
= 0表示linprog.
在解析过程中找到了解决方案,完全不需要迭代。
解一个简单的线性规划,并检验其解和拉格朗日乘数。
使用目标函数
f = [5;4;6);
使用线性不等式约束
a = [1 -1 1 3 2 4 3 2 0];B = [20; 42; 30];
约束所有变量为正:
磅= 0 (3,1);
放AEQ.
和贝卡
来[]
,表示不存在线性等式约束。
Aeq = [];说真的= [];
调用linprog.
,得到拉格朗日乘数。
[x,fval,出口,输出,lambda] = linprog(f,a,b,aeq,beq,lb);
找到最优解。
检查解决方案和拉格朗日乘法器。
x lambda.ineqlin lambda.lower
x =3×10 15.0000 3.0000
ans =3×10 1.5000 0.5000
ans =3×11.0000 0 0
lambda.ineqlin
第二个和第三个分量是非零的吗X
.这表明第二和第三线性不等式约束对等于的相等是满意的:
确认这是真的:
* x
ans =3×1-12.0000 42.0000 30.0000
lambda.lower
第一个分量是不是非零X
.这表明x (1)
它的下界是0。
F
-系数向量系数向量,指定为实向量或实数组。系数向量表示目标函数f ' * x
.符号假设F
是列向量,但可以使用行向量或数组。在内部,linprog.
转换F
到列向量f (:)
.
例子:f =(1、3、5、6)
数据类型:双
一种
-线性不等式约束线性不等式约束,指定为实矩阵。一种
是一个m
——- - - - - -N
矩阵,其中m
是不平等的数量,而且N
是变量的数量(长度F
).对于大问题,通过一种
作为稀疏矩阵。
一种
编码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,请取一个= 1 (1,N)
和b = 1
.
数据类型:双
AEQ.
-线性等式约束线性平等约束,指定为真实矩阵。AEQ.
是一个我
——- - - - - -N
矩阵,其中我
是等式的个数,和N
是变量的数量(长度F
).对于大问题,通过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 = ONE(1,N)
和Beq = 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或更小,请使用一个= 1 (1,N)
和b = 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 = ONE(1,N)
和Beq = 1
.
数据类型:双
磅
-下界下限,指定为真实的矢量或真实数组。如果长度F
等于磅
, 然后磅
指定
x(我)> =磅(我)
对所有一世
.
如果numel(lb)
磅
指定
x(我)> =磅(我)
为了1 <= I <= numel(lb)
.
在这种情况下,求解器发出警告。
例子:指定所有X组件都是正的,使用LB =零(尺寸(f))
.
数据类型:双
乌兰巴托
-上界上限,指定为真实的矢量或真实数组。如果长度F
等于乌兰巴托
, 然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
对所有一世
.
如果元素个数(乌兰巴托)<元素个数(f)
, 然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
为了1 <= I <= numel(ub)
.
在这种情况下,求解器发出警告。
例子:指定所有x分量小于1
,使用UB =α(大小(f))
.
数据类型:双
选项
-优化选项优化选择
|结构optimset
回报的输出,指定为优化选项优化选择
或者一个结构optimset
的回报。
有些选项适用于所有算法,有些则与特定算法相关。看优化选择参考有关详细信息。
某些选择缺席优化选择
显示。这些选项在下表中以斜体显示。有关详细信息,请参见视图选项.
所有的算法 | |
算法 |
选择优化算法:
有关选择算法的信息,请参阅线性规划算法. |
诊断 | 显示关于要最小化或解决的函数的诊断信息。选择 |
|
显示水平(见迭代显示):
|
|
允许的最大迭代次数,一个正整数。默认值为:
为了 |
|
终止公差对双重可行性,正标量。默认值为:
为了 |
内部点算法 | |
ConstraintTolerance |
约束的可行性容差,一个标量 为了 |
预处理 | 算法迭代前LP预处理水平。指定 |
对偶单纯形算法 | |
ConstraintTolerance |
约束的可行性容差,一个标量 为了 |
MaxTime |
算法运行的最大时间(以秒为单位)。默认值是 |
预处理 | 对偶单纯形算法迭代前LP预处理水平。指定 |
例子:选择= optimoptions(“linprog”、“算法”,“内点”,“显示”,“iter”)
问题
-问题的结构问题结构,指定为具有以下字段的结构。
字段名 | 入口 |
---|---|
|
线性目标函数向量F |
|
线性不等式约束的矩阵 |
|
线性不等式约束的向量 |
|
线性平等约束的矩阵 |
|
线性平等约束的矢量 |
磅 |
下限矢量 |
乌兰巴托 |
上界向量 |
|
'linprog' |
|
选择的选项优化选择 |
你必须至少提供解算器
字段问题
结构。
数据类型:结构体
X
——解决方案解决方案,返回真正的矢量或真实数组。的大小X
和尺寸一样吗F
.
fval.
-目标函数在解处的值目标函数在解处的值,以实数返回。一般来说,fval.
=f ' * x
.
ExitFlag.
- - -原因linprog.
停止原因linprog.
已停止,返回为整数。
|
该解决方案对于相对而是可行的 |
|
函数收敛到一个解 |
|
超出迭代次数 |
|
没有找到可行点。 |
|
问题是无限的。 |
|
|
|
原始和双重问题都是不可行的。 |
|
搜索方向变小了。不可能取得进一步进展。 |
|
求解器损失了可行性。 |
Exitflags3.
和9
涉及具有很大侵犯性的金宝搏官方网站解决方案。这些通常由具有大条件数量的线性约束矩阵或具有大解决方案组件的问题。为了纠正这些问题,尝试缩放系数矩阵,消除冗余线性约束,或者在变量上给出更紧的边界。
输出
—优化过程信息关于优化过程的信息,作为带有这些字段的结构返回。
迭代 |
的迭代次数 |
算法 |
优化算法 |
cgiterations |
0(只包含内部点算法,用于向后兼容) |
信息 |
退出消息 |
constrviolation |
约束函数的最大值 |
firstordopt. |
一阶最优测量 |
对于描述,请参阅对偶单纯形算法.
这“interior-point-legacy”
方法基于LIPSOL(线性内部点求解器,[3]),这是梅赫罗特拉的预测-校正算法的一个变体[2],一种原-对偶内点法。在算法开始迭代之前,需要进行许多预处理步骤。看Interior-Point-Legacy线性规划.
算法的第一阶段可能涉及到约束的一些预处理(见Interior-Point-Legacy线性规划).有几种情况可能导致linprog.
带着不可行的信息退出。在每种情况下,linprog.
返回一个负ExitFlag.
,表示指示失败。
如果在中检测到一行全部为零AEQ.
,而是对应的元素贝卡
不为零,那么退出消息是
由于不可发出而退出:约束矩阵中的全零行在相应的右侧条目中没有零。
如果元素之一X
,则退出消息是
由于不可行而退出:目标f'*x在下面的无界。
如果其中一行AEQ.
只有一个非零元素,那么相关的值X
被称为单例变量。在这个例子中,是X
可以从AEQ.
和贝卡
.如果计算的值违反另一个约束,则退出消息是
由于不可行性而退出:平等约束中的单例变量是不可行的。
如果单例变量可以被解出,但是解违反了上限或下限,那么退出消息是
由于不可行性而退出:等式约束中的单例变量不在限制范围内。
笔记
预处理步骤是累积的。例如,即使您的约束矩阵没有所有零的行开始,其他预处理步骤也会导致这样的行发生。
当预处理完成后,算法开始迭代,直到满足停止准则。(有关残差、原问题、对偶问题和相关停止准则的更多信息,请参阅Interior-Point-Legacy线性规划)。如果残差在增长而不是变小,或者残差既不增长也不收缩,则分别显示以下两条终止消息中的一条,
一个或多个残差、对偶间隙或总相对误差已增长到其最小值的100000倍以上:
或
一个或多个残差、对偶间隙或总相对误差停止:
在显示这些消息之一之后,后面跟着下列消息之一,表示对偶、原始或两者都是不可行的。
对偶似乎是不可行的(原始无界)。(原始残留< OptimalityTolerance.)
原始的似乎是不可行的(和对偶无界)。(双残留<优化公差。)
由于双剩余>根号(OptimalityTolerance),这个对偶看起来是不可行的(原始无界)。(原始残留< 10*优化公差。)
由于原始残差>根号(OptimalityTolerance),所以原始看起来是不可行的(并且对偶无界)。(双残留< 10*优化公差。)
由于原始目标< -1e+10和对偶目标< 1e+6,因此对偶似乎是不可行的和原始无界的。
由于双目标> 1e+10和原目标> -1e+6,原目标出现不可行和对偶无界。
原始的和二元的似乎都是不可行的。
例如,原始(目标)可以是无界的,原始残差(原始约束满足的度量)可以很小。
这“内点”
算法类似于“interior-point-legacy”
,但使用了更有效的因子分解程序,并使用了不同的预处理。看内部点LINPROG算法.
这优化活动编辑器任务为linprog.
.
Dantzig, g.b., A. Orden和P. Wolfe。“在线性不等式约束下最小化线性形式的广义单纯形方法”。太平洋杂志数学。,卷。5,1955,第183-195页。
[2] Mehrotra, S.《关于原-对偶内点方法的实现》。SIAM优化学报, 1992年第2卷,575-601页。
[3]张勇,“基于MATLAB环境下的内点法求解大规模线性规划”。技术报告TR96-011995年7月,马里兰州巴尔的摩市,马里兰大学数学与统计学系。
您单击了与此MATLAB命令对应的链接:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
你也可以从以下列表中选择一个网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。