相当于 PuLP 中的逻辑 any()

问题描述 投票:0回答:1

我正在使用 PuLP 来解决大型 MILP。作为更复杂的限制系统的一部分,我有一个布尔决策变量数组 var_array 和一个单独的布尔变量 var_all_zeros。

我正在尝试但未能建立一个限制,即如果任何 var_array 为 True,则 var_all_zeros 需要为 False。

所以我正在寻找与 python 逻辑 any() 等效的方法,但适用于 PuLP。

我要限制的是:

var_all_zeros = False 如果有(var_array) 否则为 True

向问题添加限制的一种(数学上)可能的方法: 将是放


problem = pulp.LpProblem("Boolean_Optimization", pulp.LpMaximize)
problem += pl.LPSum(var_array) * var_all_zeros == 0

这将在数学上启用约束,因为只有当 sum(var_array) 为零时 var_all_zeros 才能为 True,否则它必须为 False。

但这在 PuLP 中是不允许的,因为决策变量不能相互相乘。

关于如何编码此限制有什么建议吗?

python pulp any
1个回答
0
投票

您只需将汇总变量限制为小于数组中的每个值即可构建“或”条件:

var_all_zeros <= 1 - var_array[i]  for each i in I
© www.soinside.com 2019 - 2024. All rights reserved.