问题描述
我正在使用 anaconda spyder 进行编码。在研究我论文的数学模型时,我使用了纸浆库来解决它。
PulpSolverError: Pulp: Error while executing C:\Users\ipeki\anaconda3\lib\site-packages\pulp\apis\..\solverdir\cbc\win\64\cbc.exe
这是我的代码:
import random
import pulp as plp
model = plp.LpProblem("Ornek",plp.LpMinimize)
#sets
set_E=range(0,20) #affected area
set_S=range(0,9) #shelters
set_V=range(0,40) #available veicle
set_D=range(1,10) #set of vehicle depots
set_N=range(0,60) #set of all nodes in people evacuation operations
#parameters
tr={(i,j):random.randint(1,30) for i in set_N for j in set_N} #transportation time from node i to node j
d={(i):random.randint(10,200) for i in set_N} #demand of affected area
c={(i):random.randint(10,160) for i in set_S} #capacity of shelters
cap=int(45) #capacity of vehicle
t={(i):random.randint(1,40) for i in set_E} #service time at node i
Mbig=int(100)
#decision variables
x_vars = [[[plp.LpVariable("x%d%d%d" % (v,i,j),cat='Binary')
for v in set_V]
for i in set_N]
for j in set_N]
y_vars = [[plp.LpVariable("y%d%d" % (v,i),cat='Binary')
for v in set_V]
for i in set_N]
z_vars = [plp.LpVariable("z%d" % (v),cat='Binary')
for v in set_V]
q_vars = [[plp.LpVariable("q%d%d" % (v,lowBound=0,upBound=45,cat='Integer')
for v in set_V]
for i in set_N]
T_vars = [[plp.LpVariable("T%d%d" % (v,lowBound=random.randint(0,10),upBound=random.randint(11,30),cat='Integer')
for v in set_V]
for i in set_N]
#objective function
for v in set_V:
for i in (set_E and set_S):
objective=plp.lpSum(T_vars[v][i])
#C1
for j in set_E:
for i in set_D:
model += plp.lpSum([x_vars[v][i][j] for v in set_V]) == ([z_vars[v] for v in set_V])
#C2
for i in (set_D and set_E and set_S):
if i != j:
model+=plp.lpSum([x_vars[v][i][j] for i in (set_D and set_E) for v in set_V for j in set_E])==plp.lpSum([x_vars[v][i][j] for i in (set_E and set_S) for v in set_V for j in set_E])
#C3
for v in set_V:
model += plp.lpSum([q_vars[v][i] for i in set_E]) == ([d[i] for i in set_E])
#C4
for v in set_V:
model+= ([caP*y_vars[v][i] for i in (set_E and set_S)])>=([q_vars[v][i] for i in (set_E and set_S)])
#C5
for j in (set_E and set_D):
if i != j:
model += plp.lpSum([x_vars[v][j][i] for i in set_E for v in set_V]) == ([y_vars[v][i] for i in set_E for v in set_V])
#C6
for j in (set_E and set_S):
if i != j:
model += plp.lpSum([x_vars[v][j][i] for i in set_S for v in set_V]) == ([y_vars[v][i] for i in set_S for v in set_V])
#C7
for i in (set_S and set_E):
model+=plp.lpSum([q_vars[v][i] for i in set_S for v in set_V])==plp.lpSum([q_vars[v][i] for i in set_E for v in set_V])
#C8
for i in set_E:
model += plp.lpSum([q_vars[v][i] for v in set_V]) <= ([caP*z_vars[v] for v in set_V])
#C9
for v in set_V:
model += plp.lpSum([q_vars[v][i] for i in set_S]) <= ([c[i] for i in set_S])
#C10
for v in set_V:
model += plp.lpSum([z_vars[v]]) <= set_V
#C11
model+= ([T_vars[v][i] for i in set_D for v in set_V])==0
model.setobjective(objective)
model.solve()
print("Status:",model.status)
解决方法
作为第 (3) 点中的 docs suggest,您有重复的行(约束)并且 cbc 不喜欢那样。您可能在屏幕上看到 CBC 写的日志消息是这样的:
Welcome to the CBC MILP Solver
Version: 2.9.0
Build Date: Feb 12 2015
command line - /home/pchtsp/Documents/projects/cornflow/corn/cfvenv/lib/python3.8/site-packages/pulp/apis/../solverdir/cbc/linux/64/cbc /tmp/7f3f78bbc496475991ba842a3dd5a6a6-pulp.mps branch printingOptions all solution /tmp/7f3f78bbc496475991ba842a3dd5a6a6-pulp.sol (default strategy 1)
At line 2 NAME MODEL
At line 3 ROWS
At line 370 COLUMNS
Duplicate row C0000189 at line 2412 < X0000084 C0000189 1.000000000000e+00 >
Duplicate row C0000199 at line 2413 < X0000084 C0000199 1.000000000000e+00 >
Duplicate row C0000245 at line 2414 < X0000084 C0000245 -1.000000000000e+00 >
Duplicate row C0000246 at line 2415 < X0000084 C0000246 -1.000000000000e+00 >
Duplicate row C0000247 at line 2416 < X0000084 C0000247 -1.000000000000e+00 >
Duplicate row C0000248 at line 2417 < X0000084 C0000248 -1.000000000000e+00 >
Duplicate row C0000249 at line 2418 < X0000084
(..)
Duplicate row C0000276 at line 3077 < X0000110 C0000276 1.000000000000e+00 >
At line 235234 RHS
At line 235600 BOUNDS
At line 253243 ENDATA
Problem MODEL has 365 rows,16311 columns and 122860 elements
Coin0008I MODEL read with 15290 errors
There were 15290 errors on input
** Current model not valid
Option for printingOptions changed from normal to all
** Current model not valid
所以你看到有 15290 个你必须解决 :)