【发布时间】:2021-12-19 18:36:54
【问题描述】:
我正在使用 Pulp 构建优化工具。
它的目的是定义从每个仓库中取哪个 SKU 和离开哪个 SKU。
我遇到了以下限制:
“选择的不同 SKU 的最大值不应超过 500”
也就是说,无论你拿多少个单位,只要不超过500个品种(不同的SKU),都可以。
这就是我目前所得到的
#simplex
df=pd.read_excel(ruta+"actual/202109.xlsx", nrows=20) #leemos la nueva base del mes
# Create variables and model
x = pulp.LpVariable.dicts("x", df.index, lowBound=0)
mod = pulp.LpProblem("Budget", pulp.LpMaximize)
# Objective function
objvals = {idx: (1.0)*(df['costo_unitario'][idx]) for idx in df.index}
mod += sum([x[idx]*objvals[idx] for idx in df.index])
# Lower and upper bounds:
for idx in df.index:
mod += x[idx] <= df['unidades_sobrestock'][idx]
# Budget sum
mod += sum([x[idx] for idx in df.index]) <= max_uni
# Solve model
mod.solve()
# Output solution
for idx in df.index:
print (str(idx) + " " + str(x[idx].value()))
print ('Objective' + " " + str(pulp.value(mod.objective)))
在同一个数据框中,我有一列包含每个特定行的 SKU df['SKU']
我想约束应该是这样的:
for idx in df.index:
mod += df['SKU'].count(distinct) <= 500
但这似乎不起作用。
谢谢!
【问题讨论】:
-
你应该编辑你的帖子,在
pulp中包含你当前的工作,这样我们就可以看到你是如何设置问题、变量等的。你应该自己做一个huge 赞成而不是将pandas与pulp混为一谈。您不能将数据框函数放入模型中(如上面的count())。将您的数据移动到字典中并从中构建模型...更容易且不易出错。 -
感谢@AirSquid
-
您熟悉“大 M”约束吗?您可能需要引入一个额外的二进制变量(索引与
x相同)以产生大 M 约束并有一个变量来计算使用的 SKU。
标签: dataframe optimization pulp