繁体   English   中英

PuLP 运行时间过长

[英]PuLP takes too much time to run

我尝试使用 PuLP 来解决路线优化问题,但大约需要 1 小时才能完成。 我还监视资源,它似乎只使用 1 个处理器。 是否可以进行多线程或多处理器? 还是有什么办法可以提高效率?

这是一些源代码。

变量和目标 function

# DECISION VARIABLE X
x_vars = LpVariable.dicts("route",[(i,j,k) for i in job_id for j in job_id for k in truck_id],lowBound=0,upBound=1,cat=LpBinary)

# DECISION VARIABLE Y
y_vars = LpVariable.dicts("work",[(j,k) for j in job_id for k in truck_id],lowBound=0,upBound=1,cat=LpBinary)

# OBJECTIVE FUNCTION
opt_model += lpSum(x_vars[(i,j,k)]*travel_cost[i+'-'+j+'-'+k] for i in job_id for j in job_id for k in truck_id)

约束

#CONSTRAINTS x[i,j,k] = 0 for all i!=k & j!=k 
for k in truck_id:
    opt_model += lpSum(x_vars[(i,j,k)] for j in job_id for i in yard_id if i!=truck_yard[k]) == 0
    
#CONSTRAINTS
#2
t2 = time.time()
print(t2 - t1)
for j in job_id:
    for k in truck_id:
        opt_model += lpSum(x_vars[(i,j,k)] for i in job_id) == y_vars[(j,k)]

求解器

Solver_name = 'PULP_CBC_CMD'
solver = pl.getSolver(Solver_name)
results = opt_model.solve(solver)

至少在 2.6.0 版的 PuLP 中,我可以通过简单地将threads参数添加到getSolver来使用多线程。

Solver_name = 'PULP_CBC_CMD'
solver = pl.getSolver(Solver_name, threads=4)
results = opt_model.solve(solver)

https://coin-or.github.io/pulp/technical/solvers.html?highlight=getLP_solver#pulp.apis。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM