簡體   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