我已针对自己的特定问题修改了https://developers.google.com/optimization/routing/vrptw中的数据-见下文。
如果我尝试使用FirstSolutionStrategy.PATH_CHEAPEST_ARC
或FirstSolutionStrategy.AUTOMATIC
,则需要42秒才能解决这个小问题!
如果我更改为FirstSolutionStrategy.PATH_MOST_CONSTRAINED_ARC
,它将在3毫秒内解决。
为什么求解器对此设置如此敏感?求解器是否可以并行尝试所有策略并选择最快或最佳的策略?
def create_data_model():
"""Stores the data for the problem."""
data = {}
data['time_matrix'] = [
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1000, 99999, 99999, 99999, 99999, 99999, 73, 104, 113, 117, 99999],
[1000, 99999, 99999, 99999, 99999, 99999, 84, 99999, 122, 125, 99999],
[1000, 99999, 99999, 99999, 99999, 99999, 97, 75, 122, 125, 99999],
[1000, 99999, 99999, 99999, 99999, 99999, 99999, 61, 109, 114, 103],
[1000, 99999, 99999, 99999, 99999, 99999, 47, 99999, 83, 89, 77],
[1000, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 99, 92],
[1000, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 88, 94],
[1000, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 42, 64],
[1000, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 51],
[1000, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 99999, 99999]]
data['time_windows'] = [(0, 10000), (435, 450), (450, 465), (450, 465), (475, 490), (480, 495), (540, 555), (540, 555), (600, 615), (720, 735), (810, 825)]
data['num_vehicles'] = 5
data['depot'] = 0
return data
还更改了时间维度:
routing.AddDimension(
transit_callback_index,
10000, # allow waiting time
10000, # maximum time per vehicle
True, # Don't force start cumul to zero.
time)