Linear programming 或工具-使决策变量彼此尽可能接近,并尽可能远离边界

Linear programming 或工具-使决策变量彼此尽可能接近,并尽可能远离边界,linear-programming,or-tools,Linear Programming,Or Tools,我有一个线性规划问题,我无法找到我想象中的正确目标函数。这是: a1, a2, b1, b2, c1, c2 ∈ Q+ Decision variables: x: [a1, a2], y: [b1, b2] Constraints: (1 - c1) * y >= (1 + c2) * x 作为目标,我试图使x和y尽可能接近,使x尽可能远离a1,使y尽可能远离b2 我目前的目标函数是这样的: max x - a1 + b2 - y 不幸的是,很多时候,这个目标函数要么将x设置为a

我有一个线性规划问题,我无法找到我想象中的正确目标函数。这是:

a1, a2, b1, b2, c1, c2 ∈ Q+

Decision variables:
x: [a1, a2], y: [b1, b2]

Constraints:
(1 - c1) * y >= (1 + c2) * x
作为目标,我试图使x和y尽可能接近,使x尽可能远离a1,使y尽可能远离b2

我目前的目标函数是这样的:

max x - a1 + b2 - y
不幸的是,很多时候,这个目标函数要么将x设置为a1,要么将y设置为b2,但正如我所说的,我需要x和y彼此靠近。你能帮我建立正确的方法吗?谢谢

作为参考,以下是我用Python和/或工具编写的代码:

solver = pywraplp.Solver.CreateSolver("GLOP")

x = solver.NumVar(lb=a1, ub=a2, name="X")
y = solver.NumVar(lb=b1, ub=b2, name="Y")

solver.Add(constraint=(1 - c1) * y >= (1 + c2) * x)

solver.Maximize(x - a1 + b2 - y)

听起来你想要的是两个目标的组合:

  • 最大化x和y,使其远离边界,以及
  • 最小化x和y之间的增量大小
  • 有很多方法可以重新表述这一点。这是一个留在LP内的


    您可以通过添加一个非负数量ε来实现第一部分,该ε将是您试图摆脱的所有约束的一部分,
    l而不试图准确理解您正在做什么,通常的方法imho将包含一些绝对值线性化(或者更好的方法:二次目标)。所以我猜你想要的是:
    max abs(x-a1)+abs(y-b2)-(abs(x-y))
    。这(除了潜在的权重因素)在我看来是合理的。现在剩下的障碍是制定
    abs
    。这种情况看起来很糟糕,因为你需要最大化(正)abs值,这不允许自然线性化。您可以将其表述为MILP,但是
    GLOP
    无法解决它(我猜只有LP),因此最简单但仍然不太有趣的方法是实现上述目标+基于MILP的abs线性化(请参阅)。从优化的角度来看,这项任务对于那些您期望的解算器来说可能更复杂(凸性!)。
    max epsilon 
    w.r.t.
    epsilon >= 0
    a1 + epsilon <= x <= a2 - epsilon
    b1 + epsilon <= y <= b2 - epsilon
    (1 - c1) * y >= (1 + c2) * x
    
    delta >= x - y >= -delta
    
    max d1*epsilon - d2*delta  (for d1, d2 in Q+)