z(4)=1; z(5)=1; z(6)=1; z(7)=1; z(8)=1; z(9)=1; z(10)=1; z(11)=1;
n=@sum(point(i):z(i));
@for(links(i,j):x(i,j)<=z(i));
@for(point(i):c(i)=@sum(point(j):a(j)*x(i,j))); @for(point(i):c(i)>=z(i)*2); @for(point(i):c(i)<=z(i)*8);
@for(point(j):@sum(point(i):x(i,j))=1); @for(links(i,j):@bin(x(i,j))); @for(point(i):@bin(z(i))); @gin(n); end
2.2 第一题第二问获得最佳围堵方案的matlab程序以及lingo程序 t=11; B=[]; C=[]; k=0;
for i=1:582
if Ftime(32,i) B(1,k)=i; %B:t+3分钟内嫌犯可能逃到的点的集合 end end SizeB=size(B); s=SizeB(1,2); k=0; for i=1:s for j=1:582 if A2(j,B(1,i))==0&Ftime(32,j)>t+3 k=k+1; C(1,k)=j; end end end C=unique(C); %C:警方需要到达的点的集合 Pt=xlsread('ptxh'); %Pt:记录所有平台编号的矩阵 T11=Ftime(C,Pt); T11=T11'; xlswrite('T11',T11) X11=xlsread('x11'); %X11:由lingo解出的平台派出封锁C中路口的关系矩阵,1代表派出封锁,0相反 23 Y11=zeros(1,38); for j=1:38 for i=1:80 if X11(i,j)==1 Y11(1,j)=i; %Y11:需要派出的平台(按1~80编号) end end end for i=1:38 Y11(1,i)=Pt(Y11(1,i),1); %Y11:需要派出的平台(按实际编号) end Output=[C;Y11]; for i=1:38 Output(3,i)=Ftime(Output(1,i),Output(2,i)); %Output:最终结果矩阵,第一行是需要派出围堵的路口,第二行是应该派出警力的平台,第三行是到达各路口所需时间 end xlswrite('Output',Output) %输出最终结果 model: sets: supply/1..80/; need/1..38/; links(supply,need):t,x; endsets data: @ole('D:/x11.xls',x)=x; t=@ole('D:/t11.xls',t); enddata min=@sum(links(i,j):t(i,j)*x(i,j)); @for(links(i,j):t(i,j)*x(i,j)<11); @for(supply(i):@sum(need(j):x(i,j))<=1); @for(need(j):@sum(supply(i):x(i,j))=1); @for(links(i,j):@bin(x(i,j))); end 24