Algorithm 时间表及;路由优化

Algorithm 时间表及;路由优化,algorithm,optimization,shortest-path,Algorithm,Optimization,Shortest Path,我正在设置以下优化问题: 给定: 大约100名技工,每个都有 每天工作时间[例如8小时] 每天休息时间[例如,最少1小时] 每天最大加班时间[例如1小时] 地点[如底特律] 大约1000个任务,每个任务都有 地点[如芝加哥] 持续时间[例如1小时] 固定时段[如下午1点][可选] 目标是将所有任务安排给具有短路径的机械师。一个限制是每个技工都在自己的家乡开始和结束 有没有办法以一种简单易懂的方式解决这个问题?例如python中是否有类似的在线示例?并非所有工人都可以执行任务,因为位置原因

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

给定:

大约100名技工,每个都有

  • 每天工作时间[例如8小时]
  • 每天休息时间[例如,最少1小时]
  • 每天最大加班时间[例如1小时]
  • 地点[如底特律]
大约1000个任务,每个任务都有

  • 地点[如芝加哥]
  • 持续时间[例如1小时]
  • 固定时段[如下午1点][可选]
目标是将所有任务安排给具有短路径的机械师。一个限制是每个技工都在自己的家乡开始和结束


有没有办法以一种简单易懂的方式解决这个问题?例如python中是否有类似的在线示例?

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

<>这将是一个非常基本的方法,可以做调度,但可能不会以实际的方式来做。例如,两个接近的工作可以分配给不同的工人,效率可能不太好,当你考虑工作之间的旅行时间。您必须对业务进行迭代,并应用一些启发式方法来获得可用的解决方案。 我建议您尽可能多地获取输入数据(可用性、位置、工作等)的真实样本,并首先创建一些评估函数:加班、旅行时间、劳动力利用率都应考虑在内,然后您可以看到需要将哪些启发式应用于基本算法

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

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

寻找最优解可能是一个NP难问题