/ 写在前面 – 我热爱技术、热爱开源。我也相信开源能使技术变得更好、共享能使知识传播得更远。但是开源并不意味着某些商业机构/个人可以为了自身的利益而一味地索取,甚至直接剽窃大家曾为之辛勤付出的知识成果,所以本文未经允许,不得转载,谢谢/


    George Bernard Dantzig被认为是线性规划(Linear Programming,LP)之父。

    线性规划问题的MATLAB标准型为:
    线性规划问题的MATLAB求解方法 - 图1
    假设线性规划问题的MATLAB求解方法 - 图2线性规划问题的MATLAB求解方法 - 图3维设计变量,且线性规划问题具有不等式约束线性规划问题的MATLAB求解方法 - 图4个,等式约束线性规划问题的MATLAB求解方法 - 图5个,那么:线性规划问题的MATLAB求解方法 - 图6线性规划问题的MATLAB求解方法 - 图7线性规划问题的MATLAB求解方法 - 图8线性规划问题的MATLAB求解方法 - 图9均为线性规划问题的MATLAB求解方法 - 图10列向量线性规划问题的MATLAB求解方法 - 图11线性规划问题的MATLAB求解方法 - 图12列向量线性规划问题的MATLAB求解方法 - 图13线性规划问题的MATLAB求解方法 - 图14列向量线性规划问题的MATLAB求解方法 - 图15线性规划问题的MATLAB求解方法 - 图16维矩阵,线性规划问题的MATLAB求解方法 - 图17线性规划问题的MATLAB求解方法 - 图18维矩阵。

    需要注意以下两点:

    1. 在该MATLAB标准型中,目的是对目标函数求极小。
    2. MATLAB标准型中的不等式约束形式为“线性规划问题的MATLAB求解方法 - 图19”。

    MATLAB优化工具箱中求解线性规划问题的命令为 linprog ,其函数调用方法有多种形式,如下所示:

    1. x = linprog(c, A, b)
    2. x = linprog(c, A, b, Aeq, beq)
    3. x = linprog(c, A, b, Aeq, beq, lb, ub)
    4. x = linprog(c, A, b, Aeq, beq, lb, ub, x0)
    5. x = linprog(c, A, b, Aeq, beq, lb, ub, x0, options)
    6. x = linprog(problem)
    7. [x, fval] = linprog(...)
    8. [x, fval, exitflag] = linprog(...)
    9. ...

    linprog 函数返回的输出参数有 xfvalexitflaglambdaoutputx 为线性规划问题的最优解, fval 为线性规划问题在最优解 x 处的函数值。
    输出参数 exitflag 返回的是优化函数计算终止时的状态指示,说明算法终止的原因,其取值和其代表的具体原因如下:

    • 1 :已经收敛到解 x
    • 0 :已经达到最大迭代次数限制 options.MaxIter
    • -2 :没有找到问题的可行点
    • -3 :问题无有限最优解
    • -4 :在算法执行过程中遇到了 NaN
    • -5 :原线性规划问题和其对偶问题均不可行
    • -7 :搜索方向变化太小,无法进一步获得更优解,说明原线性规划问题或者约束条件是病态的

    输出参数 output 是一个返回优化过程中相关信息的结构变量。

    如果在线性规划问题中无线性不等式约束,则可以设 A=[]B=[] ,其他类似。
    如果对设计变量没有上界约束,可以设置 ub(i)=Inf ,如果没有下界约束,可以设置 lb(i)=-Inf