我最近一直在使用 Python 进行线性编程,并且我使用 PuLP 创建了我的第一个优化算法。
我正在处理生产过程的调度问题。目标是通过为一天中的每个小时创建一个理想的生产计划,并为一年中的所有天创建这个计划,从而最大限度地降低每天的生产成本。
我遇到的问题是算法的执行需要很长时间(几个小时)并且经常卡住。另外,我感觉随着时间的推移它会变慢。
我希望得到有关如何提高代码性能的建议。
我对这个问题的处理方法:
我正在处理 3 个生产资产('a'、'l' 和 'o'),每个资产都有几种生产模式。我将每个资产模式组合定义为一个“选项”,总共产生 14 个选项。每个选项每小时都在变化,并且有一个整数值(生产量)和一个二进制值(开/关),产生大约 14 x 2 x 24 = 672 个变量。该问题包含大约 1250 个约束。
我的代码有 200 多行,所以我有点犹豫要不要在这里分享所有内容,但我将在下面分享最重要的部分。
定义供应选项:
def set_supplyoptions():
cols = ['option', 'min_capacity', 'max_capacity']
options_list = [{'option':'o', 'min_capacity': 0, 'max_capacity':146},
{'option':'l30', 'min_capacity': 0, 'max_capacity':30},
{'option':'l50', 'min_capacity': 31, 'max_capacity':50},
{'option':'l90', 'min_capacity': 51, 'max_capacity':90},
{'option':'l150', 'min_capacity': 91, 'max_capacity':150},
{'option':'l230', 'min_capacity': 151, 'max_capacity':230},
{'option':'a15', 'min_capacity': 0, 'max_capacity':15},
{'option':'a30', 'min_capacity': 0, 'max_capacity':30},
{'option':'a45', 'min_capacity': 0, 'max_capacity':45}, …Run Code Online (Sandbox Code Playgroud)