如何制定涉及指示变量的纸浆约束?
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
我看了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