将任务分配给资源的算法

标签 algorithm resources task

给定的是任务(工作)和资源(人)。每个任务都有一个持续时间和一个位置。每个人都有一些可用于工作的时间和一个起始位置。这是连续的,一个人可以在 8 到 15 岁之间随时待命,中间没有任何休息时间。创建一种算法,用于将任务分配给资源,分配尽可能多的工作,并且总行程时间尽可能短。所有地点之间的旅行时间是已知的。工作和资源没有限制。

我可以使用哪种算法???

谢谢。

我找到的解决方案如下:

1 - 。捕捉具有持续时间和本地化的任务。

. 2 - 将任务分配给同一地点的人员。

. 3 - 浏览所有任务并将任务分配给未分配任何匹配任务的人 地点。

. 4 - 如果一个人没有分配的任务,因为没有与其位置相匹配的工作 asiganará 他在旅行时间最短的地方完成任务。

. 5-一旦所有人都有分配的任务,就会收集任务并分配人员, 考虑到旅行时间被最小化。

. 6 - 请记住,更多的作业时间旅行时间不应超过 7 小时,因为 所有人的工作时间都是 8 点到 15 点。分配任务时,您始终必须考虑这些证据 一个人。

. 7 - 如果任务 Z 是分配一个人并且因为旅行时间最少或者因为它是唯一一个 他有可用时间并且 Z 超过了可用的任务工作时间,通过其他人搜索一些 其中分配给 (X) 的任务,加上分配给该人的最后一项任务的旅行时间,以及 任务 X 的位置适合您可用的时间,Z 适合人员任务 X。

最佳答案

好吧,这个问题绝对是NP-Hard ,至少对于一般情况。

请注意,即使您只有 1 个人,并且您的工作在不同的地点,并且您的人需要完成所有这些工作 - 这就是 Traveling Salesman Problem (TSP) .

正式的归约是:

给定一个 TSP 实例,用一个资源(人)创建一个问题实例,所有时间都为 0(或非常接近),并且位置之间的距离保持不变。此问题的解决方案是原始 TSP 问题的解决方案,反之亦然。

因此,问题是 NP-Hard,没有已知的多项式解,而且大多数人认为不存在。

一些可能的解决方案是启发式的,例如 Hill ClimbingGenetic Algorithms , 或者如果你需要一个精确的解决方案 - 你将需要 brute forc e 此处 - 检查所有可能性。

很抱歉带来坏消息,但至少您不会寻找不存在的东西(或者至少还不为任何人所知)

关于将任务分配给资源的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22907488/

相关文章:

java - Java中如何进行资源池化?

android - 错误 :(27) No resource identifier found for attribute 'srcCompat' in package 'com.example.jaisonjoseph.newsclient'

c# - 如何进行C#异步编程?

java - 如何从Assets文件夹中获取特定的图像资源?

.net - 如何在 .NET 应用程序的转储中查找默认 TaskScheduler 的内容?

c#-4.0 - 任务忽略 Thread.Sleep

python - 如何在 GridSearchCV 中正确选择最佳模型 - sklearn 和 caret 都做错了

python - 在 knn 算法中计算距离而不是欧氏距离的替代有效方法

ruby - 如何确定 Big O 比较 Ruby 中的两个数组

c# - 我应该使用哪种优化算法来最大化时间限制的利润?