如果 B 为正数,CVXPY 将 Z 设置为 1

问题描述

问题来了。我有这个变量 Z 遵循以下规则:

if loan j has a positive balance at time t Z = 1,otherwise Z = 0

我猜 Z 应该这样定义:

Z = cvxpy.Variable(shape=shape_j_t,name="Z",boolean=True)

所以 Z 被约束(?)到平衡“B”。如果 B 为正数,我如何通知求解器 Z 应为 1,否则为 0?特别是考虑到 B 本身由其他 cvxpy.Variables 组成。

解决方法

假设B上的边界(通常需要)的先验知识,一般方法如下:

b <= UB * z
b >= LB * z
z in {0,1}

其中描述:

z = 0 <-> b = 0
z = 1 <-> LB <= b <= UB

但这只是一般的东西,这些东西通常是在设计时考虑到完整的模型。在这里,我们不知道您在做什么。有时我们不需要等价,而只需要暗示(例如,忽略 LB 约束...)

也许定义正平衡的概念并非易事,因为您只有不等式,而使用 LB=0 表示非负性 em>,但不是严格的积极性。对于后者,需要一些epsilon(例如0.001)的a-priori定义。