【发布时间】:2021-04-23 21:24:22
【问题描述】:
我正在尝试通过初始分配解决车辆路线问题,似乎我在设置搜索参数时做错了,或者模型达到了局部最小值并在达到我想要的之前返回了一个解决方案时间限制。
我怀疑这两个选项中的前者,但我看不出我应该做些什么不同。
这是我的做法。
const Assignment *initial_solution =
routing.ReadAssignmentFromRoutes(initial_routes, false);
RoutingSearchParameters searchParameters;
searchParameters.set_local_search_metaheuristic(
LocalSearchMetaheuristic::GUIDED_LOCAL_SEARCH);
searchParameters.mutable_time_limit()->set_seconds(600);
searchParameters.set_log_search(true);
const Assignment *solution = routing.SolveFromAssignmentWithParameters(initial_solution, searchParameters);
其中initial_routes 是有效路由。
如果有人能指出我做错了什么,我将不胜感激。
编辑 1: 按照 Laurent 的建议,我尝试了:
RoutingSearchParameters searchParameters;
searchParameters.set_local_search_metaheuristic(
LocalSearchMetaheuristic::GUIDED_LOCAL_SEARCH);
searchParameters.mutable_time_limit()->set_seconds(600);
searchParameters.set_log_search(true);
routing.CloseModelWithParameters(searchParameters);
const Assignment *solution =
routing.Solve(initial_solution);
(也尝试了 SolveFromAssignmentWithParameters,结果相同)
这给了我在分段错误之前的以下消息
Invalid RoutingSearchParameters: local_search_neighborhood_operator.use_relocate should be set to BOOL_TRUE or BOOL_FALSE instead of BOOL_UNSPECIFIED (value: 0)
我试图找到特定的选项,但我发现唯一提到 use_relocate 的是 RoutingSearchParameters_LocalSearchNeighborhoodOperators 类型的对象。
然后我尝试将searchParameters 初始化为默认搜索参数,但它们似乎再次没有被注册。相反,我收到有关模型已关闭的警告。
再次感谢您的任何想法。
编辑 2: 我发现了 github 的 bug (link) 问题,结果问题出在我做这些事情的顺序上。 已修复以下问题解决方案,再次感谢
【问题讨论】: