【发布时间】:2020-08-18 10:29:05
【问题描述】:
我正在研究一个优化问题,我的目标是在出售两个产品对时最大化利润,但约束是,这对产品不应该重复。
我正在使用 Pulp 来优化解决方案,但代码效率低下并且会陷入无限循环。
file = pd.read_csv('input_file.csv')
main_product_1 = list(file['Product ID'].unique())
main_product_2 = list(file['Product ID 2'].unique())
file.set_index(['Product ID', 'Product ID 2'], inplace=True)
file = file['Profit']
# Target Variable
combine = pulp.LpVariable.dicts("combine",
((product_1, product_2) for product_1 in main_product_1 for
product_2 in main_product_2 if product_1 != product_2),
cat='Binary')
# Initializing the model
model = pulp.LpProblem("prof_max", pulp.LpMaximize)
# Objective Function optimization
model += pulp.lpSum(
[combine[product_1, product_2] * file.loc[(product_1, product_2)] for product_1 in
main_product_1 for product_2 in main_product_2 if product_1 != product_2])
# Constraints for optimization
for area in set_plant:
model += pulp.lpSum([combine[area, other] for other in main_product_1 if area != other]
+ [combine[other, area] for other in main_product_2 if area != other]) == 1
model.solve()
print(pulp.LpStatus[model.status])
# Check
set_index = set(file.index)
set_expected = set(
[(product_1, product_2) for product_1 in main_product_1 for product_2 in main_product_2 if
product_1 != product_2])
len(set_expected - set_index)
问题是代码进入了无限循环,我没有得到任何结果,有没有更优化的方法来运行这个方法?
【问题讨论】:
-
你说的是产品ID的排列还是组合? (1000, 1001) 和 (1001, 1000) 可以都在结果中,还是只有一个?
-
如果我们有一对已经有 1000 和 1001,它们不能在任何其他对中重复为产品 ID 或产品 ID 1。
标签: python math optimization pulp