OR工具C++VRP从参数赋值问题中求解



我正试图通过初始分配来解决车辆路线问题,但似乎要么我在设置搜索参数时出错,要么模型达到了局部最小值,并在达到我想要的时间限制之前返回了解决方案。

我怀疑这两种选择中的前者,但我不认为我应该做什么不同。

以下是我的做法。

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);

其中CCD_ 1是有效路由。

如果有人能告诉我我做错了什么,我将不胜感激。

编辑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(链接(有问题,问题是我做事的顺序。修复了以下问题解决方案,再次感谢

已知错误。在求解之前,需要使用参数关闭模型。

你应该使用

search_parameters=默认路由搜索参数((;

最新更新