[英]Adding Logical Constraints in PuLP
我正在尝试将合金添加到钢中,以便以最低的成本将钢的碳含量控制在一定范围内。 但一个限制是,在现实生活中,机器只能添加至少 50 公斤的合金。 因此,如果我们添加某种合金,那么它可以是 50/60/70 kgs 等,如果我们不添加该特定合金,则它可以是 0kgs。 我将如何添加相同的约束?
提前致谢!
下面是我写的函数:
def optimizer_pd(test):
# declare problem
prob = LpProblem("Minimize Alloy Cost",LpMinimize)
# percentage of carbon in each alloy
percs = ele_percs['carbon']
# alloy_vars is a list of all possible alloys
# constraints
prob += lpSum([percs[i] * alloy_vars[i] for i in alloys]) >= minimum_carbon
prob += lpSum([percs[i] * alloy_vars[i] for i in alloys]) <= maximum_carbon
# objective function
prob += lpSum([costs[i] * alloy_vars[i] for i in alloys])
# solving
sol = prob.solve()
# results
var_dict = {}
for var in prob.variables():
var_dict[var.name] = var.value()
return var_dict
欢迎来到本站。
将来,如果您为您正在尝试做的事情提供一个最低限度的可重复示例,您将获得更好的答案。 但是,从您发布的内容中可以清楚地看出。
因此,您需要引入一个额外的助手或“指标”二元变量,由您的合金索引来执行此操作。 这个是/否变量表明承诺至少使用最少量的合金。 (您基本上需要将您的要求分解为 2 个变量....)
然后,您将需要对要使用的数量使用“大 M”约束(或仅使用最大值)。 在伪代码中:
use[alloy] ∈ {0,1}
amount[alloy] ∈ non-negative reals
min[alloy], max[alloy] are fixed min/max parameters
最低使用限制:
amount[alloy] >= use[alloy] * min[alloy] for each alloy
最大使用限制:
amount[alloy] <= use[alloy] * max[alloy] (or big M) for each alloy
插入一些数字以确保您“相信”:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.