Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何最小化n个人在m个位置上的旅行距离_Algorithm - Fatal编程技术网

Algorithm 如何最小化n个人在m个位置上的旅行距离

Algorithm 如何最小化n个人在m个位置上的旅行距离,algorithm,Algorithm,这是现实生活中的问题,不是家庭作业。 我将在问题中使用具体的数字 我的客户有一个非常大的仓库,有16000个地点。 他们想在随机选择的200个地点实际清点数量,以验证计算机系统的数量是否准确 我知道如何随机选择200个位置(Knuth TAOCP) 位置之间的距离很容易计算。仓库布置在过道中(像一个大箱子商店)。基本上,我所学的出租车指标(delta X+delta Y) 假设他们将分配4人执行此任务。我如何为每个人生成一个位置列表,以最大限度地减少人们旅行的总距离 对于通用算法,要计数的位置数

这是现实生活中的问题,不是家庭作业。 我将在问题中使用具体的数字

我的客户有一个非常大的仓库,有16000个地点。 他们想在随机选择的200个地点实际清点数量,以验证计算机系统的数量是否准确

我知道如何随机选择200个位置(Knuth TAOCP)

位置之间的距离很容易计算。仓库布置在过道中(像一个大箱子商店)。基本上,我所学的出租车指标(delta X+delta Y)

假设他们将分配4人执行此任务。我如何为每个人生成一个位置列表,以最大限度地减少人们旅行的总距离

对于通用算法,要计数的位置数和分配给任务的人数将作为输入参数

为了帮助你回答这个问题,我有几十年的经验,但我是自学成才的。我猜这是动态编程的一个好问题(最近看了麻省理工学院的系列讲座),但从未实现过。坚持形成递归

或者其他算法。这不是一吨的数据点,所以可能是蛮力方法

如果其他标签适用,请推荐。 如果你想发布代码片段,任何语言都可以。

考虑到“总成本”标准和地点的随机分布,我预计最佳路径是让一名员工覆盖200个地点中的大部分或全部;其他3个将只计算在起点/终点附近弹出的独立库存袋,
S

对于一般攻击,我建议您从
S
向不同方向派遣四名工作人员。从那里,采取贪婪的方法:找到离四名工人中任何一位最近的位置;把那个工人派到那个地方去。继续,直到访问了所有位置。请注意,您将
S
作为每个工人的第一个和最后一个点

现在,处理每个工人的路线,以最小化该工人的总行程

最后,“扰动”每条路径。拾取一个随机位置并将其从路径中移除。将其重新分配到该位置增量成本最小的路径。继续此重新分配,直到您完成,比如说1000次迭代,而不改变分配。

这听起来像个问题。您可以在预处理步骤中选择随机位置,并添加标记“起始”位置

有几种模型定义语言允许您声明可以传递给解算器的正式模型。您可能需要GAMS或AMPL的许可证。Julia的JuMP包提供了一种非常好用的免费模型定义语言


实际上,如果库存检查对时间敏感,您可能需要将单个行程时间的最大值降至最低。

我没有答案,但我想知道是否根据距离将一组地点分为四组,为每个节点分配一个人可能会起作用。也许是一种改进版的无向哈密顿循环,混合了djikstra循环,其中节点之间的边有一个距离,而不是一个工人试图连接所有节点,你有4个,他们都在努力寻找这样做所需的最短距离?你需要一个可证明的最佳解决方案吗?由于这是一个现实问题,我怀疑一个非常好的解决方案就足够了。您是否需要最小化总距离,或任何一个库存工人的最大行程?您有一个旅行推销员问题的限制版本。研究一下。对于有四名工人的修改应该是最小的。@Prune客户的总成本是所有4名工人的总行程-他们应该在生产产品,而不是计算库存。但你是对的,一个非最优的解决方案就足够了。我可以做一个旅行推销员,把名单分成4份,但之后需要进行笨拙的“调整”。我不想让工人走1 1/2英里到仓库的另一边去计算一个与我给工人2的清单很接近的位置——是多个工人让我很难解决这个问题。另外,通用解决方案更有趣。但我会考虑更多的实际问题。这非常有帮助。这个问题变得更复杂了,因为“成本”必须考虑在每个位置计算项目需要花费多长时间(期望对3个项目与400个项目进行计数),但是我可以把它建立在算法中。(将“总成本”改为工人的时间,而不仅仅是行程)。