跳转到主要内容

Quicksum:绑定是一个变量

回答

评论

2的评论

  • JaromiłNajman
    Gurobi员工Gurobi员工

    你好,

    我必使建模问题稍微容易更好地解释如何用你的模型。可以找到一个等价的解释在这里

    如果我理解正确的话你想模型约束\ (\ sum_ {I = 1} ^ p x_i = 0 \),在那里\ (x_i \)和\ (p \)变量。
    首先,让我们假设您有一个有效的上限整数变量\ (p \)称为\ (p U ^ \) \ (x_i \ [x ^ L, x ^ U] \)是连续变量。

    我们引入二进制变量\ (z_i \)和替换上面的总和\ (\ sum_ {i = 1} ^ p x_i \ cdot z_i = 0 \)。双线性项可以通过引入辅助变量线性化\ (v_i \)和约束\ L (x ^ \ cdot z_i \ leq v_i \ leq x ^ U \ cdot z_i \)和\ L (x ^ \ cdot (1-z_i) \ leq x_i——v_i \ leq x ^ U \ cdot (1-z_i) \)。意义,最终我们得到\ (\ sum_ {i = 1} ^ p v_i = 0 \)。现在,我们照顾指数的部分。

    我们想要达到的是如果\ (i + 1 \ \组p),那么\ (z_i = 0 \)如果\(我\ leq p \) \ \ (z_i = 1)。这可以通过添加约束\(我\组p + 1 - z_i \ cdot p U ^ \)和\(我\ leq p + (1-z_i) \ cdot p U ^ \)。

    我认为使用上面你可以相应地调整你的问题。请注意,这可能会导致大量的额外变量,比它已经使你的问题更加复杂。因此,我建议,试图找到一个不同的配方,一个变量没有被用作索引。

    最好的问候,
    Jaromił

    0
  • 彼得俊
    Gurobi-versary
    第一个问题
    第一个评论

    嗨Jaromił,

    谢谢你的考虑!我接受了你最后的建议需要考虑不同的配方,下面我将解释步骤以防它可以帮助任何人。

    我现在工作是使用跟踪变量替代我早些时候的想法添加虚拟工作。这个跟踪变量是二进制和需要之间的值1如果我们正常工作,否则为0,而且跟踪变量的总和时间需要监管,以确保追踪充满了常规工作之间的差距。

    这比给一个更简单的考虑资源使用约束的约束,我们保持正常工作当我但添加跟踪变量描述所有任务(I)的追踪器乘以资源使用假乔布斯并检查每个步伐t这个约束。

    这个修复了变量指数之和我相信额外的复杂性有限的变量作为你把假的开始时间和持续时间变量。此外额外的代码而言,我发现这并不显著变化相比,使用虚拟工作。

    随时联系如果你想现在更多关于具体的代码使用。

    亲切的问候,
    彼得

    0

登录留下你的评论。