首页 > 解决方案 > PulpSolverError: Pulp: 执行 C:\Users\ipeki\anaconda3\lib\site-packages\pulp\apis\..\solverdir\cbc\win\64\cbc.exe 时出错

问题描述

我正在使用 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,i), lowBound=0, upBound=45, cat='Integer') 
        for v in set_V] 
        for i in set_N]
T_vars = [[plp.LpVariable("T%d%d" % (v,i), 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)

标签: pythonpulp

解决方案


正如文档在第 (3) 点中建议的那样,您有重复的行(约束),而 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 你必须解决:)


推荐阅读