matlab線性規劃

布拉多1024發表於2021-04-23

線性規劃問題

  在一組線性約束條件下的限制下,求一線性目標函式最大或最小的問題。在這裡插入圖片描述

線性規劃標準型

  • 數學標準型在這裡插入圖片描述

    可行解:滿足約束條件的解矩陣x=[x1,x2,x3,..,xn]。

    最優解:是目標函式達到最大值或者最小值的可行解。

    可行域:所有可行解構成的集合稱為問題的可行解,記為R。

  • matlab標準型在這裡插入圖片描述

    • f,x,b,beq,lb,ub為列向量
    • f稱為價值向量
    • b稱為資源向量
    • A,Aeq為矩陣

Matlab線性規劃函式——linprog

>> help linprog
linprog - Solve linear programming problems

    This MATLAB function solves min f'*x such that A*x ≤ b.

    x = linprog(f,A,b)
    x = linprog(f,A,b,Aeq,beq)
    x = linprog(f,A,b,Aeq,beq,lb,ub)
    x = linprog(f,A,b,Aeq,beq,lb,ub,options)
    x = linprog(problem)
    [x,fval] = linprog(___)
    [x,fval,exitflag,output] = linprog(___)
    [x,fval,exitflag,output,lambda] = linprog(___)

    另請參閱 intlinprog, mpsread, optimoptions, quadprog

    linprog 的參考頁
  • x:返回決策向量的取值
  • fval返回目標函式的最優解
  • f為價值向量
  • A和b對應線性不等式約束
  • Aeq和beq對應線性等式約束
  • lb和ub分別對應決策向量的下界向量和上界向量
  • options是控制引數

例題講解

在這裡插入圖片描述

  1. 題目分析

      這裡求解的最優解是最大值,而matlab裡面的標準函式是求最小值為最優解,因此需要對題目進行變形。另外,對最優解的約束同樣需要進行整理稱為matlab的使用形式。整理結果如下:

    在這裡插入圖片描述

  2. Matlab****程式實現

    f=[-2;-3;5];
    a=[-2,5,-1;1,3,1];
    b=[-10;12];
    aeq=[1,1,1];
    beq=7;
    [x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));
    x,y=-y				%由於之前將求max最優解變形稱為了min,這裡的y要求相反的值
    

    輸出結果

    x=3x1
    	6.4286
    	0.5714
    		 0
    y=14.5714
    

在這裡插入圖片描述

  1. 題目分析

    這個題目裡面求的最優解為最小值,因此不需要進行轉換,只需要對約束條件進行轉換即可。在約束條件中,只有線性不等式約束以及決策向量下界向量,沒有線性等式約束。轉換結果如下:在這裡插入圖片描述

  2. 程式實現

    f=[2;3;1];    %價值向量是列向量
    a=[1,4,2;3,2,0];
    b=[8;6];
    aeq=[];
    beq=[];
    [x,y]=linprog(f,-a,-b,aeq,beq,zeros(3,1))	%一定要注意這裡的符號
    
  3. 特別說明:一定要記住matlab的線性規劃標準函式的形式,標準形式裡面只有小於等於號,如果程式出現大於號一定要進行變換!!!

相關文章