解决线性编程问题
线性编程求解器
查找最低问题所指定的问题
f,x,b,说真的,磅, 和UB.是载体,和一个和Aeq是矩阵。
请注意
linprog
仅适用于基于求解器的方法。有关两种优化方法的讨论,请参阅首先选择基于问题的或基于求解的方法。
解决一个由线性不等式定义的简单线性规划。
对于此示例,请使用这些线性不等式约束:
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];BEQ = 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];BEQ = 1/2;
设置这些界限:
lb = [-1,-0.5];UB = [1.5,1.25];
使用目标函数 。
F = [-1 -1/3];
解决线性程序。
X = Linprog(F,A,B,AEQ,BEQ,LB,UB)
找到最佳解决方案。
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];BEQ = 1/2;
设置这些界限:
lb = [-1,-0.5];UB = [1.5,1.25];
使用目标函数 。
F = [-1 -1/3];
设置选项以使用'内点'
算法。
选项= Optimoptions(“linprog”,'算法','内点');
求解线性规划使用'内点'
算法。
x = Linprog(F,A,B,AEQ,BEQ,LB,UB,选项)
求满足约束条件的最小值。优化完成是因为目标函数在可行方向上是不递减的,到函数公差的选定值以内,并且约束条件满足到约束公差的选定值以内。
X =2×10.1875 1.2500
linprog
此示例显示如何使用基于问题的方法设置问题,然后使用基于求解器的方法来解决它。问题是
创建一个优化问题
对象命名概率
来表示这个问题。
x = optimvar ('X','indowbound',-1,“UpperBound”, 1.5);y = optimvar ('是','indowbound'1/2,“UpperBound”,1.25);prob = 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(prob);
解决结果的问题结构。
[SOL,FVAL,EXITFLAG,输出] = LINPROG(问题)
找到最佳解决方案。
sol =2×10.1875 1.2500
fval = -0.6042.
EXITFLAG = 1
输出=结构与字段:迭代:0 constrviroation:0消息:'找到最佳解决方案。'算法:'Dual-Simplex'FirstOrderOpt:0
回归fval
是负的,即使溶液的分量是正的。在内部,prob2struct
将最大化问题转变为目标函数负数的最小化问题。看到最大化目标。
哪个组成部分索尔
对应哪个优化变量?检查变量
的属性概率
。
prob.variables.
ans =.结构与字段:X:[1x1 Optim.Problemdef.OptimizationVariable] Y:[Optim.ProBlubleDef.OptimizationVariable]
如你所料,Sol(1)
对应于x
, 和Sol(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];BEQ = 1/2;
设置这些界限:
lb = [-1,-0.5];UB = [1.5,1.25];
使用目标函数 。
F = [-1 -1/3];
设置选项以使用'双重simplex'
算法。
选项= Optimoptions(“linprog”,'算法','双重simplex');
解决线性程序并请求功能值,退出标志和输出结构。
[x,fval,出口,输出] = linprog(f,a,b,aeq,beq,lb,Ub,选项)
找到最佳解决方案。
X =2×10.1875 1.2500
fval = -0.6042.
EXITFLAG = 1
输出=结构与字段:迭代:0 constrviroation:0消息:'找到最佳解决方案。'算法:'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);
约束所有变量为正数:
LB =零(3,1);
集Aeq
和说真的
至[]
,表示没有线性平等约束。
AEQ = [];beq = [];
称呼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
。这表明,第二个和第三个线性不等式约束满足等式:
检查这是真的:
斧头
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。
输入以下约束指定不等式。
a = [1,2; 3,4; 5,6];B = [10; 20; 30];
例子:要指定X组件最多添加1或更少,请携带a = =(1,n)
和B = 1
。
数据类型:双倍的
Aeq
- - - - - -线性平等约束线性等式约束,指定为实矩阵。Aeq
是一个我
-经过-N
矩阵,我
是平等的数量,和N
是变量的数量(长度)f
)。对于大问题,放弃Aeq
作为一个稀疏矩阵。
Aeq
编码我
线性平等
aeq * x = beq
,
在哪里x
是栏矢量N
变量X(:)
, 和说真的
列向量是我
元素。
例如,考虑以下平等:
x1+ 2x2+ 3x3.= 10.
2x1+ 4x2+x3.= 20。
通过输入以下约束来指定等式。
Aeq =[1、2、3、2、4、1];说真的=(10、20);
例子:指定X-Components Sum为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。
输入以下约束指定不等式。
a = [1,2; 3,4; 5,6];B = [10; 20; 30];
例子:指定x组件总和为1或更少,使用a = =(1,n)
和B = 1
。
数据类型:双倍的
说真的
- - - - - -线性平等约束线性平等约束,指定为真正的矢量。说真的
是一个我
- 与...相关的矢量Aeq
矩阵。如果你通过说真的
作为一个行向量,求解器内部转换说真的
到列向量Beq(:)
。对于大问题,放弃说真的
作为稀疏的矢量。
说真的
编码我
线性平等
aeq * x = beq
,
在哪里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(i)> = lb(i)
对所有人我
。
如果元素个数(磅)<元素个数(f)
,然后磅
指定
x(i)> = lb(i)
为1 <= i <= numel(lb)
。
在这种情况下,索盘发出警告。
例子:要指定所有x分量都是正的,请使用磅= 0(大小(f))
。
数据类型:双倍的
UB.
- - - - - -上限上界,指定为实向量或实数组。如果长度f
等于的长度UB.
,然后UB.
指定
x(i)<= UB(i)
对所有人我
。
如果numel(Ub)
UB.
指定
x(i)<= UB(i)
为1 <= i <= numel(UB)
。
在这种情况下,索盘发出警告。
例子:指定所有X组件少于1
, 用乌兰巴托= 1(大小(f))
。
数据类型:双倍的
选项
- - - - - -优化选项optimoptions
|结构为优化集
返回优化选项,指定为输出optimoptions
或一个结构优化集
返回。
有些选项适用于所有算法,其他选项与特定算法相关。看到优化选项参考的详细信息。
控件中缺少一些选项optimoptions
展示。这些选项在下表中显示在斜体中。有关详细信息,请参阅查看选项。
所有算法 | |
算法 |
选择优化算法:
有关选择算法的信息,请参见线性编程算法。 |
诊断 | 显示有关要最小化或解决的函数的诊断信息。选择 |
|
显示水平(见迭代显示):
|
|
允许的最大迭代次数,一个正整数。默认的是:
为 |
|
对偶可行性的终止公差,一个正标量。默认的是:
为 |
内点算法 | |
约束特许 |
限制的可行性公差,标量 为 |
进行预处理 | 算法迭代之前的LP预处理水平。指定 |
双单算法 | |
约束特许 |
限制的可行性公差,标量 为 |
MaxTime. |
算法运行的最大时间内以秒为单位的最大时间。默认为 |
进行预处理 | 双单简单算法迭代之前的LP预处理级别。指定 |
例子:选项= Optimoptions('Linprog','算法','内部点','显示','iter')
问题
- - - - - -问题结构问题结构,指定为具有以下字段的结构。
字段名称 | 条目 |
---|---|
|
线性目标函数矢量f |
|
线性不等式约束的矩阵 |
|
线性不等式约束的矢量 |
|
矩阵的线性等式约束 |
|
向量的线性等式约束 |
磅 |
下界向量 |
UB. |
上限矢量 |
|
“linprog” |
|
选择创建optimoptions |
你必须至少提供求解器
田野问题
结构体。
数据类型:塑造
x
- 解决方案解决方案,作为实向量或实数组返回。的大小x
与大小相同f
。
fval
- 解决方案的目标函数值解决方案的目标函数值,作为实数返回。一般来说,fval
=f'* x
。
exitflag
- 原因linprog
停了下来原因linprog
停止,返回整数。
|
就相对而言,这个解是可行的 |
|
功能融合到解决方案 |
|
超过迭代次数 |
|
没有发现可行的点。 |
|
问题是无限的。 |
|
|
|
原始问题和对偶问题都是不可行的。 |
|
搜索方向变得太小。无法进一步进展。 |
|
解决了可行性。 |
ExitFlags.3.
和-9
联系那些有很大不可行万博 尤文图斯性的解决方案。这些问题通常来自于条件数较大的线性约束矩阵,或具有较大解分量的问题。为了纠正这些问题,尝试缩放系数矩阵,消除冗余线性约束,或给变量更紧的界限。
输出
- 有关优化过程的信息有关优化过程的信息,作为具有这些字段的结构返回。
迭代 |
迭代次数 |
算法 |
优化算法使用 |
cgiteration. |
0(仅包含向后兼容性的内部点算法) |
消息 |
退出消息 |
CONSTRVIOMATION. |
最大约束函数 |
firstorderopt |
一阶最优性测量 |
有关描述,请参阅双单算法。
的'内部点遗留'
基于LIPSOL (Linear inner Point Solver,[3]),这是Mehrotra预测校正器算法的变种[2],一种原始 - 双内点法。在算法开始迭代之前发生许多预处理步骤。看到内部点遗留线性规划。
算法的第一阶段可能涉及一些限制的预处理(见内部点遗留线性规划)。有几个条件可能会导致linprog
退出不可行消息。在每种情况下,linprog
返回消极exitflag
,表示表示失败。
如果检测到所有零的行Aeq
,但相应的元素说真的
不是零,然后退出消息是
由于不可行性而退出:约束矩阵中的全零行在相应的右侧项中没有零。
如果其中一个元素x
被发现不符合下面,然后退出消息是
由于不可行性而退出:目标F'* x无限制。
如果其中一个行Aeq
只有一个非零元素,那么关联值在x
被称为A.单身多变的。在这种情况下,该组件的值x
可以从中计算Aeq
和说真的
。如果计算的值违反了另一个约束,则退出消息为
由于不可行性而退出:等式约束中的单例变量不可行。
如果可以解决单例变量,但解决方案违反了上限或下限,则退出消息是
由于不可行性而退出:平等约束中的单例变量不在界限内。
请注意
预处理步骤是累积的。例如,即使您的约束矩阵没有一行全为零的开始,其他预处理步骤也可能导致这样一行的发生。
当预处理结束时,算法的迭代部分开始,直到满足停止标准。(有关残差的更多信息,原始问题,双重问题以及相关停止标准,见内部点遗留线性规划。)如果残差越来越多,而不是越来越小,或者残差既不生长也不缩小,则分别显示两个终止消息中的一个,
到目前为止,一个或多个残差,二元间隙或总相对误差的总体相对误差会大于其最小值的100000倍:
或者
剩余一个或多个残差,二元间隙或相对误差的一个或多个已经停止了:
在显示这些消息之后,它之后是以下消息之一,指示双重,原始或两者似乎是不可行的。
双重似乎是不可行的(以及原始无界的)。(原始残留
原始似乎是不可行的(和双无限的)。(双重残差
由于双残差> SQRT(OptimalallyTolerance),双重似乎是不可行的(和原始无界的)。(原始残留<10 *最优分器。)
由于原始残留> SQRT(OptimalalcalalTolerance),原始原始似乎是不可行的(和双无界的)。(双重残留<10 *最优性1.)
双重似乎是不可行的,并且由于原始物镜<-1e + 10和双目标<1e + 6的原始未绑定。
原始似乎是不可行的,并且由于双目标> 1E + 10和原始物镜> -1e + 6的双无界。
原始和双重似乎都是不可行的。
例如,原始(目标)可以是无界的,并且是一种原始约束满足的量度的原始残留物可以很小。
的'内点'
算法类似于'内部点遗留'
,但具有更有效的分解程序,以及不同的预处理。看到内点linprog算法。
的优化Live Editor任务提供可视界面linprog
。
[1] Dantzig,G.B.,A. Orden和P. Wolfe。“用于最小化线性不等式限制下线性形式的通用单纯性方法。”太平洋数学》杂志上。第5卷,1955年,第183-195页。
[2] Mehrotra,S。“关于基于双重内部点法的实施。”暹罗期刊优化,卷。2,1992,PP。575-601。
[3]张,Y.,“通过Matlab环境下的内部点方法解决大规模线性计划。”技术报告TR96-01,马里兰大学,巴尔的摩县马里兰大学数学与统计系,1995年7月。
您点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入它来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
您还可以从以下列表中选择一个网站:
请选择表现最佳的中国网站(中文或英文)。MathWorks的其他国家网站并没有针对您所在位置的访问进行优化。