abs_389;()不工作时gurobi差值的绝对值

2024-07-03 06:53:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我遇到了一个关于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()

Tags: in路径formodelorigindestinationstartend