如何解决abs_无法正常工作的gurobi差异的绝对值
我遇到了一个gurobi程序的问题,该程序应该使用LP在长度不超过maxLength
的图中找到一定数量的不同最短路径。为了确保不同的路径是不同的,我试图总结一条路径与另一条路径不同的弧的数量。如果路径i和j在圆弧a中不同,则y[a,i,j]
应该为1,否则为零。
我试图通过在每个弧上获取x[a,i]
和x[a,j]
之间的差,然后期望i和j的每个组合在所有弧上的总和更大来实现这一点。上面的所有内容仅是常规最小成本流的约束。如果我想要多个路径,那么对于任何一个测试实例,我的问题都不可行。有任何想法吗?预先感谢。
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,vtype = GRB.INTEGER,name = "y")
z = model.addVars(A,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,j]==x[a,i]-x[a,j] for a in A for i in I for j in I)
model.addConstrs(z[a,j]== abs_(y[a,j]) for a in A for i in I for j in I)
model.addConstrs(quicksum(z[a,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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。