gams模型中的条件二进制变量逻辑
Conditional binary variable logic in gams model
这是 gams 中的模型,
我有一个二元变量 (B(N)) 和一个实数变量 (u(N)),其中 N 是一个集合。我希望二进制变量在 u 为零时等于 0,而在 u 不为零时等于 1。
如果我可以使用 'if' 语句,这会很容易,但我不能在模型方程中使用它们,所以需要用数学逻辑来完成...
没关系!我找到了解决方案:
B(N) =L= rel_ne(u(N),0)
B(N) =G= rel_ne(u(N),0)
这个接缝工作正常。它可能不是最优雅的解决方案,但无论如何。
rel_ne returns 如果 u(N) 不等于 0 则为 1,否则 returns 为 0。
我认为对这种情况进行建模的另一种可能性如下:
B(N)*LB(N) =L= u(N)
B(N)*UB(N) =G= u(N)
其中 UB(N) 是上界,LB(N) 是 u(N) 实变量的下界。因此,当 u(N) 为 0 时,B(N) 为 0,对于正 u(N) 值,B(N) 值为 1.
如果您没有明确的 Upper/Lower 界限,只需为 LB 设置 0,为 UB 设置一个较大的数字。
这是 gams 中的模型,
我有一个二元变量 (B(N)) 和一个实数变量 (u(N)),其中 N 是一个集合。我希望二进制变量在 u 为零时等于 0,而在 u 不为零时等于 1。
如果我可以使用 'if' 语句,这会很容易,但我不能在模型方程中使用它们,所以需要用数学逻辑来完成...
没关系!我找到了解决方案:
B(N) =L= rel_ne(u(N),0)
B(N) =G= rel_ne(u(N),0)
这个接缝工作正常。它可能不是最优雅的解决方案,但无论如何。
rel_ne returns 如果 u(N) 不等于 0 则为 1,否则 returns 为 0。
我认为对这种情况进行建模的另一种可能性如下:
B(N)*LB(N) =L= u(N) B(N)*UB(N) =G= u(N)
其中 UB(N) 是上界,LB(N) 是 u(N) 实变量的下界。因此,当 u(N) 为 0 时,B(N) 为 0,对于正 u(N) 值,B(N) 值为 1.
如果您没有明确的 Upper/Lower 界限,只需为 LB 设置 0,为 UB 设置一个较大的数字。