天天看點

數學模組化:線性規劃(Python&Matlab實作)

目錄

​​1 概述​​

​​2 Python實作​​

​​3 Matlab實作 ​​

​​3.1 官網詳細解釋​​

​​3.2 為linprog使用基于問題的方法求解LP​​

​​3.3 投資的收益和風險​​

1 概述

在人們的生産實踐中,經常會遇到如何利用現有資源來安排生産,以取得最大經濟效益的問題。此類問題構成了運籌學的一個重要分支—數學規劃,而線性規劃(LinearProgramming 簡記LP)則是數學規劃的一個重要分支。自從1947年G B. Dantzig 提出求解線性規劃的單純形方法以來,線性規劃在理論上趨向成熟,在實用中日益廣泛與深入。特别是在計算機能處理成千上萬個限制條件和決策變量的線性規劃問題之後,線性規劃的适用領域更為廣泛了,已成為現代管理中經常采用的基本方法之一。

2 Python實作

我前面已經詳細總結過:​​線性規劃(Python各種包實作及Yalmip+Cplex)​​

數學模組化:線性規劃(Python&Matlab實作)

3 Matlab實作 

3.1 官網詳細解釋

​​求解線性規劃問題 - MATLAB linprog - MathWorks 中國​​

3.2 為linprog使用基于問題的方法求解LP

此示例說明如何使用基于問題的方法設立問題,然後使用基于求解器的方法求解問題。問題是:

數學模組化:線性規劃(Python&Matlab實作)

建立名為 ​

​prob​

​​ 的 ​

​OptimizationProblem​

​ 對象來表示此問題:

clc,clear
x = optimvar('x','LowerBound',-1,'UpperBound',1.5);
y = optimvar('y','LowerBound',-1/2,'UpperBound',1.25);
prob = optimproblem('Objective',x + y/3,'ObjectiveSense','max');
prob.Constraints.c1 = x + y <= 2;
prob.Constraints.c2 = x + y/4 <= 1;
prob.Constraints.c3 = x - y <= 2;
prob.Constraints.c4 = x/4 + y >= -1;
prob.Constraints.c5 = x + y >= 1;
prob.Constraints.c6 = -x + y <= 2;
prob.Constraints.c7 = x + y/4 == 1/2;
problem = prob2struct(prob); %将問題對象轉換為問題結構體。
[sol,fval,exitflag,output] = linprog(problem) %求解生成的問題結構體。      
Optimal solution found.


sol =

    0.1875
    1.2500


fval =

   -0.6042


exitflag =

     1


output = 

  包含以下字段的 struct:

         iterations: 0
    constrviolation: 0
            message: 'Optimal solution found.'
          algorithm: 'dual-simplex'
      firstorderopt: 0

>>       

3.3 投資的收益和風險

(1)問題提出

數學模組化:線性規劃(Python&amp;Matlab實作)
數學模組化:線性規劃(Python&amp;Matlab實作)

(2)模型簡化

數學模組化:線性規劃(Python&amp;Matlab實作)
數學模組化:線性規劃(Python&amp;Matlab實作)

(3)算例

數學模組化:線性規劃(Python&amp;Matlab實作)
數學模組化:線性規劃(Python&amp;Matlab實作)
clc,clear
a=0;
hold on
while a<0.05
    %========不等式限制==================
    c=[-0.05,-0.27,-0.19,-0.185,-0.185];
    A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])];  %diag:建立對角矩陣或擷取矩陣的對角元素
    b=a*ones(4,1);
    %========等式限制============
    Aeq=[1,1.01,1.02,1.045,1.065];
    beq=1;
    %========線性規劃=============
    LB=zeros(5,1);
    [x,Q]=linprog(c,A,b,Aeq,beq,LB);
    %======可視化=============
    Q=-Q;
    plot(a,Q,'*r');
    a=a+0.001;
end
xlabel('a'),ylabel('Q')      

繼續閱讀