首页 > 解决方案 > 当我运行我的代码(关于使用 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))

标签: pythonoptimizationlinear-programmingpulp

解决方案


推荐阅读