Some constraints are not implemented
Answered

# constraint (1.4)
for k in range(data.vehicleNum):
expr1 = LinExpr(0)
expr2 = LinExpr(0)
for j in range(1, 6):
expr1.addTerms(1, X[0][j][k])
for i in range(1, 6):
expr2.addTerms(1, X[i][0][k])
model.addConstr(expr1 == expr2, "c1.4")
expr1.clear()
expr2.clear()
for k in range(data.vehicleNum):
expr = LinExpr(0)
for i in range(1, 6):
expr.addTerms(1, X[i][0][k])
model.addConstr(expr == 1, "c1.4_1")
expr.clear()
# constraint (1.5)
for i in range(1, data.nodeNum):
expr1 = LinExpr(0)
expr2 = LinExpr(0)
for k in range(data.vehicleNum):
expr1.addTerms(1, C[i][k])
for d in range(data.droneNum):
expr2.addTerms(1, Ct[i][k][d])
model.addConstr(expr1 + expr2 == 1, "c1.5")
expr1.clear()
expr2.clear()
for i in range(1, 6):
expr = LinExpr(0)
for k in range(data.vehicleNum):
expr.addTerms(1, C[i][k])
model.addConstr(expr == 1, "c1.5_1")
expr.clear()
for i in range(6, 10):
expr = LinExpr(0)
for k in range(data.vehicleNum):
for d in range(data.droneNum):
expr.addTerms(1, Ct[i][k][d])
model.addConstr(expr == 1, "c1.5_2")
expr.clear()
# constraint (1.6)
for k in range(data.vehicleNum):
for j in range(1, 6): # j∈Ct, 非隔离区节点集合
expr1 = LinExpr(0)
expr2 = LinExpr(0)
for i in range(1, 6):
if(i!=j):
expr1.addTerms(1, X[i][j][k])
for l in range(1, 6):
if(l!=i):
expr2.addTerms(1, X[j][l][k])
model.addConstr(expr1 == expr2, "c1.6")
expr1.clear()
expr2.clear()
# constraint (1.7)
for k in range(data.vehicleNum):
for d in range(data.droneNum):
for j in range(6, 10):
expr1 = LinExpr(0)
expr2 = LinExpr(0)
for i in range(6, 10):
if(i!=j):
expr1.addTerms(1, Y[i][j][k][d])
expr2.addTerms(1, Y[j][i][k][d])
model.addConstr(expr1 == expr2, "c1.7")
expr1.clear()
expr2.clear()
# constraint (1.8)
for k in range(data.vehicleNum):
for d in range(data.droneNum):
expr1 = LinExpr(0)
expr2 = LinExpr(0)
for i in range(0, 5):
expr1.addTerms(1, Vl[i][k][d])
for j in range(1, 6):
expr2.addTerms(1, Vr[j][k][d])
model.addConstr(expr1 == expr2, "c1.8")
model.addConstr(expr1 <= 1, "c1.8_1")
expr1.clear()
expr2.clear()
# constraint (1.9)
for k in range(data.vehicleNum):
for j in range(1, 6):
expr = LinExpr(0)
for i in range(0, 6):
if(i!=j):
expr.addTerms(1, X[i][j][k])
model.addConstr(C[j][k] * (expr - 1) == 0, "c1.9")
expr.clear()
# constraint (1.10)
for k in range(data.vehicleNum):
for j in range(1, 6):
expr = LinExpr(0)
for i in range(0, 6):
if (i != j):
expr.addTerms(1, X[j][i][k])
model.addConstr(C[j][k] * (expr - 1) == 0, "c1.10")
expr.clear()
# constraint (1.11)
for d in range(data.droneNum):
for j in range(6, 10):
for k in range(data.vehicleNum):
expr = LinExpr(0)
for i in range(data.nodeNum):
if (i != j):
expr.addTerms(1, Y[i][j][k][d])
model.addConstr(Ct[j][k][d] * (expr - 1) == 0, "c1.11")
expr.clear()
# constraint (1.12)
for d in range(data.droneNum):
for j in range(6, 10):
for k in range(data.vehicleNum):
expr = LinExpr(0)
for i in range(data.nodeNum):
if (i != j):
expr.addTerms(1, Y[j][i][k][d])
model.addConstr(Ct[j][k][d] * (expr - 1) == 0, "c1.12")
expr.clear()
# constraint (1.13)
for d in range(data.droneNum):
for k in range(data.vehicleNum):
for i in range(0, 5): # Vl
expr = LinExpr(0)
for j in range(6, 10): # Cd
if (i != j):
expr.addTerms(1, Y[i][j][k][d])
model.addConstr(expr == Vl[i][k][d], "c1.13")
expr.clear()
# constraint (1.14)
for d in range(data.droneNum):
for k in range(data.vehicleNum):
for i in range(1, 6): # Vr
expr = LinExpr(0)
for j in range(6, 10): # Cd
if (i != j):
expr.addTerms(1, Y[j][i][k][d])
model.addConstr(expr == Vr[i][k][d], "c1.14")
expr.clear()
# constraint (1.15)
for k in range(data.vehicleNum):
for l in range(data.droneNum):
for i in range(0, 5): # Vl
expr = LinExpr(0)
for j in range(0, 6):
if (i != j):
expr.addTerms(1, X[j][i][k])
model.addConstr(expr >= P[k][l] * Vl[i][k][l], "c1.15")
expr.clear()
# constraint (1.16)
for k in range(data.vehicleNum):
for l in range(data.droneNum):
for i in range(1, 6): # Vr
expr = LinExpr(0)
for j in range(0, 6):
if (i != j):
expr.addTerms(1, X[j][i][k])
model.addConstr(expr >= P[k][l] * Vr[i][k][l], "c1.16")
expr.clear()
# constraint (1.17)
# i和j的关系?搭载无人车d的卡车k应先到达无人车d的释放节点Vl,后到达该无人车的回收节点Vr
# 临时变量temp表示乘积 i应该用所有节点吗
for k in range(data.vehicleNum):
for l in range(data.droneNum):
for i in range(0, 5):
for j in range(1, 6):
for p in range(data.nodeNum):
if(i != j):
model.addConstr(temp_2[p][k][l] == Vl[i][k][l] * Vr[j][k][l], name="c1.17")
model.addConstr(temp_2[p][k][l] >= 0 + eps - M * (1 - b), name="c1.17_1")
model.addConstr((b == 1) >> (A[i][k] - A[j][k] >= 0), name='c1.17_2')
# constraint (1.18)
for i in range(0, 5):
for k in range(data.vehicleNum):
for d in range(data.droneNum):
model.addConstr(temp[i][k][d] == a[i][k][d] - (A[i][k] + s[i][k][d]))
model.addConstr(temp_1[i][k][d] == max_(temp[i][k][d], constant=0))
model.addConstr(A[i][k] >= a[i][k][d] + eps - M * (1 - b), name="conStr1")
model.addConstr(A[i][k] <= a[i][k][d] + M * b, name="conStr2")
model.addConstr((b == 0) >> (r[i][k][d] == A[i][k] + temp_1[i][k][d] + data.W), name="conStr3")
model.addConstr((b == 1) >> (r[i][k][d] == A[i][k] + data.W), name="conStr4")
# constraint (1.19)
for k in range(data.vehicleNum):
for d in range(data.droneNum):
for i in range(data.nodeNum):
for j in range(data.nodeNum):
if (i != j):
model.addConstr(a[j][k][d] - a[i][k][d] >= s[i][k][d] + t[i][j][k][d] - big_M + big_M * Y[i][j][k][d], "c1.19")
# constraint (1.20)
for k in range(data.vehicleNum):
for i in range(data.nodeNum):
for j in range(data.nodeNum):
if(i != j):
model.addConstr(A[j][k] - A[i][k] >= S[i][k] + T[i][j][k] - big_M + big_M * X[i][j][k], "c1.20")
Solution count 1: 0
Optimal solution found (tolerance 1.00e-04)
Best objective 0.000000000000e+00, best bound 0.000000000000e+00, gap 0.0000%
['C', '2', '0'] = 1
['C', '3', '0'] = 1
['C', '4', '0'] = 1
['C', '5', '0'] = 1
['Ct', '7', '1', '0'] = 1
['C', '1', '1'] = 1
['Ct', '6', '1', '1'] = 1
['Ct', '9', '2', '0'] = 1
['Ct', '8', '2', '1'] = 1
['X', '0', '5', '0'] = 1
['X', '1', '2', '0'] = 1
['X', '1', '3', '0'] = 1
['X', '1', '4', '0'] = 1
['X', '2', '1', '0'] = 1
['X', '3', '1', '0'] = 1
['X', '4', '1', '0'] = 1
['X', '5', '0', '0'] = 1
['Y', '5', '7', '1', '0'] = 1
['Y', '7', '0', '1', '0'] = 1
['X', '0', '1', '1'] = 1
['X', '1', '0', '1'] = 1
['Y', '5', '6', '1', '1'] = 1
['Y', '6', '0', '1', '1'] = 1
['Y', '5', '9', '2', '0'] = 1
['Y', '9', '0', '2', '0'] = 1
['X', '0', '1', '2'] = 1
['X', '3', '0', '2'] = 1
['Y', '5', '8', '2', '1'] = 1
['Y', '8', '0', '2', '1'] = 1
The result doesn't satisfy the constraint 13 and 14, all Vl and Vr are 0.
-
Official comment
This post is more than two years old. Some information may not be up to date. For current information, please check the Gurobi Documentation or Knowledge Base. If you need more help, please create a new post in the community forum, or try Gurobot, our chatbot interface offering instant, expert-level support. -
Hi,
Can I suggest replacing your code for 1.13 with the following:
# constraint (1.13)
con_113 = [] for d in range(data.droneNum): for k in range(data.vehicleNum): for i in range(0, 5): # Vl expr = LinExpr(0) for j in range(6, 10): # Cd if (i != j): expr.addTerms(1, Y[i][j][k][d]) model.addConstr(expr == Vl[i][k][d], "c1.13")
con_113.append((expr, Vl[i][k][d]))then after the optimization use the following to inspect these constraints:
biggest_violation = 0
for expr, v in con_113:
print(expr.getValue(), v.X)
biggest_violation = max(biggest_violation, abs(expr.getValue() - v.X))
print("number of constraints 1.13:", len(con_113))
print("biggest_violation:", biggest_violation)What is the biggest violation reported?
- Riley
0 -
(as a side note there is no reason to use LinExpr.clear() in your code, I would remove these calls for simplicity sake)
0
Post is closed for comments.
Comments
3 comments