如何制定涉及指示变量的纸浆约束?

How to formulate a constraint in pulp involving indicator variable?

我看了here, here and

但无法概括我的问题的解决方案或没有正确答案。

如果我希望二进制变量根据另一个变量选择关闭和打开,这样当 lpSum(some_var) = 0 时,indicator_var 必须为 0,而当 lpSum(some_var) > 0 那么 indicator_var 必须是 1,其中 lpSum(some_var) 永远不会大于 5,那么如果我写:

for j in some_list:
    prob += lpSum(some_var[i, j] for i in some_other_list) <= indicator_var[j] * 5

这确保如果 lpSum > 0,indicator_var 为 1,这很好,但它不保证如果 lpSum = 0,indicator_var 为 0。 希望很清楚我想要实现什么,如果没有请告诉我,这样我可以用更具体的例子进一步澄清。

你没有说你在求和什么类型的变量,但假设非负性,这应该有效:

prob += lpSum(...) >= indicator_var[...]

编辑:上面的内容应该与上面已有的约束结合使用(需要 2 个约束来强制执行您想要的推理)。还有:

prob += lpSum(...) <= indicator_var[...] * 5