调度和路由优化

时间:2020-10-06 20:12:37

标签: algorithm optimization shortest-path

我正在设置以下优化问题:

给出:

大约100位机械师,每位都有

  • 每天的工作时间[例如8小时]
  • 每天的休息时间[例如至少1小时]
  • 每天最大加班时间[例如1小时]
  • 位置[例如底特律]

大约1000个任务,每个任务

  • 位置[例如芝加哥]
  • 持续时间[例如1小时]
  • 固定时间段[例如1pm] [可选]

目标是通过短路径安排所有任务到机械师。一个制约因素是,每个机械师都必须在自己的家中开始和结束。

有什么方法可以以简单易懂的方式解决此问题?网上是否有类似的例子? python?

1 个答案:

答案 0 :(得分:1)

由于位置原因,并非所有工作人员都可以执行任务。如果位置不重叠,则可以至少将问题细分为特定于位置的问题以避免处理。然后,您可以首先分配固定的时间段,始终在计划中选择时间最少的工人。由于小时数是一个离散值,因此,在计划小时数相等的几个工人中选择一个工人时,可以按距离选择最近的工人。

这将是一个非常基本的方法,它将执行调度,但可能不会以实用的方式进行调度-例如,当您考虑将两个附近的工作分配给不同的工人时,效率可能根本不好工作之间的旅行时间。您将不得不迭代业务并应用启发式方法以获得可用的解决方案。 我建议您获取输入数据的真实示例-可用性,位置,工作等-尽可能大,并首先创建一些评估功能:加班,出差时间,劳动力使用率,然后您会看到需要对基本算法应用什么启发式方法。

另一种方法是按位置将作业聚类为每天1个工人的群集,然后将近距离的作业分配给同一工人。为此,请研究图聚类算法。在群集中,您可以先分配固定时间的作业,然后再按随机顺序分配其余的作业。您还可以限制群集中没有重叠的固定时间作业。

无论哪种方法,无论采用哪种方法,都必须提出启发式方法。

寻找最佳解决方案可能是一个NP难题http://www.cs.mun.ca/~kol/courses/6901-f14/lec3.pdf