现在的位置: 首页 > 综合 > 正文

火车调度问题

2012年10月25日 ⁄ 综合 ⁄ 共 1654字 ⁄ 字号 评论关闭
  火车是人类生产生活中重要的交通工具。火车在铁路行行驶,铁路上的某些地方设有火车站。火车站上往往设有一些从主干线上分叉出去的铁路支路,供火车停靠,以便上下客或者卸载货物。铁路支路有一定的长度,火车也有一定的长度,且每列火车的长度相等。

假设某东西向的铁路上,有一小站。该站只有一条铁路支路可供火车停靠,并且该铁路支路最多能够容纳M辆火车(M<=3)。为了火车行驶的畅通,该站只允许火车自东方进站,自西方出站。且先进站的火车必须先出站。否则,站内火车将发生堵塞。

该火车站任务繁忙,每天都有N辆(N<=250)自东方驶向西方的火车要求在预定时刻进站,并在站内做一定时间的停靠。为了满足每辆进站火车的要求,小站的调度工作必须井井有条地展开。在小站每天的工作开始前,工作人员必须阅读所有火车的进站申请,并决定,究竟接受哪些火车的申请。而对不能满足要求的火车,小站必须提前通知他们,请他们改变行车路线,以免影响正常的铁路运输工作。由于火车进站的用时可以忽略不计,小站允许几辆火车同时进站和出站。且小站工作人员可以任意安排这些进站火车的先后排列次序。小站的工作原则是尽量多地满足申请火车的要求。

你的任务是,帮助工作人员考察某天所有火车的进站申请,并决定最多能满足多少火车的要求,以及这些火车的编号。

问题分析:

这个问题是一个最优化问题,也就是求小站能够接受火车申请的最大值。

极端情况:

第一列申请进站的火车要求停靠一天,那么如果这个请求被接受,小站最多能为一辆火车服务。

如果每M辆火车要求同时进站和同时出站,并且前面的M辆出站时间等于后面的M辆火车的进站时间,那么小站能满足所有N辆火车的进站申请。

条件:

1、对于同时进站的火车允许任意安排次序。

2、站内火车先进先出。

3、对于要求同时出站的火车,也可以任意安排次序。

 

对于这个问题的极值求解,主要思路是求最小值。因为火车是有顺序的进站,所以,可以看做一个有向图的最小值问题。


上图说明了几种情况。有向图的源点是不确定的,因为有可能同时有几辆火车提出第一个申请;也有可能第一个提出请求的火车不属于最优算法的集合。

所以这个算法需要把每一个顶点都作为源点,然后进行逐个淘汰。

1、每条边赋予1值作为权,顶点越多,弧就越多,表示被接受的火车越多,这个值越大。每个顶点的权为0。

2、最后的图是一个只有一个源和一个结束顶点,并且中间所有顶点的出度和入度必须均为1的图。


3、

以每一个顶点为源点建立一个有向图,每两个顶点,只要这两个顶点之间可达(例如列车1的请求被接受以后,2,3,4的请求都可以被接受),那么他们之间存在一条弧,每条弧拥有初始权1。

4、图中顶点按照时间线进行从左到右的分布(根据进站请求发生的时间)。

5、我们按照一定的方法,从每个图中消去尽可能少的弧(不合理的),最终得到最小值。

6、消去弧的方法是,计算每个顶点的权,其权是它的一个前驱顶点的权,加上他们之间弧的权。如果这个顶点有多个入度,那么就保留一个最大值,删除其它的进入弧。

例如,以第一个图为例,用时间线进行扫描。1没有入度弧,权不变,保持0。

2有一个入度弧,是从1过来的,那么就加1,变成1。

3有两个入度弧,从1过来的0+1,权为1;从2过来的1+1,变为2。所以删除1到3的弧,保留权大的路径。

4有三个入度弧,从1来得,0+1 = 1,从2来的,1+1=2,丛3来的2+1=3。

所以保留从3到4的弧。

最后得到调度顺序:1-2-3-4。整个图的权为最终4上的权,3。

7、最终比较所有图的权,取值最大的图。并得到调度顺序和列车编号。

8、每个图包含顶点数目不一定相同,选择一个源点,那么用时间线扫描,只能接纳其它满足条件的顶点。要考虑车站最多同时容纳的列车数量。


对于满足条件的路径大于车站容量的情况,需要把不能容纳的路径的权标志为无穷大(例如1000)。例如,1进站,2,3,4同时请求,假如5部在冲突区域,只能容纳3辆车的时候需要把2,3,4中的一个排除。

算法分析:

这个算法具有比较高的时间和空间复杂度,不是一个质量很高的算法。

抱歉!评论已关闭.