MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)

文章目录

  • 基础知识
    • 规划问题的数学模型的三个要素
  • 线性规划Linear Programing
    • 理论
    • 示例
  • 整数规划
    • 理论
    • 示例
  • 非线性规划
    • 理论
    • 示例

生产实践中,经常会遇到很多资源分配的问题,如何分配各种资源以获得最大经济效益,这就形成了运筹学的一个分支——数学规划。

离散系统的优化问题一般都用规划模型求解

而matlab提供了很多强大的规划问题求解命令,使得求解非常简单

基础知识

规划问题的数学模型的三个要素

  • 决策变量
  • 目标函数
  • 约束条件

  • 可行解 满足约束条件的解
  • 可行域 所有可行解构成的集合,R
  • 最优解 使目标函数达到最小值的可行解

线性规划Linear Programing

理论

目标函数和约束条件均为线性的最优化问题。约束为线性等式Or不等式

线性规划问题的通用的求解方法:单纯形法(由美国数学家,线性规划之父:George Bernard Dantzig(1914-2005)于1947年提出),正是这个单纯形为线性规划的整个学科打下了基础。

总之现在线性规划问题非常好求解,就用单纯形,MATLAB的linprog就是用的单纯形。
在这里插入图片描述

分支:整数线性规划Iinteger Linear Programing(全部决策变量都必须取整数值)

1947年J.von诺依曼提出了对偶理论,开创了线性规划的新领域, 他在1946年提出经典的计算机体系架构(程序和数据一样存储起来),世界上第一台计算机ENIAC也是他参与设计的。

“对偶”不是“等价”
“对偶”不是“等价”
“对偶”不是“等价”

具体定义
MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)_第1张图片
不等式方向相反,即原问题的约束不等式是大于等于则对偶问题的对应条件则是小于等于

优化方向相反,即原问题max对偶问题就是min
MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)_第2张图片
行约束是变量范围的约束条件,如 x ≥ 0 x\geq0 x0,这种条件不变号

MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)_第3张图片
上面的定义看起来仍然很迷,尤其说啥行列转置······但下面这几个性质就能让我们明白对偶问题想干啥了

第二点,原问题是最大化问题,对偶是最小化问题,而原问题的任意可行解小于对偶问题的任意可行解, 这不就说明对偶问题的下界就是原问题的上界麽,这和第四点呼应了,当两个可行解相遇(相等)时,就是原问题和对偶问题的最优解。

类似于这么个意思,仅供理解大致思想,不准确不严谨的地方请忽略

MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)_第4张图片

由于现在的计算机可以处理有成千上万的约束和决策变量的规划问题, 所以线性规划已经是现代管理中常用的基本方法了。
MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)_第5张图片

示例

这几个线性规划的例子除了是变量多了一些以外,都类似于初中数学最基本的练习题(一般只有俩变量,便于在二维坐标系画图手动求解),都上不了期末考试台面的那种
MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)_第6张图片

注意使用matlab求解一定要化为上面说的标准型:
MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)_第7张图片

c=[2;3;1];
a=[1 4 2;3 2 0];
b=[8;6];
[x,fval]=linprog(c,-a,-b,[],[],zeros(3,1));
% x向量是使得目标函数取得最小值的那组决策变量
% fval是最小值
% [],[]是等式约束,本问题中没有
% zeros(3,1)是x向量的下限,是第三个约束条件
% 初始值和控制变量参数没写
x =

    0.8066
    1.7900
    0.0166

>> fval

fval =

    7.0000

MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)_第8张图片
就这么一点点代码!!so easy有没有,比自己手算快多了,正在上初中的朋友们应该学习一下

c=[-5;-4;-6];
a=[1 -1 1;3 2 4;3 2 0];
b=[20;42;30];
[x,fval,exitflag,output,lambda]=linprog(c,a,b,[],[],zeros(3,1))
% exitflag是收敛标志,取1则问题收敛
% output可以显示迭代总次数和使用的算法等
% lambda是问题求解中用到的拉格朗日乘子
警告: Your current settings will run a different algorithm ('dual-simplex') in a
future release.
 
> In linprog (line 204)
  In me_test (line 6) 
Optimization terminated.

x =

    0.0000
   15.0000
    3.0000


fval =

  -78.0000


exitflag =

     1


output = 

  包含以下字段的 struct:

         iterations: 6
          algorithm: 'interior-point-legacy'
       cgiterations: 0
            message: 'Optimization terminated.'
    constrviolation: 0
      firstorderopt: 5.8704e-10


lambda = 

  包含以下字段的 struct:

    ineqlin: [3×1 double]
      eqlin: [0×1 double]
      upper: [3×1 double]
      lower: [3×1 double]

>> 
help linprog
  1  linprog converged to a solution X.
      0  Maximum number of iterations reached.
     -2  No feasible point found.
     -3  Problem is unbounded.
     -4  NaN value encountered during execution of algorithm.
     -5  Both primal and dual problems are infeasible.
     -7  Magnitude of search direction became too small; no further
          progress can be made. The problem is ill-posed or badly
          conditioned.

不明白拉格朗日乘子可以参看我的这篇博客和我的另一篇博客

再来个有等式约束的:
MATLAB求解规划问题(线性规划, 整数规划, 非线性规划)_第9张图片

c=[2;3;-5];
a=[2 -5 1];
b=10;
aeq=[1 1 1];
beq=7;
% 注意matlab标准形式
[x,fval,exitflag,output,lambda]=linprog(-c,-a,-b,aeq,beq,zeros(3,1))
警告: Your current settings will run a different algorithm ('dual-simplex') in a
future release.
 
> In linprog (line 204)
  In me_test (line 8) 
Optimization terminated.

x =

    6.4286
    0.5714
    0.0000


fval =

  -14.5714


exitflag =

     1


output = 

  包含以下字段的 struct:

         iterations: 6
          algorithm: 'interior-point-legacy'
       cgiterations: 0
            message: 'Optimization terminated.'
    constrviolation: 1.5099e-14
      firstorderopt: 8.5009e-12


lambda = 

  包含以下字段的 struct:

    ineqlin: 0.1429
      eqlin: 2.2857
      upper: [3×1 double]
      lower: [3×1 double]

整数规划

理论

示例

非线性规划

理论

只要目标函数和约束条件包含非线性函数,就是非线性规划

求解非线性规划比线性规划难很多很多很多,没有适用于各类问题的通用方法,(线性规划的单纯形就是通用解法)

示例

你可能感兴趣的:(最优化)