经典的任务调度任务

时间:2011-04-21 21:32:51

标签: algorithm graph scheduling gantt-chart

我正在制作一个航班调度应用程序(免责声明:这是一个大学项目,所以请不要回答代码)。请在回答之前阅读这个问题,因为它有很多特点:(

首先,一些术语问题:
你有飞机和飞机,你必须配对它们。为简单起见,我们假设一旦飞机使用它之前飞机就会自由飞行。

航班被视为任务:

  • 他们有一段时间
  • 他们有依赖
  • 他们有预期的日期/时间 开始

飞机可被视为任务(或航班,在我们的术语中)使用的资源。

航班需要特定类型的飞机。例如200航班需要B型飞机 飞机显然属于一种且仅有一种特定类型,例如,Plane Airforce One属于C型。

“项目”是航空公司在给定时间段内所有航班的集合。

所需的功能是:

  • 寻找最短的可能性 所述项目的持续时间

  • 最早和最新的可能 开始执行任务(飞行)

  • 关键任务,依据 提供的数据,完整的 先前任务的标识符。

  • 自动配对航班和 飞机,以便获得所有航班 与飞机配对。 (注意: 航班的持续时间是固定的)

  • 获取项目的甘特图 调度,其中所有航班 显示,尽早开始 所有先前提到的数据 图形化(依赖性,时间信息, 等)

所以问题是:我如何在世界上实现这一目标?特别:

  • 我们需要使用图表。
    • 图表的边缘和节点是什么 分别象征?
  • 我们是否需要将任务丢弃 实现关键任务集?

如果您还可以推荐一些算法供我们查找,那就太棒了。

2 个答案:

答案 0 :(得分:5)

这里有一些建议。

原则上你可以有一个图表,其中每个节点都是一个航班,如果B依赖于A,那么从航班A到航班B有一条边,即在A降落之前B不能起飞。您可以使用此依赖关系图来计算项目的最短持续时间 - 当您将路径上的所有航班的持续时间加在一起时,查找具有最长持续时间的图表中的路径。这是您项目的“关键路径”。

然而,你需要与飞机配对的事实使得它更加困难,尤其是因为我猜这架飞机不允许在没有乘客的情况下飞行,即飞机必须从它最后降落的同一个城市起飞。

如果您的飞机数量过多,使用模拟退火等组合优化算法很可能很容易将它们分配到飞行中。如果计划非常紧张,即你没有多余的飞机,这可能是一个难题。

要设置航班的实际起飞时间,您可以将允许的时间表制定为线性规划问题,或者作为半确定/二次规划问题。

这里有一些参考文献:

答案 1 :(得分:1)

从绘制域模型(类图)开始,并在您的脑海中明确分离:

  • 规划 - 不可变事实PlaneTypePlaneFlightFlightBeforeFlightConstraint,...
  • 规划变量PlaneToFlightAssignment

Project类中的所有实例包裹起来(=一个解决方案)。 然后在这样的解决方案上定义分数函数(AKA适应度函数)。例如,如果有2 PlaneToFlightAssignmentsFlightBeforeFlightConstraint(=航班相关性)不合适,则降低分数。

然后,通过更改PlaneToFlightAssignment实例,只需找到具有最高分数的解决方案。您可以使用several algorithms找到最佳解决方案。如果您的数据集非常小(例如10个平面),您可以使用强力