本部分介绍了路线求解器的一些选项。
搜索限制
搜索限值在求解器达到指定限值后终止,例如 找到的最长时间长度或找到的解数。您可以设置一个搜索 限制求解器的搜索参数。请参阅 示例的时间限制。
下表介绍了最常见的搜索限制。
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
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 会降低在 并会在所有情况下增加内存消耗 |