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参数控制求解器找到多少个更优(或可行)的方案后停止,但默认配置下求解器仅返回最终的最优方案,不会主动输出所有中间方案;若探索时间不足,也可能找不到足够多的方案。需额外配置以下两点:- 使用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) - 调整时间限制:若求解器因时间不足无法找到5个方案,可设置
search_parameters.time_limit.seconds = 10(根据需求调整),给求解器足够的探索时间。
- 使用SolutionCallback捕获所有方案:实现回调类,每次求解器找到新方案时触发,将方案保存或输出。示例代码片段:
仅获取初始方案的最简方式
直接调用ComputeInitialAssignment()即可得到基于指定初始策略的初始方案,无需启动求解器的优化流程,这是获取初始方案最高效的方式。
内容的提问来源于stack exchange,提问作者Pepam
相关产品推荐
相关产品推荐

