这是使用 Big-M 和一组指标变量的方法。
让我仅使用一对路线来说明,您可以对所有路线(s,p)做同样的事情。我们称它们为 Tsp,反之则为 Tps。
线性化 IP 中两个决策变量的最小值
让我们只关注读取的目标函数部分
Min(Tsp, Tps) * Cost_sp
首先将目标函数重写为
Min Xsp * Csp
所以我们Xsp
为路由 sp 引入了一个新变量,使得:
Xsp = Tsp if Tsp is the minimum of Tsp and Tps
Xsp = Tps if Tps is the minumum of the two values
这可以通过额外的约束来强制执行。
Xsp = Tsp * Y + Tps * (1-Y)
其中 Y 是 0-1 指示变量。
如果 Tsp 较大,我们希望 Y 为 1,如果 Tsp 较小,则 Y 为 0。
为了实现这一点,我们添加了约束:计算Tsp - Tps + M*y > 0
出该逻辑,如果 Tsp 很大,则自动满足条件。但如果 Tps 大于 Tsp,则 Y 必须取值 1 才能满足约束。
通过在目标函数中添加一个小的价格,我们可以确保 Y 只有在必须取该值时才为 1。
把它们放在一起:
Objective Maximize Sum(p,s) Xsp * Csp - epsilon.Y
s.t.
Xsp = Tsp * Y + Tps * (1-Y)
Tsp - Tps + M*y > 0
Y = {0,1}
将确保目标函数取 Tsp 和 Tps 两个值中的最小值。
希望这可以帮助您继续前进。