四種規劃-數學建模

1.線性規劃  -->Liner Programming(LP)算法

  1)目標函數+約束條件(均爲線性函數)編程

    a.目標函數函數

    b.約束條件:等式約束和不等式約束工具

  2)化爲標準Matlab形式(min,<=)優化

    [x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTIONS)spa

clear all;
c=[2;3;-5];
A=[-2,5,-1;1,3,1];
b=[-10;12];
Aeq=[1,1,1];
beq=7;
x=linprog(-c,A,b,Aeq,beq,zeros(1,3));
value=c'*x;

  3)能夠轉化爲線性規劃的問題code

    a.  min |x1|+|x2|+...+|xn|  s.t.  Ax<=b  目標函數不是線性函數,但能夠經過u,v轉換化爲線性規劃問題orm

    b.運輸問題(產銷平衡)blog

    c.指派問題(指派n我的作n項工做)  -->若第i我的去作第j件工做,xij=1,不然xij=0;(0-1規劃問題)io

       匈牙利算法:將係數矩陣進行變換

  4)對偶理論

    a.將等式約束轉化爲不等式約束

    b.根據對偶理論已知對偶問題的最優解來求解原問題的最優解

  5)靈敏度分析和參數線性規劃

  6)投資的收益和風險問題

    a.模型假設:整體風險用投資項目中風險最大的一個來度量;n中資產投資項目相互獨立

    b.模型創建:創建風險目標函數和收益目標函數,收益目標函數中忽略交易定額的影響

    c.將多目標規劃模型轉化爲單目標規劃模型(1.將其中一個目標函數界定爲約束條件;2.經過權重將多目標函數化爲單目標函數)

    d.Matlab編程進行模型求解

    e.以界定最大風險值爲a將風險目標函數化爲約束條件爲例:從a=0開始,以步長爲0.001進行循環搜索最佳風險度

clc,clear
a=0;
hold on
while a<0.05  %界定最大風險度爲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])];  %風險係數矩陣,zeros(4,1)爲銀行存款無風險,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')

    f.結果分析

2.整數規劃

  1)分支定界法  -->先求解線性規劃問題獲得最優解,分支,定界,剪枝

  2)割平面法

  3)隱枚舉法  -->試探出一個可行解,增長一個新的約束條件,窮舉法求解(不知足新建約束的無需計算)

  4)匈牙利法  -->對係數矩陣進行變換獲得一個每行每列都含0元素的矩陣

  5)蒙特卡洛法  -->隨機取樣

  6)0-1變量問題

    a.相互排斥的計劃(投資場所的選定)

    b.相互排斥的約束

3.非線性規劃

  1)x=fmincon(fun,x0,A,b,Aeq,beq,LB,UB,NONLCON,options)

clc,clear
options=optimset('largescale','off');
[x,y]=fmincon('ques02_fun1',rand(3,1),[],[],[],[],zeros(3,1),[],'ques02_fun2',options);
function f=ques02_fun1(x);
f=sum(x.^2)+8;
function [g,h]=ques02_fun2(x);
g=[-x(1)^2+x(2)-x(3)^2
    x(1)+x(2)^2+x(3)^3-20];
h=[-x(1)-x(2)^2+2
    x(2)+2*x(3)^2-3];

  2)迭代求解非線性規劃  -->步長t和方向p

  3)凸規劃  -->目標函數與約束條件爲凸函數,則其可行域爲凸集,且局部最優解即爲全劇最優解

  4)無約束問題

    a.一維搜索法  -->沿着某一已知方向求目標函數的極小點

    b.斐波那契法  -->根據斐波那契數列肯定探索點(對稱)

    c.0.618法  -->探索點區間縮短率固定爲0.618

    d.二次插值法  -->區間連續時,考慮用多項式插值進行一維搜索,不斷用低次多項式來近似目標函數

    e.梯度法    -->降低的方向沿負梯度方向(降低速度最快),終止條件爲梯度爲0或小於某一閾值

      minf(x)=x1^2+25*x2^2

