python - 当我运行我的代码(关于使用 python 纸浆进行线性编程)时,无法得到任何答案
问题描述
这是我正在使用 anaconda spyder 的关于最小化问题的代码,当我尝试运行它时,程序从未停止运行。主要问题是关于 #C11 约束,每当我将其更改为这种形式(这与我共享的代码相同)时model+=(T_vars[v][i] for i in set_D for v in set_V)==0
,我无法从程序中得到任何答案。我想知道我的代码有什么问题。如果您能帮助我,我将不胜感激。
import pulp as plp
#import pandas as pd
model = plp.LpProblem("Ornek", plp.LpMinimize)
#sets
set_E={'3','4','5','6'} #affected area
set_S={'1','2'} #shelters
set_SE={'1','2','3','4','5','6'}
set_ED={'3','4','5','6','7'}
set_V={'1','2','3','4','5','6'} #available veicle
set_D={'7'} #set of vehicle depots
set_N={'1','2','3','4','5','6','7'} #set of all nodes in people evacuation operations
#parameters
tr={'1':{'1':0,'2':5,'3':15,'4':10,'5':5,'6':20,'7':25},
'2':{'1':5,'2':0,'3':5,'4':10,'5':5,'6':15,'7':20},
'3':{'1':15,'2':5,'3':0,'4':5,'5':10,'6':30,'7':20},
'4':{'1':10,'2':10,'3':5,'4':0,'5':20,'6':25,'7':10},
'5':{'1':5,'2':5,'3':10,'4':20,'5':0,'6':10,'7':5},
'6':{'1':20,'2':15,'3':30,'4':25,'5':10,'6':0,'7':5},
'7':{'1':25,'2':20,'3':20,'4':10,'5':5,'6':5,'7':0}} #transportation time from node i to node j
d={'3':30,
'4':20,
'5':20,
'6':30} #demand of affected area
c={'1':60,
'2':50} #capacity of shelters
cap={'1':20,
'2':20,
'3':20,
'4':20,
'5':20,
'6':20} #capacity of vehicle
t={'1':10,
'2':10,
'3':10,
'4':10,
'5':10,
'6':10,
'7':0}#service time at node i
Mbig=int(1000)
alpha=int(6)
#decision variables
x_vars =plp.LpVariable.dicts('Seçilen',
[(v,i,j) for v in set_V
for i in set_N
for j in set_N],
0,1,plp.LpBinary)
y_vars =plp.LpVariable.dicts('Seçilen2',
[(v,i) for v in set_V
for i in set_SE],
0,1,plp.LpBinary)
z_vars =plp.LpVariable.dicts('Seçilen3',set_V,0,1,plp.LpBinary)
q_vars=plp.LpVariable.dicts("Number of people picked up",(set_V,set_SE),0,None,plp.LpInteger)
T_vars=plp.LpVariable.dicts("Time",(set_V,set_N),0,None,plp.LpInteger)
#objective function
model+=plp.lpSum(T_vars[v][i] for v in set_V for i in set_SE)
#C1
for v in set_V:
model += plp.lpSum(x_vars[(v,i,j)] for j in set_E for i in set_D ) == z_vars[v]
#C2
for j in set_E:
for v in set_V:
model+=plp.lpSum(x_vars[(v,i,j)] for i in set_ED if i!=j )==plp.lpSum(x_vars[(v,j,i)] for i in set_SE if i!=j)
#C3
for i in set_E:
model += plp.lpSum(q_vars[v][i] for v in set_V) == d[i]
#C4
for v in set_V:
for i in set_SE:
model+= cap[v]*y_vars[(v,i)]>=q_vars[v][i]
#C5
for i in set_E:
for v in set_V:
model += plp.lpSum(x_vars[(v,j,i)] for j in set_ED if i!=j ) == y_vars[(v,i)]
#C6
for i in set_S:
for v in set_V:
model += plp.lpSum(x_vars[(v,j,i)] for j in set_SE if i!=j ) == y_vars[(v,i)]
#C7
for v in set_V:
model+=plp.lpSum(q_vars[v][i] for i in set_S )==plp.lpSum(q_vars[v][i] for i in set_E)
#C8
for v in set_V:
model += plp.lpSum(q_vars[v][i] for i in set_E) <= cap[v]*z_vars[v]
#C9
for i in set_S:
model+= plp.lpSum(q_vars[v][i] for v in set_V) <= c[i]
#C10
model += plp.lpSum(z_vars[v] for v in set_V) <= 6
#C11
for i in set_D:
for v in set_V:
model+=(T_vars[v][i])==0
#C12
for j in set_E:
for v in set_V:
for i in set_ED:
if i!=j:
model+=((T_vars[v][i] + t[i] + tr[i][j])- Mbig*(1-x_vars[(v,i,j)]))<=T_vars[v][j]
#C13
for v in set_V:
for j in set_S:
for i in set_E:
model+= ((T_vars[v][i] + t[i] + tr[i][j]) - Mbig*(1-x_vars[(v,i,j)]) )<=T_vars[v][j]
model.solve()
print("Status:", model.status)
print((model.objective))