路由选项

本部分介绍了路线求解器的一些选项。

搜索限制

搜索限值在求解器达到指定限值后终止,例如 找到的最长时间长度或找到的解数。您可以设置一个搜索 限制求解器的搜索参数。请参阅 示例的时间限制

下表介绍了最常见的搜索限制。

名称 类型 默认值 说明
solution_limit int64 kint64max 对解法的数量加以限制 生成的所有文件
time_limit.seconds int64 kint64max 所用时间的限制(以秒为单位): 。
lns_time_limit.seconds int64 100 时长限制(以秒为单位): 每个本地搜索相邻项的补全搜索。

第一项解决方案策略

第一种求解策略是求解器用来找到初始值的方法, 解决方案。下表列出了 first_solution_strategy 的选项。

选项 说明
AUTOMATIC 让求解器根据 模型。
PATH_CHEAPEST_ARC 从路线“start”开始请将其连接到 节点生成最便宜的路线段,然后将路线延伸 迭代添加到路由的最后一个节点。
PATH_MOST_CONSTRAINED_ARC PATH_CHEAPEST_ARC 类似,但弧形 并使用基于比较的选择器进行评估 约束弧的先后顺序要为路由模型分配选择器,请使用 ArcIsMoreConstrainedThanArc() 方法。
EVALUATOR_STRATEGY PATH_CHEAPEST_ARC 类似,不同之处在于弧线费用 将使用传递到 SetFirstSolutionEvaluator()
SAVINGS 储蓄算法(Clarke 和 Wright)。 参考资料 Clarke, G.&Wright、J.W. "从中央仓库到多个交货点的车辆调度" ,运筹学,第1964 年,第 568-581 页。
SWEEP 扫描算法(Wren 和 Holliday)。 参考 Anthony Wren 和Alan Holliday - 计算机排班 从一个或多个仓库到多个配送点 研究季报 (1970-1977),第第 3 期(9 月、1972 年),第 333-344 页。
CHRISTOFIDES Christofides 算法(实际上是 Christofides 算法,使用最大匹配而非最大匹配 匹配,这无法保证 公制旅行销售人员)。适用于一般车辆路线模型, 直到无法在其中插入任何节点为止。 参考 Nicos Christofides, 旅行推销员问题,报告 388,工业研究生院 行政部,CMU,1976 年。
ALL_UNPERFORMED 使所有节点处于非活跃状态。仅当有节点时 是可选的(属于析取约束条件的元素,具有有限的惩罚成本)。
BEST_INSERTION 通过将最便宜的 将节点置于最便宜的位置插入费用根据全球 代价函数。自 2012 年 2 月起, 仅适用于 可选节点(惩罚有限)。
PARALLEL_CHEAPEST_INSERTION 将 价格最低的节点;插入费用取决于 弧形代价函数。比BEST_INSERTION快。
LOCAL_CHEAPEST_INSERTION 通过将每个 将节点置于最便宜的位置插入的费用取决于弧形 代价函数。节点与 PARALLEL_CHEAPEST_INSERTION 的差异 被选中进行插入;这里的节点是 创建过程。比PARALLEL_CHEAPEST_INSERTION快。
GLOBAL_CHEAPEST_ARC 以迭代方式连接两个节点, 最便宜的路段
LOCAL_CHEAPEST_ARC 选择具有未绑定后继节点的第一个节点,然后 将其连接到生成费用最低的路段的节点。
FIRST_UNBOUND_MIN_VALUE 选择具有未绑定后继节点的第一个节点 并将其连接到第一个可用节点。这相当于使用 CHOOSE_FIRST_UNBOUND 策略与 ASSIGN_MIN_VALUE 相结合(请参阅 constraint_solver.h)。

搜索状态

您可以使用路由模型的 status 方法返回搜索的状态。 以下是用于输出搜索状态的 Python 代码:

print("Solver status: ", solver.status())

这将输出具有以下含义的整数:

说明
0 ROUTING_NOT_SOLVED:问题尚未解决。
1 ROUTING_SUCCESS:问题已成功解决。
2 ROUTING_PARTIAL_SUCCESS_LOCAL_OPTIMUM_NOT_REACHED:问题已解决 调用 RoutingModel.Solve() 之后成功,除非是本地 尚未达到最优。留出更多时间有助于改进 解决方案。
3 ROUTING_FAIL:未找到该问题的解决方案。
4 ROUTING_FAIL_TIMEOUT:达到时间限制后才能找到解决方案。
5 ROUTING_INVALID:模型、模型参数或标志无效。
6 ROUTING_INFEASIBLE:事实证明问题不可行。

本地搜索选项

下表列出了本地搜索策略(也称为 元启发法)。 请参阅更改搜索策略 ,了解有关设置这些选项的示例。

选项 说明
AUTOMATIC 让求解器选择元启发法。
GREEDY_DESCENT 接受改进(降低成本)本地搜索邻居,直到本地搜索 并且已经达到下限
GUIDED_LOCAL_SEARCH 使用引导式本地搜索来避开局部最小值。(请参阅 引导式本地搜索) 这通常是最有效的车辆路线元启发法。
SIMULATED_ANNEALING 使用模拟退火来避免局部最小值(请参阅 模拟退火)。
TABU_SEARCH 使用 Tabu 搜索来转义局部最小值(请参阅 Tabu Search)。
GENERIC_TABU_SEARCH 对解决方案的目标值使用 Tabu 搜索,以逃避局部 最小值。

传播控制

名称 类型 默认值 说明
use_full_propagation 布尔值 正确 使用完全传播的约束条件 (而不仅仅是光传播)。完整 只有在使用深度优先搜索时,或者模型 这需要大量传播,以最终确定次要 变量。将此设置更改为 true 会降低在 并会在所有情况下增加内存消耗