clc,clear
x=[2;2];          %初始值
[f0,g]=ques04_fun(x);
while norm(g)>0.000001  %norm求向量g的2範數  
    p=-g/norm(g);    %p爲降低的方向
    t=1.0;    %初始t爲1
    f=ques04_fun(x+t*p);   %找到是目標函數最小的t 
    while f>f0
        t=t/2;
        f=ques04_fun(x+t*p);
    end
    x=x+t*p;
    [f0,g]=ques04_fun(x);
end
x,f0
function [f,df]=ques04_fun(x);
f=x(1)^2+25*x(2)^2;     %目標函數
df=[2*x(1)       %梯度函數     
    50*x(2)];     

    f.牛頓法  -->降低的方向爲p^k=-[▽^2f(x^k)]^(-1)▽f(x^k),收斂速度快,但維數較高時計算量大(須要求解二階導數矩陣及其逆)

clc,clear
x=[2;2];
[f0,g1,g2]=ques05_fun(x);
while norm(g1)>0.00001
    p=-inv(g2)*g1;
    p=p/norm(p);
    t=1.0;
    f=ques05_fun(x+p*t);
    while f>f0
        t=t/2;
        f=ques05_fun(x+p*t);
    end
    x=x+t*p;
    [f0,g1,g2]=ques05_fun(x);
end
x,f0
function [f,df,d2f]=ques05_fun(x);
f=x(1)^4+25*x(2)^4+x(1)^2*x(2)^2;
df=[4*x(1)^3+2*x(1)*x(2)^2
    100*x(2)^3+x(1)^2*2*x(2)];
d2f=[12*x(1)^2+2*x(2)^2,4*x(1)*x(2)
    4*x(1)*x(2),300*x(2)^2+2*x(1)^2];

    g.變尺度法    -->構造一個矩陣H來逼近二階導矩陣的逆矩陣,H0爲單位矩陣,以後按式18獲得

    h.直接法    -->目標函數不可導或難以解析

    i.Matlab解無約束極值問題  -->fminunc  fminsearch

      [x,fval]=fminunc(fun,x0,options,p1,p2,...)  ->fun爲一個m文件,返回值爲(目標函數,一階導數陣,二階導數陣),p1,p2爲傳遞給fun的參數

clc,clear
options=optimset('GradObj','on');
[x,fvl]=fminunc('ques06_fun',rand(1,2),options)
function [f,g]=ques06_fun(x);
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2;
g=[-200*(x(2)-x(1)^2)*2*x(1)-2*(1-x(1))
    200*(x(2)-x(1)^2)];

  5)約束極值問題

    a.二次規劃  -->目標函數爲二次函數,約束條件線性

      Matlab解法:[x,fval]=quadprog(h,f,A,b,Aeq,beq,LB,UB,x0,options)  -->min1/2x'Hx+f'x  ,H爲二次項係數矩陣,f爲一次項係數

clc,clear
H=[4,-4;-4,8];
f=[-6;-3];
A=[1,1;4,1];
b=[3,9];
[x,value]=quadprog(H,f,A,b,[],[],zeros(2,1))

    b.罰函數法  -->將約束條件轉化爲適當的罰函數構造增廣目標函數,轉化爲無約束非線性規劃問題  SUMT

  6)Matlab優化工具箱:  fminbnd(單變量非線性函數在區間上)  fseminf(半無窮約束)  fminimax(目標函數爲最大最小值型)  fmincon-->能夠使用梯度降低法,見例13

4.動態規劃    -->求解以時間劃分階段的動態過程的優化問題

  1)基本概念:階段、狀態X、決策U、策略P(決策集合)、狀態轉移方程T、指標函數V(衡量過程優劣的數量指標,和、積、最大、最小)、最優策略(使指標函數達到最優值的策略)、最優軌線

相關文章
相關標籤/搜索