我正在为优化问题编写一个MPS文件,并且有38个时间段,每个桶必须为10000个项目写入质量平衡约束。
我目前正在双循环中执行此操作,正如预期的那样非常慢。但是,大部分时间都花在了pandas.lib.scalar_compare上。你们有什么想法我可以阻止这种情况并优化我的代码吗?
这些是我使用的一些pandas过滤器,花费了大量时间:
capacity=CAP[(CAP.ResourceName==i) & (CAP.StartDate==bucket[t])].AvailableCapacity.values[0]
stock=STOCK[(STOCK.StartDate==bucket2[t])&(STOCK.PIFrom==ITEM.PIName[j])&(STOCK.SiteFrom==ITEM.PISite[j])].values[0]
CAP.iloc[0]
Enterprise STRIPMLE
ResourceName LL11
Site IJMP
StartDate 01/07/2018
EndDate 01/08/2018
AvailableCapacity 583
OvertimeCapacityI 0
OvertimeCapacityII 0
ProtectiveCapacity NaN
OvertimeCostI 0
OvertimeCostII 0
SYS_TYPE NaN
Name: 0, dtype: object
以下是最耗时的电话。这仅适用于20个项目,应为10000个。
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
442374 5.244 0.000 9.569 0.000 pulp.py:255(__init__)
9 5.206 0.578 5.206 0.578 {method 'read' of 'pandas.parser.TextReader' objects}
6/4 4.993 0.832 19.602 4.901 pulp.py:294(dicts)
1735 4.307 0.002 4.307 0.002 {pandas.lib.scalar_compare}
442374 3.428 0.000 3.897 0.000 arrayprint.py:340(array2string)
442374 2.041 0.000 4.325 0.000 pulp.py:172(__init__)
442374 1.958 0.000 2.166 0.000 pulp.py:163(setName)
442374 1.141 0.000 5.038 0.000 numeric.py:1835(array_str)