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

OR Tools VRPTW初始方案判定与多方案输出技术咨询

关于Google OR-Tools VRPTW初始方案与多方案获取的问题

第一个返回的方案是否为初始方案?

  • 默认情况下,调用routing.SolveWithParameters(search_parameters)时,求解器会先通过配置的初始策略(如PATH_CHEAPEST_ARC)构建初始方案,随后立即启动元启发式优化(如局部搜索)来改进方案。因此,求解器返回的第一个方案大概率是经过优化后的版本,而非原始的初始构建方案。
  • 若要获取未经过优化的纯初始方案,无需调用Solve方法,直接生成即可:
    routing.CloseModel()
    initial_assignment = routing.ComputeInitialAssignment()
    
    此时initial_assignment就是基于指定初始策略生成的初始方案,没有经过后续优化。

设置search_parameters.solution_limit = 5仅输出一个方案的解决方法

  • solution_limit参数控制求解器找到多少个更优(或可行)的方案后停止,但默认配置下求解器仅返回最终的最优方案,不会主动输出所有中间方案;若探索时间不足,也可能找不到足够多的方案。需额外配置以下两点:
    1. 使用SolutionCallback捕获所有方案:实现回调类,每次求解器找到新方案时触发,将方案保存或输出。示例代码片段:
      class SolutionCallback(pywrapcp.Routing.SolutionCallback):
          def __init__(self):
              self.solutions = []
          
          def OnSolutionCallback(self):
              current_assignment = self.Assignment()
              self.solutions.append(current_assignment)
              # 此处可添加输出当前方案的逻辑
      
      callback = SolutionCallback()
      search_parameters = pywrapcp.DefaultRoutingSearchParameters()
      search_parameters.solution_limit = 5
      routing.RegisterSearchCallback(callback)
      routing.SolveWithParameters(search_parameters)
      
    2. 调整时间限制:若求解器因时间不足无法找到5个方案,可设置search_parameters.time_limit.seconds = 10(根据需求调整),给求解器足够的探索时间。

仅获取初始方案的最简方式

直接调用ComputeInitialAssignment()即可得到基于指定初始策略的初始方案,无需启动求解器的优化流程,这是获取初始方案最高效的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:52:54