现在时间是:
当前位置:首 页 >> 数学建模>> 教学区>> 文章列表

数学建模作业10

作者:许兆利   发布时间:2020-05-14 09:50:13   浏览次数:88

 

数学建模作业10

 

1(最短路线问题)

a=[1 2 4 3 3 2 1];

b=[5 3 -1 -1;

   1 3 6 -1;

   -1 8 7 6;

   6 8 -1 -1;

   3 5 -1 -1;

   -1 3 3 -1;

   -1 8 4 -1;

   2 2 -1 -1;

   -1 1 2 -1;

   -1 3 3 -1;

   3 5 -1 -1;

   5 2 -1 -1;

   6 6 -1 -1;

   4 -1 -1 -1;

   3 -1 -1 -1];

num=16;

max_col=4;

a_length=size(a);

route=zeros(a_length(2),max_col);

row=2;

c=b(1,:);

c1=zeros(1,max_col);

c2=zeros(1,max_col);

for i=2:a_length(2)-1

    n=a(i);

    for k=1:max_col

        if b(row,k)>0

            c1(k)=b(row,k)+c(1);

            route(i,k)=1;

        end

    end

    if n>1

        for j=1:n-1

            for k=1 :max_col

                if b(row+j,k)>0

                    c2(k)=b(row+j,k)+c(j+1);

                    if c2(k)<c1(k)||c1(k)==0

                        c1(k)=c2(k);

                        route(i,k)=j+1;

                    end

                end

            end

        end

    end

    row=row+n;

    c=c1;

    c1=zeros(1,max_col);c2=zeros(1,max_col);

end

correct_col=route(end-1,1);

route1=route(:,correct_col);

route1(1)=1;

route1(end-1)=correct_col;

route1(end)=1;

