根据动态规划的分析步骤,本着具体问题具体分析的原则,得到如下程序:
程序代码:
% 保存为 dtgl1.m
% 根据题目中的算法,逆序开始;
i=0:4;
cl=4-i;
cbq4=3*(cl~=0)+cl+0.5*i;
cb4=min(cbq4);
fprintf('第四时期的总成本为:');
disp(cbq4);
fprintf('最优解为:');
disp(cb4);
cb3=[];
cbq3=[];
for i=0:6
if 2-i>=0
cl=(2-i):(6-i);
qmch3=0:4;
yhcb=cbq4;
else
cl=0:(6-i);
qmch3=(i-2):4;
yhcb=cbq4((i-1):5);
end
cbz1=3*(cl~=0)+cl+0.5*i;
cbz2=cbz1+yhcb;
cbq3=[cbq3;cbz2 zeros(1,5-length(cbz1))];
cb3=[cb3 min(cbz2)];
end
fprintf('第三时期的总成本为:\n');
disp(cbq3);
fprintf('最优解为:');
disp(cb3);
cbq2=[];
cb2=[];
for i=0:4
if 3-i>=0
else
cl=(3-i):(5-i);
qmch2=0:2;
yhcb=cb3(1:3);
cl=0:(5-i);
qmch2=(i-3):2;
yhcb=cb3((i-2):3);
end
cbz1=3*(cl~=0)+cl+0.5*i;
cbz2=cbz1+yhcb;
cbq2=[cbq2;cbz2 zeros(1,3-length(cbz2))];
cb2=[cb2 min(cbz2)];
end
fprintf('第二时期的总成本为:\n');
disp(cbq2);
fprintf('最优解为:');
disp(cb2);
cl=2:6;
qmch1=0:4;
cbz1=3+cl;
yhcb=cb2;
cbz2=cbz1+yhcb;
cbq1=cbz2;
cb1=min(cbz2);
fprintf('第一时期的总成本为:');
disp(cbq1);
fprintf('最优解为:');
disp(cb1);
y1=cb1;
fprintf('相应的第一期的最优为%f\n',y1);
v1=find(cbq1==cb1);
y2=cb2(v1);
fprintf('相应的第二期的最优为%f\n',y2);
v2=find(cbq2(v1,:)==y2);
y3=cb3(v2);
fprintf('相应的第三期的最优为%f\n',y3);
v3=find(cbq3(v2,:)==y3);
y4=cbq4(v3);
fprintf('相应的第四期的最优为%f\n',y4);
v=[0 v1-1 v2-1 v3-1];
fprintf('各时期期初存货量为:');
disp(v);
实验结果:
开始时是从这个例子入手的,采用了条件限制选择的原则,得到最优解。
程序代码:
% 首先将数据赋给三个向量;
x1=[0 3 7 9 12 13];
x2=[0 5 10 11 11 11];
x3=[0 4 6 11 12 12];
% 用来储存得到的总效益;
x=[];
% 用来储存相应的规划策略;
bj=[];
% 开始规划;
for i=0:5
for j=0:5
for k=0:5
if i+j+k==5
bj=[bj;i j k];
a=x1(i+1)+x2(j+1)+x3(k+1);
x=[x a];
end
end
end
end
% 寻找最大值;
mx=max(x);
lg=length(x);
jh=[];
% 寻找最优规划;
for i=1:lg
if x(i)==mx
jh=[jh;bj(i,:)];
end
end
fprintf('\n 此问题的最优解为:%d',mx);
fprintf('\n\n 相应的最优规划为:\n');
fprintf('第一车间 第二车间 第三车间\n');
disp(jh)
实验结果:
对比答案: