编辑:设置Variable2
等于和的最小值或最大值。Variable1
Parameter
min(Parameter,Variable1)
:
如果您确定Variable2
“希望”在目标函数中很小,那么您只需要要求Variable2
小于或等于两者Parameter
和Variable1
:
Variable2 <= Variable1
Variable2 <= Parameter
max(Parameter,Variable1)
:
如果您确定Variable2
“希望”在目标函数中很大,那么您只需要要求Variable2
大于或等于两者Parameter
和Variable1
:
Variable2 >= Variable1
Variable2 >= Parameter
在任一情况下:
如果有可能将其设置Variable2
为严格小于min(Parameter,Variable1)
/严格大于 的值是最佳的max(Parameter,Variable1)
,那么(除了上述约束之外)您还需要引入一个等于 1 的新二进制变量,如果Parameter > Variable1
:
Parameter - Variable1 <= M * NewVar
Variable1 - Parameter <= M * (1 - NewVar)
哪里M
是大数。因此,如果Parameter > Variable1
thenNewVar
必须等于 1,而 if Parameter < Variable1
thenNewVar
必须等于 0。
min(Parameter,Variable1)
:
引入约束以确保Variable2 >= min(Parameter,Variable1)
:
Variable2 >= Parameter - M * NewVar
Variable2 >= Variable1 - M * (1 - NewVar)
所以,如果Parameter > Variable1
then NewVar = 1
,第一个约束没有效果,第二个说Variable2 >= Variable1
。如果Parameter < Variable1
then NewVar = 0
,则第一个约束Variable2 >= Parameter
为 ,而第二个约束无效。
max(Parameter,Variable1)
:
引入约束以确保Variable2 <= max(Parameter,Variable1)
:
Variable2 <= NewVar * Parameter + M * (1 - NewVar)
Variable2 <= Variable1 + M * NewVar
因此,如果Parameter > Variable1
then NewVar = 1
,则第一个约束Variable2 <= Parameter
为 ,而第二个约束无效。如果Parameter < Variable1
then NewVar = 0
,第一个约束没有效果,第二个说Variable2 <= Variable1
。
在任一情况下:
请注意,M
应该尽可能小,同时仍确保M
在约束中触发 使约束不具有约束力。|Parameter - Variable1|
我认为将其设置为可能获得的最大值就足够了。一般来说,这些“big-Ms”会削弱公式并导致更长的求解时间,因此您总是希望它们尽可能小。