我正在使用Benders Decomposition,目前正在使用bendersatsp.py
文件,以使此代码适应我自己的MIP问题。
这种情况是,在我的情况下,与该bendersatsp.py
文件不同,母版的解决方案参与了子问题的某些约束。这意味着对于母版的每个当前解决方案,我都必须修改这些约束的系数。
那么,为了将母版的当前求解向量用于子问题,我可以/必须写些什么?
目前,我已将此约束块写入separate
函数中,但是最佳目标值并不正确。
为什么这不是一个好方法?
谢谢!
答案 0 :(得分:2)
在BendersLazyConsCallback
中,使用self.get_values方法:
返回当前节点的解决方案值。
在节点LP无界的情况下,此方法返回一个 对应于无界方向的向量,按比例缩放以便 它的至少一个元素的大小为cplex.infinity。因此,通常 该向量可以直接使用,例如,将惰性 约束。但是,由于向量中存在较大的值 必须注意避免潜在的数值错误。如果有疑虑, 重新缩放向量,并将其用作无界射线而不是 原始向量。
解向量被传递到workerLP.separate
中,并用于修改workerLP
物镜的线性系数。相反,听起来您想以某种方式修改workerLP
的约束。
而不是打电话:
cpx.objective.set_linear(zip(thevars, thecoefs))
您应该在Cplex.linear_constraints界面中调用方法。