时空网络模型
文章:Optimizing Aircraft Routings in response to Groundings and Delays
最好看英文的,有个中文文章,搬运人家的例子,还抄错了一列数据,看来看去看不懂,坑人。
原始航班时刻表
Aircraft2故障,15点之后不可用。
时间段取30min,过站时间取40min
仅剩aircraft1,aircraft3,可用时间分别为1410,1515,取时间段,为1400-1430,1500-1530
可用飞机-时间地点集合Λ:
Λ={aircraft1:[BOI,1400-1430],aircraft3:[GEG,1500-1530]}
统计一下航班对应的出发地,到达地之间的关系,如果图数据对不上,可能是表格数据抄错了,上面截图为准
|
出发机场 |
到达机场 |
航班号 |
出发时间 |
飞行时间 |
|
BOI |
SEA |
11 |
1410 |
1:10 |
|
BOI |
SEA |
22 |
1740 |
1:10 |
|
SEA |
GEG |
12 |
1605 |
0:55 |
|
SEA |
GEG |
23 |
1930 |
1:00 |
|
SEA |
BOI |
14 |
1920 |
1:15 |
|
SEA |
BOI |
21 |
1545 |
1:15 |
|
GEG |
SEA |
13 |
1920 |
1:00 |
|
GEG |
SEA |
24 |
2115 |
1:00 |
|
GEG |
PDX |
31 |
1515 |
1:05 |
|
GEG |
PDX |
33 |
1910 |
1:10 |
|
PDX |
GEG |
32 |
1730 |
1:00 |
|
PDX |
GEG |
34 |
2100 |
0:55 |
时间段,30min一段,比如1445就为1430-1500段,对于这个时间段,时间段的开始时间就是1430。
计算航班边的长度(下一个飞机的可用时间):当前航班的飞行时间+过站时间。
对于每个结点,结点的时间是飞机可用时间的时间段,如果某个结点已经存在,使用可用时间小的那个替换旧的可用时间。如果当一个航班生成航班边时,航班的出发时间受航班的计划出发时间(ptd)以及飞机的可用时间影响,如果航班延误了,ptd<时间段的开始,该航班边实际的出发时间就是时间段的开始,如果ptd>时间段的开始,那么,这个航班边的出发时间就是ptd。
对于每个节点,从该节点出发的航班边的个数就是计划表中由该节点出发的航班个数,每个节点都是。比如说,BOI的除沉没结点之外的所有节点{1,2,3,4},每个节点都有两个去往SEA的边,分别代表了航班11和22。
对于复制边的说法,比如节点2到节点8的边,分别表示航班22以及航班11的复制边11’
简单说明一下,飞机1在1410可用,arc(1-6)表示飞机1执行航班11,1410出发,1520到达,中转40min,节点6飞机的可用时间是1600,在时间段1600-1630中,arc(1-8)表示飞机1执行航班22,1740出发,1850到达,节点8飞机可用时间为1930。
节点2-节点8的两条线的含义分别是一个航班边22,以及一个航班11的复制边11’表示,虽然节点1-6-2中存在了航班11,但是依旧给每个节点处罚的航班边的个数等于从该机场出发的航班的个数保持一致,会生成更多的可行解,模型求解时,放进去的是所有的弧,并不是一条条的路线,只要添加约束正确,这一步不需要考虑飞机完整路线的问题,考虑的是每个航班的弧。
下面的图为了清晰,把aircraft3抹掉了。
时空网络模型中有很多的约束。
1a是目标函数,延误+取消成本最小。
1b是航班要么取消,要么执行一次。
1c是机场流平衡约束。
1d表示恢复期结束时,机场i需要的飞机满足hi