/ 写在前面 – 我热爱技术、热爱开源。我也相信开源能使技术变得更好、共享能使知识传播得更远。但是开源并不意味着某些商业机构/个人可以为了自身的利益而一味地索取,甚至直接剽窃大家曾为之辛勤付出的知识成果,所以本文未经允许,不得转载,谢谢。/
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:已经收敛到解x0:已经达到最大迭代次数限制options.MaxIter-2:没有找到问题的可行点-3:问题无有限最优解-4:在算法执行过程中遇到了NaN值-5:原线性规划问题和其对偶问题均不可行-7:搜索方向变化太小,无法进一步获得更优解,说明原线性规划问题或者约束条件是病态的
输出参数 output 是一个返回优化过程中相关信息的结构变量。
如果在线性规划问题中无线性不等式约束,则可以设 A=[] 、 B=[] ,其他类似。
如果对设计变量没有上界约束,可以设置 ub(i)=Inf ,如果没有下界约束,可以设置 lb(i)=-Inf 。