disp('d=');disp(c(1));disp('path=');disp(route1');

结果:

d=

    18

path=

     1     1     2     1     2     2     1

2(生产—存贮问题)某工厂根据市场调研情况,需制定今后四个月的生产计划,据估计,在这四个月内,市场对该产品的需求量如下表所示: 假定市场每批产品的固定成本费用为3千元,每单位产品成本费用为1千元,库存费用每月为0.5千元.并且规定1月月初和4月月底均无产品库存.试问该厂如何安排各个月的生产与库存,使总费用最小。

解:生产过程划分为四个阶段,阶段变量k=1,2,3,4.:

状态变量sk表示第k阶段末的库存量,由己知得so=s4=0

决策变量xk表示第k阶段的生产量,dk表示第k阶段的需求量.

状态转移方程:sk+l=sk+xk-dk

阶段指标函数vk(sk,xk) 表示第k阶段的总成本,它由两部分构成一

部分是第k阶段的生产成本Ck(xk),另一部分是第k阶段的存费hk(SK)

最优指标函数fk(sk),已知时段k某产品的需求量为dk(k=1,2,...)-时段若生产该产品,需付生产准备费c0,且生产每单位产品的生产成本为n,若满足本时段需求后有剩余,每时段每单位产品需付出存贮费h0.设每时段最大生产能力为Xm,最大存贮量为Im,且第1时段初有库存量s0,试制订产品的生产计划,即每时段的产量,使K个时段的总费用最少,为了通过具体的计算说明解决这问题的方法,现设k=4,

d1=2,d2=3,d3=2,d4=4,C0=3千元,n=1千元/单位,h=0.5千元/单位.时期s1=0Xm=6单位,Im没有给出,视为存贮量不受限制.

|由题可知:

CK(xK)=0...xK=0

CK(xK)=3+xK....=1,2,3,4,56

无穷大xK>6

h(sk)=0.5sk

所以: vk(Sk,xk)=ck(xk)+hk(sk)

基本方程为:

fk(sk)=min {vk(Sk,xk)+fk-1(sk-1)(k=1,2,3,4)

fo(so)=0,而σk=min{sk+dk,6}

MATLAB代码:

Dynprog.m

function s_next=TransFun(k,x,u)

d = [ 2 3 2 4 ];

s_next = x + u - d(k);

 

function u=DecisFun(k,x)

m=6;

d = [ 2 3 2 4 ];

if k == 4

    u = d(k) - x;

else

    u = max (0,d(k)-x):m;

end

 

x1 = 0:4;

s=nan*ones(5,1);

s(1) = 0;

x = [s x1' x1' x1'];

[p_opt,fval]=dynprog(x,@DecisFun,@ObjFun,@TransFun)

function u=DecisFun(k,x)

m=6;

d = [ 2 3 2 4 ];

if k == 4

    u = d(k) - x;

else

    u = max (0,d(k)-x):m;

end

function V=ObjFun(k,x,u)

d = [ 2 3 2 4 ];

if u == 0

    V = 0.5 * (x + u -d(k));

else

    if u>6

        V = 10^6;   

    else

        V = 3 + u +0.5*(x + u -d(k));

    end

end

 

function s_next=TransFun(k,x,u)

d = [ 2 3 2 4 ];

s_next = x + u - d(k);

 

x1 = 0:4;

s=nan*ones(5,1);

s(1) = 0;

x = [s x1' x1' x1'];

[p_opt,fval]=dynprog(x,@DecisFun,@ObjFun,@TransFun)

结果:

>> main

 

p_opt =

 

    1.0000         0    5.0000    9.5000

    2.0000    3.0000         0         0

    3.0000         0    6.0000   11.0000

    4.0000    4.0000         0         0

 

 

fval =

 

   20.5000

       NaN

       NaN

       NaN

       NaN

 

3(生产—库存管理问题)

Dynprog.m

function u=DecisFun(k,x)

d =100* [ 6 7 5 12];

if k == 4

    u = d(k) - x;

else

    u = max (0,d(k)-x):1200;

end

 

function V=ObjFun(k,x,u)

V = x+ 0.005*u^2;

 

function s_next=TransFun(k,x,u)

d = [ 600 700 500 1200];

s_next = x + u - d(k);

 

x1 =100*(0:4);

s = nan*ones(5,1);

s(1)=0;

x = [s x1' x1' x1'];

[p_opt,fval]=dynprog(x,@DecisFun,@ObjFun,@TransFun)

 

结果:

>> main

 

p_opt =

 

           1           0         600        1800

           2           0         700        2450

           3           0         800        3200

           4         300         900        4350

 

 

fval =

 

       11800

         NaN

         NaN

         NaN

         NaN

 

4(企业生产管理问题)

Dynprog.m

function u=DecisFun(k,x)

u = 0 : x;

function V=ObjFun(k,x,u)

V =8*u  + 5*(x-u);

end

function s_next=TransFun(k,x,u)

a = 0.7;

b = 0.9;

s_next =(a - b)*u + b*x;

x1 = (500:999);

s=nan*ones(500,1);

s(1) = 1000;

x = [s x1' x1' x1' x1'];

[p_opt,fval]=dynprog(x,@DecisFun,@ObjFun,@TransFun)

结果:

main

p_opt =

 

           1        1000        1000        8000

           2         700          10        3530

           3         628           6        3158

           4         564           3        2829

           5         507           0        2535

fval =

       20052

         NaN

         NaN

         NaN

         NaN*500

5(设备更新问题)

Dynprog.m

function u=DecisFun(k,x)

u = [1 0];

function V=ObjFun(k,x,u)

R = [ 5 4.5 4 3.75 3 2.5]; % ²úÉúµÄ¾­¼ÃЧÒæ

U = [ 0.5 1 1.5 2 2.5 3]; % άÐÞ·ÑÓÃ

C = 5-[ 4.5 4 3.5 3 2.5 2]; % »»¹ºÒ»Ì¨ÐµÄÉ豸ËùÐèÒªµÄ·ÑÓÃ

if u == 1

    V = R(x) - U(x);

else

    V = R(x) - U(x) - C(x);

end

 

function s_next=TransFun(k,x,u)

if u == 1

    s_next = x + 1;

else

    s_next = 1;

end

x1 = (1:5);

s=nan*ones(5,1);

s(1) = 1;

x = [s x1' x1' x1' x1'];

[p_opt,fval]=dynprog(x,@DecisFun,@ObjFun,@TransFun)

结果:

>> main

p_opt =

    1.0000    1.0000    1.0000    4.5000

    2.0000    2.0000    1.0000    3.5000

    3.0000    3.0000    1.0000    2.5000

    4.0000    4.0000    1.0000    1.7500

    5.0000    5.0000         0   -2.0000

fval =

   10.2500

       NaN

       NaN

       NaN

       NaN







上一篇:没有了    下一篇:没有了

Copyright ©2020    计算数学达人 All Right Reserved.

技术支持:自助建站 | 领地网站建设 |短信接口 |燕窝 版权所有 © 2005-2020 lingw.net.粤ICP备16125321号 -5