linprog
解决线性规划问题
语法
描述
线性规划求解
找到指定的最小的问题
f,x,b,说真的,磅,乌兰巴托向量,一个和Aeq矩阵。
请注意
linprog
仅适用于solver-based方法。两种优化方法的讨论,请参阅首先选择具体问题具体分析或Solver-Based方法。
发现的最低标准x
= linprog (问题
)问题
描述的结构问题
。
您可以导入一个问题
结构从一个议员文件使用mpsread
。您还可以创建一个问题
结构的OptimizationProblem
对象的使用prob2struct
。
例子
线性规划、线性不等式约束
解决一个简单的线性程序由线性不等式定义的。
对于这个示例,使用这些线性不等式约束:
A = [1 1 1 1/4 1 1 1/4 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/4 1 1 1/4 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/4 1 1 1/4 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/4 1 1 1/4 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
使用具体问题具体分析的方法解决LPlinprog
这个例子展示了如何设置一个问题通过具体问题具体分析的方法,然后使用solver-based方法解决它。现在的问题是
创建一个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 constrviolation: 0消息:“找到最优解。”算法:“对偶单纯形”firstorderopt: 0
返回的fval
是负的,即使是积极的解决方案组件。在内部,prob2struct
最大化问题转化为目标函数的最小化问题的负面。看到最大化客观。
它的组成部分索尔
对应的优化变量?检查变量
的属性概率
。
prob.Variables
ans =结构体字段:x: [1 x1 optim.problemdef。OptimizationVariable] y: [1 x1 optim.problemdef.OptimizationVariable]
如您所料,索尔(1)
对应于x
,索尔(2)
对应于y
。看到算法。
返回目标函数值
计算一个简单的解决方案和目标函数值线性规划。
不等式约束的
A = [1 1 1 1/4 1 1 1/4 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/4 1 1 1/4 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 constrviolation: 0消息:“找到最优解。”算法:“对偶单纯形”firstorderopt: 0
fval
目标函数值大于返回目标函数值,因为有更多的限制。exitflag
= 1表明,解决方案是可靠的。output.iterations
= 0表示linprog
在presolve找到解决方案,不需要进行迭代。
获得解决方案和拉格朗日乘数法
解决一个简单的线性程序并检查解决方案和拉格朗日乘数法。
使用目标函数
f = [5;4;6);
使用线性不等式约束
一个= [1 1 1 2 3 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
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
是变量的数量(长度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
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 * 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我< < = =元素个数(磅)
。
在这种情况下,解决者发出警告。
例子:指定,所有的x分量都是积极的,使用磅= 0(大小(f))
。
数据类型:双
乌兰巴托
- - - - - -上界
真正的向量|真正的数组
上界,指定为一个真正的向量或真正的数组。如果的长度f
等于的长度乌兰巴托
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
对所有我
。
如果元素个数(乌兰巴托)<元素个数(f)
,然后乌兰巴托
指定
x (i) < =乌兰巴托(我)
为1我< < = =元素个数(乌兰巴托)
。
在这种情况下,解决者发出警告。
例子:指定所有的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算法
的“interior-point-legacy”
方法是基于LIPSOL(线性内点解算器,[3]),这是一个变体Mehrotra预估的算法[2],一个内点方法。大量的预处理步骤发生在算法迭代开始之前。看到Interior-Point-Legacy线性规划。
第一阶段的算法可能涉及的一些预处理约束(见Interior-Point-Legacy线性规划)。几个条件可能会导致linprog
退出的消息不可能实行。在每种情况下,linprog
返回一个负exitflag
,表示表示失败。
如果一行的检测到零
Aeq
,但相应的元素说真的
不为零,那么退出消息退出不可行性:约束矩阵的零行没有零在相应的眼睛水平的条目。
如果一个元素
x
发现下面不是有界,然后退出消息退出不可行性:客观f ' * x是无界的。
如果一个行
Aeq
只有一个非零元素,那么相关的价值呢x
被称为单例变量。在这种情况下,价值的组成部分x
可以计算Aeq
和说真的
。如果该值计算违反另一个约束,那么退出消息退出不可行性:单变量等式约束是不可行的。
如果单变量可以解决,但是解决方案违背了上界或下界,然后退出消息
退出不可行性:单变量的等式约束并不在允许范围内。
请注意
累积的预处理步骤。例如,即使你的约束矩阵没有行0开始,等预处理步骤可能导致连续发生。
预处理结束时,迭代算法的一部分开始直到满足停止条件。(关于残差的更多信息,原始问题,对偶问题,和相关的停止标准,明白了Interior-Point-Legacy线性规划)。如果剩余工资的增长,而不是越来越小,或残差既不增加也不减少,其中一个终止消息显示后,分别
一个或更多的剩余工资,二元性缺口,或全部相对误差增长100000倍它的最小值:
或
一个或更多的剩余工资,二元性差距,或总相对误差已经停滞:
这些消息的显示,紧随其后的是下面的消息表明双之一,原始的,或者两者都似乎不可行。
双重似乎不可行(原始的)。(原始残余< OptimalityTolerance。)
原始的似乎不可行(双无限)。(双重残余< OptimalityTolerance。)
双重似乎不可行(原始的)自对偶残余> sqrt (OptimalityTolerance)。(原始残余< 10 * OptimalityTolerance。)
原始似乎不可行(双无界)自原始残余> sqrt (OptimalityTolerance)。(双重残余< 10 * OptimalityTolerance。)
双似乎不可行和原始的无限自原始目标< 1 e + 10和双重目标< 1 e + 6。
原始似乎不可行和双无限自双重目标> 1 e + 10和原始目标> 1 e + 6。
原始和双重似乎不可行。
例如,原始(客观)可以无限和原始的残余,这是一个原始的约束满足,可以小。
内点算法
的“内点”
算法类似于“interior-point-legacy”
,但有一个更有效的分解的习惯,和不同的预处理。看到内点linprog算法。
选择功能
应用程序
的优化住编辑任务提供了一个可视化界面linprog
。
引用
[1]Dantzig G.B.,一个。Orden, and P. Wolfe. “Generalized Simplex Method for Minimizing a Linear Form Under Linear Inequality Restraints.”太平洋数学》杂志上。5卷,1955年,页183 - 195。
[2]Mehrotra,美国“在一个非内点方法的实现。”暹罗杂志上优化2卷,1992年,页575 - 601。
[3],Y。,“Solving Large-Scale Linear Programs by Interior-Point Methods Under the MATLAB Environment.”技术报告TR96-01、数学和统计,马里兰大学巴尔的摩县,巴尔的摩,医学博士,1995年7月。
版本历史
之前介绍过的R2006a
打开举例
你们possedez一个版本modifiee de cet(中央东部东京)为例。Souhaitez-vous打开cet(中央东部东京)为例用vos修改吗?
对MATLAB
你们有派对在联合国留置权,对应这个对MATLAB:
倒实行la对saisissez-la在fenetre德对MATLAB。Les navigateurs web不sup金宝appportent Les MATLAB命令。
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。