四种规划-数学建模

1.线性规划  -->Liner Programming(LP)

  1)目标函数+约束条件(均为线性函数)

    a.目标函数

    b.约束条件:等式约束和不等式约束

  2)化为标准Matlab形式(min,<=)

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

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)可以转化为线性规划的问题

    a.  min |x1|+|x2|+...+|xn|  s.t.  Ax<=b  目标函数不是线性函数,但可以通过u,v转换化为线性规划问题

    b.运输问题(产销平衡)

    c.指派问题(指派n个人做n项工作)  -->若第i个人去做第j件工作,xij=1,否则xij=0;(0-1规划问题)

       匈牙利算法:将系数矩阵进行变换

  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(衡量过程优劣的数量指标,和、积、最大、最小)、最优策略(使指标函数达到最优值的策略)、最优轨线

posted @ 2017-05-18 15:26  阿杜&eason  阅读(3132)  评论(0编辑  收藏  举报