我遇到了一个关于gurobi程序的问题,这个程序应该通过使用LP在一个长度不超过maxLength
的图中找到一定数量的不同的最短路径。为了确保不同的路径是不同的,我试图总结出一条路径与另一条路径不同的弧的数量^如果路径i和j在弧a中不同,则{
我试图通过在每个弧上取x[a,i]
和x[a,j]
之间的差来实现这一点,然后期望I和j的每个组合的所有弧的总和都大于1。以上所有内容都是常规最小成本流的约束条件。不知何故,如果我想要多条路径,我的问题对于任何测试实例都是不可行的。有什么想法吗?提前谢谢
def findXShortestPaths(V, A, pred, succ, start, end, cost, amount, maxLength, origin, destination):
model = Model("Shortest Path")
I = range(amount)
x = model.addVars(A, I, vtype = GRB.BINARY, name = "x")
y = model.addVars(A, I, I, vtype = GRB.INTEGER, name = "y")
z = model.addVars(A,I,I,vtype=GRB.BINARY,name="z")
model.setObjective(quicksum(cost[a] * x[a, i] for a in A for i in I), GRB.MINIMIZE)
model.addConstrs(quicksum(x[a,i] for a in pred[v]) - quicksum(x[a,i] for a in succ[v]) == 0 for i in I for v in V if v != origin and v != destination)
model.addConstrs(quicksum(x[a,i] for a in succ[origin]) == 1 for i in I)
model.addConstrs(quicksum(x[a,i] for a in pred[destination]) == 1 for i in I)
model.addConstrs(x[a,i] + x[b,i] <= 1 for i in I for a in A for b in A if end[a] == start[b] and end[b] == start[a])
model.addConstrs(y[a,i,j]==x[a,i]-x[a,j] for a in A for i in I for j in I)
model.addConstrs(z[a,i,j]== abs_(y[a,i,j]) for a in A for i in I for j in I)
model.addConstrs(quicksum(z[a,i,j] for a in A) >= 1 for i in I for j in I if i != j)
model.addConstrs(quicksum(x[a,i]*cost[a] for a in A) <= maxLength for i in I)
model.optimize()
目前没有回答
相关问题 更多 >
编程相关推荐