MILP BigM :变量必须保持在定义的边界内或设置为 0

1 linear-programming pyomo

我正在通过 MILP / Pyomo 对一些能源系统进行建模。

在这种情况下,我正在对双向电子进行建模。转换器。

功率/能量可以以两种方式流动:但是,在一种方式中,功率 P 只能在边界 [LB;UB] 内,否则它必须为 0。

我使用这个公式来确保:

LB - P <= LB * x

P <= UB * (1 - x)

x 是二元变量

它似乎正在发挥作用......

换句话说,功率 P 只能在 [-UB;-LB] 范围内,否则为 0。但我正在努力确保这一点,我只是无法获得构建这种约束背后的逻辑。 。

任何帮助和解释将不胜感激。

非常感谢,马克斯

Erw*_*gen 5

我认为你有三个州(或可行的区域):

\n
 p = 0\n p \xe2\x88\x88 [L,U]\n p \xe2\x88\x88 [-U,-L]\n
Run Code Online (Sandbox Code Playgroud)\n

我认为这不能用一个二元变量来完成。

\n

你可以这样做:

\n
 \xce\xb41*L-\xce\xb42*U \xe2\x89\xa4 p \xe2\x89\xa4  \xce\xb41*U-\xce\xb42*L\n \xce\xb41+\xce\xb42 \xe2\x89\xa4 1\n \xce\xb41,\xce\xb42 \xe2\x88\x88 {0,1}\n
Run Code Online (Sandbox Code Playgroud)\n

这本质上是:

\n
 \xce\xb41=\xce\xb42=0    => p = 0\n \xce\xb41=1,\xce\xb42=0  => p \xe2\x88\x88 [L,U]\n \xce\xb41=0,\xce\xb42=1  => p \xe2\x88\x88 [-U,-L]\n \xce\xb41=\xce\xb42=1: not allowed\n
Run Code Online (Sandbox Code Playgroud)\n