在Gurobi中附加.lp文件

时间:2018-03-21 16:19:09

标签: multithreading python-3.x gurobi

我正在尝试在Gurobi上解决MIP,但构建时间非常长。我有一个看起来像这样的循环(我有一个显式循环,但这个内置函数更加优化):

m.addConstrs((quicksum(X_rdc_to_dist[j,i,s,t] for j in rdc_list) == demand_fcst_df.loc[(demand_fcst_df['ADDR_BOOK_N'] == i)&
                                           (demand_fcst_df['SKU'] == s)&
                                           (demand_fcst_df['DATE'] == t),'CASES'].sum())
             for i in dist_list
             for s in sku_list
             for t in time_periods_list
             )

每个列表的长度如下:

len(rdc_list) = 10
len(cdc_list) = 5
len(sku_list) = 20
len(dist_list) = 1333
len(time_period_list) = 100

这个循环需要花费很长时间才能构建。 Gurobi不支持同一模型的多线程构建。但是,它确实允许在不同的线程上构建单独的模型。有没有办法构建单独的.lp文件(可以将其保存为.txt文件),然后将它们附加到一个模型中并解决它? 我正在努力减少构建时间。

是否还有其他支持多线程的开源软件包?我可以使用它构建一个.lp文件,然后使用Gurobi解决它。

1 个答案:

答案 0 :(得分:0)

.loc功能正在减慢循环。我将DataFrame转换为dict并将其保存为pickle(仅一次)。然后每次模型运行时我都会从pickle读取数据。如果需要更改数据,我会创建一个新的pickle