求解线性规划问题
线性规划求解
查找指定问题的最小值
f,x,b,说真的,磅,乌兰巴托向量,一个和Aeq矩阵。
请注意
linprog
仅适用于基于求解器的方法。有关这两种优化方法的讨论,请参见首先选择基于问题或基于解决者的方法.
求最小值x
= linprog (问题
)问题
中所描述的结构问题
.
您可以导入问题
结构从一个MPS文件使用mpsread
.您还可以创建问题
结构的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“UpperBound”, 1.5);y = optimvar (“y”,下界的1/2,“UpperBound”, 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
输出=结构体字段:迭代:1构造: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
输出=结构体字段:迭代:1构造:0消息:“找到了最佳解决方案。' algorithm: 'dual-simplex' firstorderopt: 0
fval
时,目标函数值大于返回目标函数值,因为有更多的约束。
exitflag
= 1表示解决方案可靠。
output.iterations
= 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 exitflag、输出λ)= linprog (f, A、b Aeq,说真的,磅);
找到最优解。
检验解和拉格朗日乘数。
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)
数据类型:双
一个
- - - - - -线性不等式约束线性不等式约束,指定为实矩阵。一个
是一个米
——- - - - - -N
矩阵,米
是不平等的数量,和N
是变量的数量(长度f
).对于大问题,不予考虑一个
作为一个稀疏矩阵。
一个
编码米
线性不等式
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
.
数据类型:双
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];说真的=(10、20);
例子:要指定x分量和为1,请取Aeq = 1 (1, N)
和说真的= 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 * 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
.
数据类型:双
磅
- - - - - -下界下界,指定为实向量或实数组。如果长度f
等于磅
,然后磅
指定
x(我)> =磅(我)
对所有我
.
如果元素个数(磅)<元素个数(f)
,然后磅
指定
x(我)> =磅(我)
为1 <= I <= numel(lb)
.
在这种情况下,求解器发出警告。
例子:要指定所有x分量都是正数,请使用磅= 0(大小(f))
.
数据类型:双
乌兰巴托
- - - - - -上界上界,指定为实向量或实数组。如果长度f
等于乌兰巴托
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
对所有我
.
如果元素个数(乌兰巴托)<元素个数(f)
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
为1 <= I <= numel(ub)
.
在这种情况下,求解器发出警告。
例子:指定所有x分量小于1
,使用乌兰巴托= 1(大小(f))
.
数据类型:双
选项
- - - - - -优化选项optimoptions
|结构optimset
返回的输出,指定为优化选项optimoptions
或者一个结构optimset
的回报。
有些选项适用于所有算法,有些则与特定算法相关。看到优化选择参考的详细信息。
控件中缺少一些选项optimoptions
显示。这些选项在下表中以斜体显示。有关详细信息,请参见视图选项.
所有的算法 | |
算法 |
选择优化算法:
有关选择算法的信息,请参见线性规划算法. |
诊断 | 显示关于要最小化或解决的函数的诊断信息。选择 |
|
显示水平(见迭代显示):
|
|
允许的最大迭代次数,一个正整数。默认的是:
为 |
|
对偶可行性的终止容限,一个正标量。默认的是:
为 |
内点算法 | |
ConstraintTolerance |
约束的可行性容差,一个标量 为 |
进行预处理 | 算法迭代前LP预处理水平。指定 |
对偶单纯形算法 | |
ConstraintTolerance |
约束的可行性容差,一个标量 为 |
MaxTime |
算法运行的最大时间(以秒为单位)。默认值是 |
进行预处理 | 对偶单纯形算法迭代前LP预处理水平。指定 |
例子:选择= optimoptions(“linprog”、“算法”,“内点”,“显示”,“iter”)
问题
- - - - - -问题的结构问题结构,指定为具有以下字段的结构。
字段名 | 条目 |
---|---|
|
线性目标函数向量f |
|
线性不等式约束的矩阵 |
|
线性不等式约束的向量 |
|
线性等式约束的矩阵 |
|
线性等式约束的向量 |
磅 |
下界向量 |
乌兰巴托 |
上界向量 |
|
“linprog” |
|
选择创建optimoptions |
你必须至少提供解算器
字段问题
结构。
数据类型:结构体
x
——解决方案解,返回实向量或实数组。的大小x
和尺寸一样吗f
.
fval
-目标函数在解处的值目标函数在解处的值,以实数返回。一般来说,fval
=f ' * x
.
exitflag
- - -原因linprog
停止原因linprog
已停止,返回为整数。
|
这个解相对于相对值是可行的 |
|
函数收敛到一个解 |
|
超过迭代次数 |
|
没有找到可行点。 |
|
问题是无限的。 |
|
|
|
原始问题和对偶问题都是不可行的。 |
|
搜索方向变小了。不可能取得进一步进展。 |
|
解决了可行性。 |
Exitflags3.
和-9
与具有很大不可行性的金宝搏官方网站解决方案相关。这些通常是由具有较大条件数的线性约束矩阵或具有较大解分量的问题产生的。为了纠正这些问题,尝试缩放系数矩阵,消除冗余的线性约束,或给变量更严格的界限。
输出
—优化过程信息关于优化过程的信息,作为带有这些字段的结构返回。
迭代 |
的迭代次数 |
算法 |
优化算法 |
cgiterations |
0(只包含内部点算法,用于向后兼容) |
消息 |
退出消息 |
constrviolation |
约束函数的最大值 |
firstorderopt |
一阶最优性测量 |
有关描述,请参见对偶单纯形算法.
的“interior-point-legacy”
基于线性内点求解器(Linear Interior Point Solver,[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。“在线性不等式约束下最小化线性形式的广义单纯形方法”。太平洋数学》杂志上。1955年第5卷,第183-195页。
[2] Mehrotra, S.《关于原-对偶内点方法的实现》。SIAM优化学报, 1992年第2卷,575-601页。
[3]张勇,“基于MATLAB环境下的内点法求解大规模线性规划”。技术报告TR96-011995年7月,马里兰州巴尔的摩市,马里兰大学数学与统计学系。
您已经有了geänderte版本死亡Beispiels。Möchten您是谁? Änderungen öffnen?
您有一个连接到MATLAB-Befehl entspricht:
Führen Sie den Befehl durch Eingabe in das MATLAB-Befehlsfenster aus。Webbrowser unterstützen keine MATLAB-Befehle。
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。