You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何求解收益优先、耗时最短的多工人旅行商启发式问题?

多工人收益最大化路径规划问题解法思路

这本质是带收益的多车辆路径规划问题(VRPP),属于NP-hard问题,62个节点的规模没法用精确算法求解,得用启发式方法推进,以下是具体落地步骤:

问题明确

你的核心是双目标优化:

  • 总收益最大化(选中房屋的Payment总和)
  • 总耗时最短(工人移动天数+房屋Days_needed总和)
    需要先明确两个目标的优先级,或者将其加权合并为单目标(比如 总收益 - α*总耗时,α是你根据业务设定的时间权重)。

数据梳理

你提供的数据集:

# 房屋任务数据
> glimpse(problem)
Rows: 62
Columns: 5
$ Location_x   <dbl> 27, 20, 29, 26, 22, 23, 22, 24, 25, 23, 30, 27, 21, 22, 21, 24,…
$ Location_y   <dbl> 72, 74, 70, 80, 78, 72, 73, 77, 74, 77, 75, 80, 71, 77, 80, 80,…
$ house_id     <chr> 146, 170, 171, 137, 121, 178, 163, 119, 113, 114, 199, 162, 102…
$ Payment      <dbl> 5378, 7971, 5831, 3303, 6602, 1268, 5371, 1927, 653, 4583, 839,…
$ Days_needed  <dbl> 3, 2, 2, 1, 3, 4, 2, 1, 2, 5, 1, 5, 4, 3, 5, 2, 2, 3, 1, 3, 1, …

# 工人数据
> glimpse(workers)
Rows: 8
Columns: 1
$ Professional <chr> "Joe", "Harry", "Jefferson", "Anie", "Donovan", "Jessica", "Leo…

具体解法步骤

1. 预处理:计算移动时间矩阵

根据房屋的Location_x和Location_y计算任意两点间的欧氏距离,再转化为移动天数(比如假设工人每天能移动10单位距离,移动天数=距离/10),把地理位置信息转化为可量化的时间成本。

2. 初始解生成(贪心算法)

先从单目标入手快速得到可行解:

  • 按Payment/Days_needed(单位时间收益)从高到低排序房屋
  • 依次将房屋分配给当前总耗时最少的工人(给空闲工人优先分配高价值任务)
  • 每个工人的路径按“最近邻”规则排序,减少移动时间

3. 进阶优化(启发式算法)

贪心解只是可行解,要得到更优解,用以下方法调整:

  • 模拟退火:随机交换两个工人的任务,或者调整单个工人的任务顺序,如果新解的目标更优则接受,否则按一定概率接受(避免陷入局部最优)
  • 遗传算法:将每个工人的任务序列作为“基因”,通过交叉、变异操作生成新解,筛选出目标更优的后代
  • 帕累托最优解:如果不想加权合并目标,可生成帕累托前沿(所有无法同时提升收益和减少时间的解),再根据业务需求选择最适配的解

4. 扩展约束适配

后续加入新约束(比如工人技能匹配、任务时间窗口)时,只需要在解的合法性判断环节加入对应条件:

  • 若某任务需要特定技能,分配时只给具备该技能的工人
  • 若任务有时间窗口,需确保工人到达时间在窗口范围内

工具推荐(R语言)

  • TSP包:基础TSP/VRP问题的启发式实现
  • GA包:遗传算法框架,可自定义目标函数和约束
  • vrp包:专门的路径规划工具

内容的提问来源于stack exchange,提问作者Diogo Bichon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 05:15:30