车辆调度问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

车辆调度问题

设某车队有8辆车,存放在不同的地点,队长要派出其中5辆到5个工地去运货。各车从存放处调到装货地点所需费用列于下页表,问应选哪5辆车调到何处去运货,才能使各车从车所在地点调到装货地点所需的总费用最少?

1 2 3 4 5 6 7 8 1 30 25 18 32 27 19 22 26 2 29 31 19 18 21 20 30 19 3 28 29 30 19 19 22 23 26 4 29 30 19 24 25 19 18 21 5 21

20

18

17

16

14

16

18

MATLAB 程序——Kuhn-munkras 算法

function sumw=kuhngong(A) n=size(A,1); w=A; l=zeros(n,2); for i=1:n for j=1:n

if l(i,1)

FLAG_AGL=zeros(n,n); FLAG_S=zeros(1,n); FLAG_T=zeros(1,n);

FLAG_NGLS=zeros(1,n);f=zeros(n,2); for i=1:n for j=1:n

if l(i,1)+l(j,2)==w(i,j) FLAG_AGL(i,j)=i; end

地点 x5

y1

y2

y3

y4 y5

x1

x2 x3

x4

y6 y7 y8

end

end

M=zeros(n,2);

for i=1:n

for j=1:n

if (FLAG_AGL(i,j)==i)&(~M(j,2))

&(~M(i,1))

M(i,1)=i; M(j,2)=i;

end

end

end

FLAG3=1;

while FLAG3

FLAG3=0;

u=0;

for i=1:n

if ~M(i,1)

u=i;

break;

end

end

end

while FLAG4

for i=1:n

if FLAG_S(i)

for j=1:n

if FLAG_AGL(i,j)==i

FLAG_NGLS(j)=1;

end, end, end, end

FLAG_EQU=1;

for i=1:n

if FLAG_NGLS(i)~=FLAGT(i)

FLAG_EQU=0; break;

end, end

FLAG4=0; al=inf;

if FLAG_EQU

for i=1:n

for j=1:n

if (FLAG_S(i))&(~FLAG_T(j))

temp=l(i,1)+l(j,2)-w(i,j);

if al>temp

al=temp;

end, end, end, end

if ~u

fprintf(1,‘二部图最大权匹配运行结果\n');

fprintf(1,‘\n\n求得最大权匹配M={');

sumw=0;

for i=1:n

for j=1:n

if M(j,2)==i

fprintf(1,'x%dy%d,',i,j);

sumw=sumw+w(i,j); break;

end

end

end

fprintf(1,'}\n');

fprintf(1,‘最大权W(M)=%g\n',sumw);

return

else

FLAG_S=zeros(1,n); FLAG_T=zeros(1,n);

FLAG_S(u)=1;f=zeros(n,2);

FLAG_NGLS=zeros(1,n);

end

FLAG4=1;

for i=1:n

if FLAG_S(i)

l(i,1)=l(i,1)-al;

end, end

for j=1:n

if FLAG_T(j)

l(j,2)=l(j,2)+al;

end, end

FLAG_AGL=zeros(n,n);

for i=1:n

for j=1:n

if l(i,1)+l(j,2)==w(i,j)

FLAG_AGL(i,j)=i;

end, end, end, end

for x=1:n

for y=1:n

if (FLAG_S(x))&(~FLAG_T(y))

&(FLAG_AGL(x,y)==x)

f(y,2)=x;

if M(y,2) %%1start

for z=1:n

if (FLAG_AGL(z,y)==z) &(M(y,2)==z)

FLAG_S(z)=1; FLAG_T(y)=1;

f(z,1)=y; FLAG4=1; break;

end, end

else %%1end

stop=0; searched=zeros(n,2);

while ~stop

for i=1:n

if (f(y,2)==i)

M(y,2)=i;M(i,1)=i;

if i==u

stop=1; break;

end

for k=1:n

if (f(i,1)==k)

M(k,2)=0; y=k; break;

end, end

if stop==0

break

end, end, end, end

FLAG3=1;

break;

end %%2end

if FLAG4

break;

end

end

end

if FLAG4

break;

end

if FLAG3

break;

end

end

%FLAG_S,FLAG_T,M

if FLAG3

break;

end

end, end

引例的求解:车辆调度问题

相关文档
最新文档