python - 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)
解决方案
正如文档在第 (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 你必须解决:)
推荐阅读
- c# - 将每个 CSV 文件记录转换为单独的 JSON 文件
- c - 为什么有些函数不能在内核模块中使用?
- javascript - 我什么时候应该使用 key 与 v-model 进行输入?
- ios - 协议类型不能符合协议,因为只有具体类型才能符合协议
- android - GoogleSignInAccount.getIdToken() 引发空对象引用错误
- python - 具有不同和大量样本的多组输入导致内存错误
- python - 为什么我单击时 Spyder 无法打开 Dictionary 变量?
- c# - Net Core:为方法保存多种类类型
- swift - Swift 类中的可选属性不需要初始化器
- angular - 推送功能中的离子问题