Some constraints are not implemented
回答済み

# 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.
-
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
サインインしてコメントを残してください。
コメント
2件のコメント