Я работаю над проектом, в процессе которого необходимо решить TSP. Для этого я нашел or-tools. как я понял, or-tools для tsp использует расстояние как стоимость, это означает, что стоимость проезда между любыми двумя местоположениями - это просто расстояние между ними. Мне нужно установить свои затраты вручную, так как я хочу, чтобы на стоимость влияли некоторые другие факторы, а не только расстояние. это код, который устанавливает стоимость TSP в or-tools.
def distance_callback(from_index, to_index):
"""Returns the distance between the two nodes."""
# Convert from routing variable Index to distance matrix NodeIndex.
from_node = manager.IndexToNode(from_index)
to_node = manager.IndexToNode(to_index)
return data['distance_matrix'][from_node][to_node]
transit_callback_index = routing.RegisterTransitCallback(distance_callback)
routing.SetArcCostEvaluatorOfAllVehicles(transit_callback_index)
У меня есть 2 вопроса по этому коду:
1- distance_callback
- это функция. почему функция вызывается без параметров в routing.RegisterTransitCallback(distance_callback)
?
2- Как я могу изменить этот код, чтобы установить свою индивидуальную стоимость?
У меня есть матрица моих индивидуальных затрат, и я попытался заменить return data['distance_matrix'][from_node][to_node]
моей собственной матрицей return data['cost_matrix'][from_node][to_node]
, но это не сработало должным образом.