Как превратить стандартный Решатель для путешествующих продавцов в Решатель для сбора цен для or-tools?
Я настроил точный решатель для *, что является лучшим маршрутом для посещения 1000 узлов "в моем графике.
Но я хотел бы решить вопрос "какой кратчайший маршрут для посещения любых 500 из 1000 заданных узлов в моем графике".
Я думаю, я должен как-то добавить дизъюнктивные ограничения в мой питон RoutingModel
, но как?
Это грубый набросок моего текущего решателя:
from ortools.constraint_solver import pywrapcp
nodes = readNodes() # graph nodes
matrix = readMatrix() # costs between edges, distances
assert len(nodes) == len(matrix)
# Create routing model
routing = pywrapcp.RoutingModel(len(nodes), 1)
parameters = ...
# Setting the cost function.
distance = lambda p,q: matrix[p][q]
routing.SetArcCostEvaluatorOfAllVehicles(distance)
# --> here is probably more setup needed <--
# Solve, returns a solution if any.
assignment = routing.SolveWithParameters(parameters, None)
if assignment:
# Solution cost.
print assignment.ObjectiveValue()
# Inspect solution
path = ...
printSolution(nodes, table, path)
else:
print 'No solution found.'