/ 写在前面 – 我热爱技术、热爱开源。我也相信开源能使技术变得更好、共享能使知识传播得更远。但是开源并不意味着某些商业机构/个人可以为了自身的利益而一味地索取,甚至直接剽窃大家曾为之辛勤付出的知识成果,所以本文未经允许,不得转载,谢谢。/
George Bernard Dantzig被认为是线性规划(Linear Programming,LP)之父。
线性规划问题的MATLAB标准型为:
假设为维设计变量,且线性规划问题具有不等式约束个,等式约束个,那么:、、、均为维列向量,为维列向量,为维列向量,为维矩阵,为维矩阵。
需要注意以下两点:
- 在该MATLAB标准型中,目的是对目标函数求极小。
- MATLAB标准型中的不等式约束形式为“”。
MATLAB优化工具箱中求解线性规划问题的命令为 linprog
,其函数调用方法有多种形式,如下所示:
x = linprog(c, A, b)
x = linprog(c, A, b, Aeq, beq)
x = linprog(c, A, b, Aeq, beq, lb, ub)
x = linprog(c, A, b, Aeq, beq, lb, ub, x0)
x = linprog(c, A, b, Aeq, beq, lb, ub, x0, options)
x = linprog(problem)
[x, fval] = linprog(...)
[x, fval, exitflag] = linprog(...)
...
linprog
函数返回的输出参数有 x
、 fval
、 exitflag
、 lambda
和 output
。 x
为线性规划问题的最优解, fval
为线性规划问题在最优解 x
处的函数值。
输出参数 exitflag
返回的是优化函数计算终止时的状态指示,说明算法终止的原因,其取值和其代表的具体原因如下:
1
:已经收敛到解x
0
:已经达到最大迭代次数限制options.MaxIter
-2
:没有找到问题的可行点-3
:问题无有限最优解-4
:在算法执行过程中遇到了NaN
值-5
:原线性规划问题和其对偶问题均不可行-7
:搜索方向变化太小,无法进一步获得更优解,说明原线性规划问题或者约束条件是病态的
输出参数 output
是一个返回优化过程中相关信息的结构变量。
如果在线性规划问题中无线性不等式约束,则可以设 A=[]
、 B=[]
,其他类似。
如果对设计变量没有上界约束,可以设置 ub(i)=Inf
,如果没有下界约束,可以设置 lb(i)=-Inf
。