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

数学建模作业10

作者:汤婧   发布时间:2020-05-25 21:49:44   浏览次数:137

 

1(最短路线问题)给出一个线路网络,A为始点,G为终点,两点之间的连线可以表示道路、管道等,连线上的数字表示两点的距离(或费用)试选择一条由AG的线路,使总距离(或费用)为最小。

 

解:matlab代码:

 

clear

 

clc

 

% user input data

 

% 'a':每个阶段的站点数目

 

% 'b':所有站点的距离

 

% num:所有站点的个数总和

 

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;

 

 

 

% c:最小路径

 

% c1:第一个决策点所产生的四个距离

 

% c2:其他决策点所产生的四个距离,并将较小值放入c1

 

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);

 

l_route=route(:,correct_col);

 

l_route(1)=1;

 

l_route(end-1)=correct_col;

 

l_route(end)=1;

 

disp('最小路径为');disp(c(1));disp('路径规划为');disp(l_route');

 

结果:最小路径为

 

    18

 

 

 

路径规划为

 

     1     1     2     1     2     2     1

 

 

 

2(生产-存贮问题)某厂根据调研情况,需制定今后四个月的生产计划,据估计,在这四个月内,市场对该产品需求量如表所示。

 

月份(k

1

2

3

4

需求量(Dk

2

3

2

4

 

假定生产每批产品的固定成本费用为3千元,每单位产品生产成本费用为1千元,库存费用为每月0.5千元,并且规定1月初和4月末均无产品库存,试求该厂如何安排各个月的生产与库存,使总成本费用最小。

 

解:matlab代码:

 

dynprog.m

 

function [p_opt,fval ] = dynprog(x,DecisFun,SubObjFun,TransFun)

 

 

 

k=length(x(1,:));

 

x_isnan=~isnan(x);

 

t_vub=inf;

 

t_vubm=inf*ones(size(x));

 

f_opt=nan*ones(size(x));

 

d_opt=f_opt;

 

%计算终端(最后一阶段)相关值

 

tmp1=find(x_isnan(:,k));

 

tmp2=length(tmp1);

 

for i=1:tmp2

 

    u=feval(DecisFun,k,x(i,k));

 

    tmp3=length(u);

 

    for j=1:tmp3

 

        tmp=feval(SubObjFun,k,x(tmp1(i),k),u(j));

 

        if tmp<=t_vub,

 

            f_opt(i,k)=tmp;

 

            d_opt(i,k)=u(j);

 

            t_vub=tmp;

 

        end;

 

    end;

 

end

 

for ii=k-1:-1:1

 

    tmp10=find(x_isnan(:,ii));

 

    tmp20=length(tmp10);

 

    for i=1:tmp20

 

        u=feval(DecisFun,ii,x(i,ii));

 

        tmp30=length(u)

 

        for j=1:tmp30

 

            tmp00=feval(SubObjFun,ii,x(tmp10(i),ii),u(j));

 

            tmp40=feval(TransFun,ii,x(tmp10(i),ii),u(j));

 

            tmp50=x(:,ii+1)-tmp40;

 

            tmp60=find(tmp50==0);

 

            if ~isempty(tmp60),

 

                if nargin<5,tmp00=tmp00+f_opt(tmp60(1),ii+1);

 

                else,tmp00=feval(ObjFun,tmp00,f_opt(tmp60(1),ii+1));

 

                end

 

                if tmp00<=t_vubm(i,ii)

 

                    f_opt(i,ii)=tmp00;

 

                    d_opt(i,ii)=u(j);

 

                    t_vubm(i,ii)=tmp00;

 

                end;

 

            end;

 

        end;

 

    end;

 

end;

 

fval=f_opt(tmp1,1);

 

fval=fval(find(~isnan(fval)),1);

 

%记录最优决策、最优圭贤和相应指标函数值

 

p_opt=[];

 

tmpx=[];

 

tmpd=[];

 

tmpf=[];

 

tmp0=find(x_isnan(:,1));

 

tmp01=length(tmp0);

 

for i=1:tmp01

 

    tmpd(i)=d_opt(tmp0(i),1);

 

    tmpx(i)=x(tmp0(i),1);

 

    tmpf(i)=feval(SubObjFun,1,tmpx(i),tmpd(i));

 

    p_opt(k*(i-1)+1,[1,2,3,4])=[1,tmpx(i),tmpd(i),tmpf(i)];

 

    for ii=2:k

 

        tmpx(i)=feval(TransFun,ii-1,tmpx(i),tmpd(i));

 

        tmp1=x(:,ii)-tmpx(i);

 

        tmp2=find(tmp1==0);

 

        if ~isempty(tmp2)

 

            tmpd(i)=d_opt(tmp2(1),ii);

 

        end;

 

        tmpf(i)=feval(SubObjFun,ii,tmpx(i),tmpd(i));

 

        p_opt(k*(i-1)+ii,[1,2,3,4])=[ii,tmpx(i),tmpd(i),tmpf(i)];

 

    end;

 

end;

 

             

 

end

 

DecisFun.m

 

function u = DecisFun(k,x)

 

d=[2 3 2 4];m=6;

 

if k==4

 

    u=d(k)-x;

 

else

 

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

 

   

 

end

 

   

 

SubObjFun.m

 

function f =SubObjFUN(k,x,u)

 

d=[2 3 2 4];

 

if u==0

 

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

 

else if u>6

 

        f=10^6;

 

    else

 

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

 

    end

 

end

 

TransFun.m

 

function s=TransFun(k,x,u)

 

d=[2 3 2 4];

 

s=x+u-d(k);

 

end

 

命令执行:

 

x1 = 0:4;

 

 

 

s=nan*ones(5,1);

 

 

 

s(1) = 0;

 

 

 

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

 

 

 

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

 

结果:

 

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

 

故每个时期的最优决策为x1=5,x2=0,x3=6,x4=0,最小成本为20,5千元。

 

3(生产——库存管理系统)设某公司计划生产某种产品A,其四个季度的订货量分别为600件、700件、500件、1200件,已知生产产品A的生产费用与产品数量的平方成正比,其比例系数是0.005,厂内有仓库可存放未销售出的产品,其存储贮费为每件每季度1元,问如何安排各季度的产量,可以既满足各季度的订货需求,又能使全年的总费用最小?

 

:matlabd代码

 

DecisFun.m

 

function u=DecisFun(k,x)

 

d =[ 600 700 500 1200];

 

if k == 4

 

    u = d(k) - x;

 

else

 

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

 

end

 

SubObjFUN.m

 

function f=SubObjFUN(k,x,u)

 

 

 

f=x+0.005*u^2;

 

 

 

end

 

TransFun.m

 

function s=TransFun(k,x,u)

 

d=[600 700 500 1200];

 

s=x+u-d(k);

 

end

 

命令执行:

 

x1 =100*(0:4);

 

 

 

s = nan*ones(5,1);

 

 

 

s(1)=0;

 

 

 

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

 

 

 

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

 

结果: p_opt =

 

 

 

           1           0         600        1800

 

           2           0         700        2450

 

           3           0         800        3200

 

           4         300         900        4350

 

 

 

 

 

fval =

 

 

 

       11800

 

 

 

4(企业生产管理问题)设某生产企业有数量为A的某种机器,可在高低两种负荷下生产某种产品,假设在高负荷下生产时,产品的年产量s1和投入生产的机器数量y的关系为s1=g(y),到年终机器的完好率为a0<a<1,在低负荷生产时,产品的年产量s2和投入生产机器数量z的关系为s2=h(z),其机器的完好率为b,现在定制一个生产计划,在每年年初,如何分配完好的机器在两种负荷下工作的数量,使得n年内的总产量最高,如果要求在n年终必须保证仍有一定数量B的完好机器,又如何制定生产计划?

 

解:matlab代码:

 

DecisFun.m

 

function u=DecisFun(k,x)

 

u = 0 : x;

 

SubOjbFUN.m

 

function f=SubObjFUN(k,x,u)

 

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

 

 

 

end

 

TransFun.m

 

function s=TransFun(k,x,u)

 

a = 0.7;

 

 

 

b = 0.9;

 

 

 

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

 

end

 

命令执行:

 

x1 = (500:999);

 

 

 

s=nan*ones(500,1);

 

 

 

s(1) = 1000;

 

 

 

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

 

 

 

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

 

结果:p_opt =

 

 

 

           1        1000        1000        8000

 

           2         700          50        3650

 

           3         620           0        3100

 

           4         558          11        2823

 

           5         500           0        2500

 

 

 

 

 

fval =

 

 

 

       20073

 

 

 

>> 

 

5(设备更新问题)

 

役龄

0

1

2

3

4

5

项目

 

 

 

 

 

 

R(t)

5

4.5

4

3.75

3

2.5

U(t)

0.5

1

1.5

2

2.5

3

 

             

 

役龄

0

1

2

3

4

5

价格

4.5

4

3.5

3

2.5

2

 

解:matlab代码:

 

DecisFun.m

 

function u=DecisFun(k,x)

 

u=[1 0];

 

 

 

end

 

SubOjbFUN.m

 

function f=SubObjFUN(k,x,u)

 

R = [5 4.5 4 3.75 3 2.5];

 

 

 

U = [0.5 1 1.5 2 2.5 3];

 

 

 

C = [0.5 1 1.5 2 2.5 3];

 

 

 

if u == 1

 

 

 

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

 

 

 

else

 

 

 

   f=R(1)-U(1)-C(x);

 

 

 

end

 

 

 

end

 

TransFun.m

 

function s=TransFun(k,x,u)

 

if u==1

 

   s=x+1;

 

else

 

   s=1;

 

end

 

end

 

命令执行:

 

x1=(1:5);

 

 

 

s=nan*ones(5,1);

 

 

 

s(1)=5;

 

 

 

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

 

 

 

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

 

结果:

 

p_opt =

 

 

 

    1.0000    5.0000         0    2.0000

 

    2.0000    1.0000    1.0000    4.5000

 

    3.0000    2.0000    1.0000    3.5000

 

    4.0000    3.0000    1.0000    2.5000

 

    5.0000    4.0000    1.0000    1.7500

 

 

 

 

 

fval =

 

 

 

   14.2500

 

 

 

>> 

 

 







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

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

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