调度分配

我正在开发一个航班调度应用程序(免责声明:这是一个大学项目,请不要代码回答)。 在回答之前请阅读这个问题w /注意的一部分,因为它有很多特点:(

首先,一些术语问题:
你有飞机和航班,你必须配对。 为了简单起见,我们假定一旦前一次使用该飞机的飞机降落时,一架飞机就是免费的。

航班被视为任务:

  • 他们有一个持续时间
  • 他们有依赖关系
  • 他们有一个预期的开始日期/时间
  • 飞机可以看作是任务(或航班,用我们的术语)使用的资源。

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

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

    所需的功能是:

  • 为上述项目寻找最短可能的持续时间

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

  • 关键任务在提供数据的基础上完成前面任务的标识符。

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

  • 通过项目计划获得甘特图,其中所有航班都尽早开始,以图形方式显示所有以前提及的数据(依赖关系,时间信息等)

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

  • 我们需要使用图表。
  • 图的边和节点分别代表什么?
  • 我们是否需要放弃实现关键任务集的任务?
  • 如果你还可以推荐一些算法让我们查找,那就太好了。


    这里有一些建议。

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

    但是,您需要与飞机配对的事实使其变得更加困难,尤其是, 因为我猜想假设飞机不允许没有乘客飞行,即一架飞机必须从它最后一次降落的同一个城市起飞。

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

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

    这里有一些参考:

  • http://en.wikipedia.org/wiki/Simulated_annealing
  • http://en.wikipedia.org/wiki/Linear_programming
  • http://en.wikipedia.org/wiki/Quadratic_programming
  • http://en.wikipedia.org/wiki/Gradient_descent
  • http://en.wikipedia.org/wiki/Critical_path_method

  • 首先绘制一个领域模型(类图),并在您的脑海中明确分离:

  • 规划不变的事实PlaneTypePlaneFlightFlightBeforeFlightConstraint ,...
  • 计划变量PlaneToFlightAssignment
  • 将所有这些实例封装在该Project类(=解决方案)中。 然后在这样的解决方案上定义一个评分函数(AKA适应度函数)。 例如,如果有2个PlaneToFlightAssignmentsFlightBeforeFlightConstraint (=航班依赖性)不FlightBeforeFlightConstraint ,则降低分数。

    然后,只需通过更改PlaneToFlightAssignment实例即可找到具有最佳分数的解决方案。 有几种算法可以用来找到最佳解决方案。 如果你的数据集真的很小(比如10架),你可能会使用暴力。

    链接地址: http://www.djcxy.com/p/84811.html

    上一篇: scheduling assignment

    下一篇: Linux kernel scheduling