【问题标题】:How do I encode Manhattan distance in Mixed Integer Programming如何在混合整数编程中编码曼哈顿距离
【发布时间】:2013-10-03 23:49:13
【问题描述】:

让我们有两个点,(x1, y1) 和 (x2,y2)

dx = |x1 - x2|

dy = |y1 - y2|

D_manhattan = dx + dy 其中 dx,dy >= 0

我有点不知道如何使 |x1 - x2| 的 x1 - x2 为正,大概我引入了一个表示极性的二进制变量,但我不允许将极性开关乘以 x1 - x2,因为它们都是未知变量,这将导致二次。

【问题讨论】:

    标签: linear-programming


    【解决方案1】:

    如果您要最小化|x| 的增函数(当然,或者最大化减函数), 您始终可以将 lp 中任意数量 x 的绝对值作为变量 absx,例如:

    absx >= x
    absx >= -x
    

    之所以有效,是因为 absx 的值将“趋于”其下限,因此它将达到 x-x

    另一方面,如果您要最小化|x| 的递减函数,则您的问题不是凸的,不能建模为lp

    对于所有这些类型的问题,添加问题的简化版本会更好目标,因为这通常对所有这些建模技术都很有用。

    编辑

    我的意思是,对于这类问题没有通用解决方案:通常不能在线性问题中表示绝对值,尽管在实际情况下通常是可能的。 p>

    例如,考虑问题:

    max y
      y <= | x |
      -1 <= x <= 2
      0 <= y  
    

    它是有界的并且有一个明显的解 (2, 2),但它不能建模为 lp,因为域不是凸的(如果你画它)。

    没有你的模型,恐怕无法回答这个问题。

    编辑 2

    对不起,我没有正确阅读问题。如果你可以使用二进制变量并且如果你所有的距离都由某个常数M界定,你可以做点什么。

    我们使用:

    • 一个连续变量ax来表示数量的绝对值x
    • 二进制变量sx 表示x 的符号(sx = 1 如果x &gt;= 0

    如果x &lt; 0,则始终验证这些约束,否则强制执行ax = x

     ax <= x + M * (1 - sx)
     ax >= x - M * (1 - sx)
    

    如果x &gt;= 0,则始终验证这些约束,否则强制执行ax = -x

     ax <= -x + M * sx
     ax >= -x - M * sx
    

    这是“大 M”方法的一种变体,通常用于线性化二次项。当然,您需要拥有x 的所有可能值的上限(在您的情况下,这将是您的距离值:如果您的点位于某个有界区域,通常就是这种情况)

    【讨论】:

    • 实际上距离只是受约束,成本函数是间接相关的变量。因此,它是最小值还是最大值并不清楚。
    • 在这种情况下,如果可能的话,您需要发布您的问题(或至少是简化版本):请参阅我上面的编辑。
    • 对不起,弄得一团糟!如果距离有界,则实际上可以使用二进制变量,请参阅第二个编辑;)
    • 哦,是的,这行得通。如果 x = -1,则 sx 为 0。那么我们有: 顶部的约束对变为 ax = -1 - M。这是真的 底部的约束对变为 ax = 1 为真并将 ax 限制为 1
    猜你喜欢
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多