航班降落调度问题
有十个航班需要降落。每个航班都有一个最早到达时间(飞机以最高速度到达降落区域的时间)和最晚到达时间(可能受其他因素如燃油量等影响)。在这个时间窗口内,航空公司需要选择一个目标时间,并将它作为航班到达时间公布出去。如果比此目标时间迟到或早到,则可能会引起机场秩序混乱并带来额外的费用支出。为将这些费用计入考虑,并方便进行比对,每个航班都定义了早到每分钟的惩罚和晚到每分钟的惩罚。表1列出了每个航班的时间窗口(从当天零时起以分钟数计)和惩罚值。
表1 航班时间窗口等信息
飞机 1 2 3 4 5 6 7 8 9 10
最早到达 129 195 89 96 110 120 124 126 135 160
目标时间 155 258 98 106 123 135 138 140 150 180
最晚到达 559 744 510 521 555 576 577 573 591 657
早到惩罚 10 10 30 30 30 30 30 30 30 30
晚到惩罚 10 10 30 30 30 30 30 30 30 30
由于尾流影响以及飞机停留在跑道上的时间影响,在两次降落之间需要间隔一段安全时间。在表2中第 行第 列即表示在航班 和 降落之间需要等待的最短时间(分钟),即便这两个航班实际上不是连续降落的。
表2 相邻降落之间的间隔时间矩阵
1 2 3 4 5 6 7 8 9 10
1 - 3 15 15 15 15 15 15 15 15
2 3 - 15 15 15 15 15 15 15 15
3 15 15 - 8 8 8 8 8 8 8
4 15 15 8 - 8 8 8 8 8 8
5 15 15 8 8 - 8 8 8 8 8
6 15 15 8 8 8 - 8 8 8 8
7 15 15 8 8 8 8 - 8 8 8
8 15 15 8 8 8 8 8 - 8 8
9 15 15 8 8 8 8 8 8 - 8
10 15 15 8 8 8 8 8 8 8 -
(1)应采取何种降落调度方案才能够使总惩罚最小,同时航班又都在指定的时间窗口中降落,并且满足两个航班降落之间的时间间隔?
(2) 由上述数据可知,任意两个航班降落的时间窗口都有部分重叠,推广到任意类型的时间窗口的情形。
我的程序是:
model:
sets:
plane/1..10/:x,fine,earliest,lastest,target;
link(plane,plane):wait,y;
endsets
data:
!最早到达时间;
earliest=129 195 89 96 110 120 124 126 135 160;
!最晚到达时间;
lastest=559 744 510 521 555 576 577 573 591 657;
!目标时间;
target=155 258 98 106 123 135 138 140 150 180;
!罚金;
fine=10 10 30 30 30 30 30 30 30 30;
!相邻降落之间的间隔时间矩阵;
wait=0 3 15 15 15 15 15 15 15 15
3 0 15 15 15 15 15 15 15 15
15 15 0 8 8 8 8 8 8 8
15 15 8 0 8 8 8 8 8 8
15 15 8 8 0 8 8 8 8 8
15 15 8 8 8 0 8 8 8 8
15 15 8 8 8 8 0 8 8 8
15 15 8 8 8 8 8 0 8 8
15 15 8 8 8 8 8 8 0 8
15 15 8 8 8 8 8 8 8 0;
enddata
min=@sum( plane:fine(i)*@abs( x(i)-target(i) ) );
@for(plane(i):@bnd(earliest(i),x(i),lastest(i)));!最早降落时间和最迟降落时间限制;
@for(plane(i):@for(plane(j) | i#ne#j:y(i,j)=@if(x(i) #le# x(j),1,0)));!飞机i比飞机j早降落,y(i,j)=1,否则为0;
@for(link(i,j) | i#ne#j:(y(i,j)+y(j,i))=1);
@for(plane(i):@for(plane(j) | i#ne#j:(x(i)+wait(i,j))<=x(j)));
@for(plane:@gin(x));
@for(link:@bin(y));
end
但运行后会出现:Error code 63;Error Text:model is ill defined ,check for undefined indices and/or contions in expression:1
Note: setting the "fixed var reduction"option to "always"may eliminate this error.you may set this option on the "general solver" tab of the lingo|options command.
但我按上面做了以后仍会出现相同的错误,请帮改正并指出来,谢谢!
4 个解决方案
#1
SF,友情帮顶了,
#2
帮顶,踢踢人气。
#3
应该是没设全局变量
#4
反问一句,第二问,需要考虑哪几个方面~?
#1
SF,友情帮顶了,
#2
帮顶,踢踢人气。
#3
应该是没设全局变量
#4
反问一句,第二问,需要考虑哪几个方面~?