一、问题重述
某企业甲、乙、丙三个销售市场,其市场的利润与销售人员的分配有关,现有6个销售人员,分配到各市场所获利润如下表示,试问应如何分配销售人员才能使总利润最大?
二、问题分析
首先我们对设备的分配规定一个顺序,即先考虑分配给甲市场,其次乙市场,最后丙市场,但分配时必须保证企业的总收益最大。
将问题按分配过程分为三个阶段,根据动态规划逆序算法,可设: 1、阶段数k=1,2,3(即甲、乙、丙三个市场的编号分别为1,2,3);
2、状态变量x k 表示分配给第k 个市场至第3个市场的人员数(即第k 阶段初尚未分配的人员数);
3、决策变量u k 表示分配给第k 市场的人员数;
4、状态转移方程:x k+1=x k -u k ;
5、g k (u k )表示u k 个销售人员分配到第k 个市场所得的收益值,它由下表可查得;
6、f k (x k )表示将x k 个销售人员分配到第k 个市场所得到的最大收益值,因而可得出递推方程:
f k (x k )=
6
,...,1,0max
=k u [ g k (u k )+ f k+1(x k -u k )],k=1,2,3
f 4(x 4)=0
三、问题求解
1)k=3时,市场丙的分配方案和总收益.
最大收益:f 3(x 3)=6
,...,1,0max 3=u [g 3(x 3)]
最大收益:f 2(x 2)=2
max u [g 2(u 2)+ f 3(x 3)]=
2
max u [g 2(u 2)+ f 3(x 2- u 2
)]
最大收益:f 1(x 1)=1
max u [g 1(u 1)+ f 2(x 1- u 1)]= max[g 1(u 1)+ f 2(4- u 1)]
为此,我们可以用Matlab 语言编程使问题能跟方便地得到解决,其算法设计如下图:
运用Matlab语言编程,程序如下:m=1;
A=[0 60 80 105 115 130 150];
B=[0 65 85 110 140 160 175];
C=[0 75 100 120 135 150 180];
for i=1:7
for j=1:7
for k=1:7
if i+j+k==9
d(m)=A(i)+B(j)+C(k);
E(m,1)=i;
E(m,2)=j;
E(m,3)=k;
m=m+1;
else
continue;
end
end
end
end
MAXNum=d(1);
for l=1:size(d,2)
if d(l)>MAXNum
MAXNum=d(l);
p=l;
else
continue;
end
end
for l=1:size(d,2)
if d(l)==MAXNum
E(l,:)
else
continue;
end
end
MAXNum
按回车键后可得到以下结果:
ans =
2 5 2
MAXNum =
275
然后可以容易得到最大利润为275,最优分配方案有一个:(1,4,1)。
这样通过计算机的运行可以方便简洁的得到结果,避免了繁琐的计算,大大降低了工作量。