微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OR-Tools C++ VRP 从分配参数问题求解

如何解决OR-Tools 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);

其中 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),结果问题出在我做事的顺序上。 已按照问题解决方案修复,再次感谢

解决方法

已知错误。求解前需要关闭带参数的模型。

你应该使用

search_parameters = DefaultRoutingSearchParameters();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。