编辑:设置Variable2等于和的最小值或最大值。Variable1Parameter
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 > Variable1thenNewVar 必须等于 1,而 if Parameter < Variable1thenNewVar 必须等于 0。
min(Parameter,Variable1):
引入约束以确保Variable2 >= min(Parameter,Variable1):
Variable2 >= Parameter - M * NewVar
Variable2 >= Variable1 - M * (1 - NewVar)
所以,如果Parameter > Variable1then NewVar = 1,第一个约束没有效果,第二个说Variable2 >= Variable1。如果Parameter < Variable1then NewVar = 0,则第一个约束Variable2 >= Parameter为 ,而第二个约束无效。
max(Parameter,Variable1):
引入约束以确保Variable2 <= max(Parameter,Variable1):
Variable2 <= NewVar * Parameter + M * (1 - NewVar)
Variable2 <= Variable1 + M * NewVar
因此,如果Parameter > Variable1then NewVar = 1,则第一个约束Variable2 <= Parameter为 ,而第二个约束无效。如果Parameter < Variable1then NewVar = 0,第一个约束没有效果,第二个说Variable2 <= Variable1。
在任一情况下:
请注意,M应该尽可能小,同时仍确保M在约束中触发 使约束不具有约束力。|Parameter - Variable1|我认为将其设置为可能获得的最大值就足够了。一般来说,这些“big-Ms”会削弱公式并导致更长的求解时间,因此您总是希望它们尽可能小。