OR-Tools C++ VRP 解决带参数赋值问题
OR-Tools C++ VRP solving from assignment with parameters problem
我正在尝试通过初始分配解决车辆路径问题,似乎我在设置搜索参数时做错了,或者模型达到了局部最小值并且 returns在达到我想要的时间限制之前的解决方案。
我怀疑这两个选项中的前者,但我看不出我应该做些什么。
我是这样处理的。
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:
我发现了 bug (link) 的 github 问题,结果证明问题出在我执行操作的顺序上。
已修复问题解决方案,再次感谢
已知错误。求解前需要关闭带参数的模型
你应该使用
search_parameters = 默认路由搜索参数();
我正在尝试通过初始分配解决车辆路径问题,似乎我在设置搜索参数时做错了,或者模型达到了局部最小值并且 returns在达到我想要的时间限制之前的解决方案。
我怀疑这两个选项中的前者,但我看不出我应该做些什么。
我是这样处理的。
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: 我发现了 bug (link) 的 github 问题,结果证明问题出在我执行操作的顺序上。 已修复问题解决方案,再次感谢
已知错误。求解前需要关闭带参数的模型
你应该使用
search_parameters = 默认路由搜索参数();