max general constraint violation error
回答済みHi,
I am trying to solve the following optimization problem.

The code is given below.
import gurobipy as gp
from gurobipy import GRB
import math
import sys
Nv = 3
Tdep = [10,4,8]
del_t = 2
t_s = 0
Imax = 20
Icmax = 60
Cbat = 20
SOCdep = [0.8, 0.6, 0.7]
SOC_1 = [0.1, 0.2, 0.1]
SOC_xtra = 0.1
soc_min = 0
soc_max = 1
Tiv = 30
R = 8.3145
ks1 = -1.917*(10**-5)
ks2 = 9.241
ks3 = 8.11*(10**-6)
ks4 = 9.975
# ks1 = 1
# ks2 = 1
# ks3 = 1
# ks4 = 1
TT = []
for v in range(0,Nv):
TT.append( math.ceil((Tdep[v] - t_s) / del_t) )
max_TT = max(TT)
m = gp.Model('bat_deg')
#m.params.NonConvex = 2
m.params.Presolve = 0
m.reset(0)
# Decision variable declaration
I = []
for v in range(0,Nv):
I.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
# upper_bound battery power constraint
bat_pwr_constr_l = []
for v in range(0,Nv):
for i in range(0,TT[v]):
bat_pwr_constr_l.append( m.addConstr( I[v][i] >= 0 ) )
# lower_bound battery power constraint
bat_pwr_constr_u = []
for v in range(0,Nv):
for i in range(0,TT[v]):
bat_pwr_constr_u.append( m.addConstr( I[v][i] <= Imax ) )
# slot power constraint
for i in range(0,max_TT):
slot_pwr = []
for v in range(0,Nv):
if i < TT[v]:
slot_pwr.append(I[v][i])
m.addConstr( sum(slot_pwr) <= Icmax )
# lower_bound Energy constraint
tot_char_curr = []
for v in range(0,Nv):
each_veh_curr = []
for i in range(0,TT[v]):
each_veh_curr.append(I[v][i])
tot_char_curr.append(I[v][i])
m.addConstr( ( sum(each_veh_curr) )* del_t >= (SOCdep[v] - SOC_1[v])*Cbat )
# upper_bound Energy constraint
for v in range(0,Nv):
each_veh_curr = []
for i in range(0,TT[v]):
each_veh_curr.append(I[v][i])
m.addConstr( ( sum(each_veh_curr) )* del_t <= (SOCdep[v] - SOC_1[v])*Cbat + SOC_xtra )
# like boby variable in smaple code.
Ah_iv = []
for v in range(0,Nv):
Ah_iv.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
# Crate_iv constraint update
for v in range(0,Nv):
for i in range(0,TT[v]):
#bat_vbat = m.addVar(vbat_min,vbat_max,name="bat_SOC")
m.addConstr(Ah_iv[v][i], GRB.EQUAL, (I[v][i]* del_t) )
Ah_log = []
for v in range(0,Nv):
Ah_log.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
for v in range(0,Nv):
for i in range(0,TT[v]):
m.addGenConstrLog(Ah_iv[v][i], Ah_log[v][i])
# like boby variable in smaple code.
SOC = []
for v in range(0,Nv):
SOC.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
#constraint update
for v in range(0,Nv):
first = 1
for i in range(0,TT[v]):
bat_SOC = m.addVar(soc_min,soc_max)
if first == 1:
m.addConstr(SOC[v][i], GRB.EQUAL, SOC_1[v] + (I[v][i]* del_t) / Cbat)
m.addConstr(SOC_1[v], GRB.EQUAL, bat_SOC)
first = 0
else:
m.addConstr(SOC[v][i], GRB.EQUAL, SOC[v][i-1] + (I[v][i]* del_t) / Cbat)
m.addConstr(SOC[v][i], GRB.EQUAL, bat_SOC)
# like boby variable in smaple code.
SOC_avg = []
for v in range(0,Nv):
SOC_avg.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
# SOC constraint update
for v in range(0,Nv):
first = 1
for i in range(0,TT[v]):
bat_SOC = m.addVar(soc_min,soc_max)
if first == 1:
m.addConstr(SOC_avg[v][i], GRB.EQUAL, SOC_1[v] + (0.5*(I[v][i]* del_t)) / Cbat)
m.addConstr(SOC_1[v], GRB.EQUAL, bat_SOC)
first = 0
else:
m.addConstr(SOC_avg[v][i], GRB.EQUAL, SOC[v][i-1] + (0.5*(I[v][i]* del_t)) / Cbat)
m.addConstr(SOC[v][i], GRB.EQUAL, bat_SOC)
# like boby variable in smaple code.
SOC_dev = []
for v in range(0,Nv):
SOC_dev.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
# SOC constraint update
for v in range(0,Nv):
for i in range(0,TT[v]):
#m.addConstr(SOC_dev[v][i], GRB.EQUAL, ((0.75*I[v][i]*I[v][i]*del_t)/ Cbat**2) - ((0.5*I[v][i]*I[v][i]*(del_t**2))/ Cbat**2) )
m.addConstr(SOC_dev[v][i], GRB.EQUAL, (0.5*I[v][i]* del_t)/Cbat )
exp1 = []
for v in range(0,Nv):
exp1.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
temp1 = []
for v in range(0,Nv):
temp1.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
for v in range(0,Nv):
for i in range(0,TT[v]):
#bat_vbat = m.addVar(vbat_min,vbat_max,name="bat_SOC")
temp1[v][i] == ks2*(SOC_avg[v][i])
m.addGenConstrExp(temp1[v][i], exp1[v][i])
exp2 = []
for v in range(0,Nv):
exp2.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
temp2 = []
for v in range(0,Nv):
temp2.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
for v in range(0,Nv):
for i in range(0,TT[v]):
#bat_vbat = m.addVar(vbat_min,vbat_max,name="bat_SOC")
temp2[v][i] == ks4*(SOC_dev[v][i])
m.addGenConstrExp(temp2[v][i], exp2[v][i])
nat_log = []
for v in range(0,Nv):
nat_log.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
temp3 = []
for v in range(0,Nv):
temp3.append( m.addVars((TT[v]), vtype=GRB.CONTINUOUS) )
for v in range(0,Nv):
for i in range(0,TT[v]):
#bat_vbat = m.addVar(vbat_min,vbat_max,name="bat_SOC")
temp3[v][i] == ks1*(SOC_dev[v][i])*exp1[v][i] + ks3*exp2[v][i]
m.addGenConstrLog(temp3[v][i], nat_log[v][i])
# Battery degradation cost Objective #2
Ah_array = []
nat_log_array = []
for v in range(0,Nv):
for i in range(0,TT[v]):
Ah_array.append(Ah_log[v][i])
nat_log_array.append(nat_log[v][i])
m.setObjective( sum( nat_log_array + Ah_array), GRB.MINIMIZE)
#m.setObjective( sum(B_array + Ah_array + Crate_array + b1_array + SOC_array + d_array + a1_a2_array), GRB.MINIMIZE)
m.update()
m.optimize()
m.printQuality()
print('\n')
for v in range(0,Nv):
for i in range(0,TT[v]):
print(I[v][i])
print('\n')
# Status checking
status = m.Status
if status in (GRB. INF_OR_UNBD , GRB. INFEASIBLE , GRB. UNBOUNDED ):
print("The model cannot be solved because it is infeasible or unbounded ")
sys. exit (1)
if status != GRB.OPTIMAL:
print ("Optimization was stopped with status" + str( status ))
sys. exit (1)
The solution output is as shown below. I do not understand the the two warnings given below. Can I know which constraint is being violated and by how much? Is my solution the optimal solution? Thanks.

0
-
正式なコメント
This post is more than three 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 why not try our AI Gurobot?. -
This issue is related to this post.
0
投稿コメントは受け付けていません。
コメント
2件のコメント