我已经搜索了所有Gurobi的PDF文档,无法找到我正在搜索的内容。我想知道是否有一种方法可以在搜索期间访问内罗毕的惰性约束池?
在MIP_NODE中,在整数节点GRB_CB_MIPSOL
的回调期间,我需要访问之前生成的所有惰性约束并将它们应用于某些值。我找不到访问惰性约束池的方法。我目前的解决方案是存储所有的懒惰约束,我在一个数组中生成,但这听起来是一个非常糟糕的方式对我来说,特别是在RAM方面。如果我们可以直接访问它们,那么存储它们是很遗憾的,因为我们知道Gurobi也存储它们。
con = @build_constraint(λ ≥ sum([2(1-y[i])α[i] for i in V]) +
sum([(x[mima(β[j][1],j)] + x[mima(β[j][2],j)] - 1)rp[mima(β[j][1],β[j][2])] for j in tildeV if length(β[j]) > 0]) - sum([y[j]γ[i,j] for i in V, j in V if i != j]))
MOI.submit(m, MOI.LazyConstraint(cb_data), con)
function RHS_opt_cut(x,y)
sum_β = 0
for j in tildeV
if length(β[j]) > 0
sum_β += (x[mima(β[j][1],j)...] + x[mima(β[j][2],j)...] - 1)rp[mima(β[j][1],β[j][2])]
end
end
sum([2(1-y[i])α[i] for i in V]) + sum_β - sum([y[j]γ[i,j] for i in V, j in V if i != j])
end
push!(RHS_optimality_cuts, RHS_opt_cut)
在前面的代码中,测试所有之前存储的RHS
λ_two_opt = 0.
for RHS in RHS_optimality_cuts
if RHS(x_two_opt, ŷ) > λ_two_opt
λ_two_opt = RHS(x_two_opt, ŷ)
end
end
不,我认为没有办法获得已添加的惰性约束列表。维护一个列表是最简单的解决方案。
但是您应该非常小心,仅仅因为您之前添加了一个约束,并不意味着当前正在使用该约束,或者解决方案满足所有先前的惰性约束。唯一的保证是最终的解决方案将尊重所有添加的惰性约束。
注。如果你使用的是Julia,你可以调用C API中的任何东西:https://www.gurobi.com/documentation/9.5/refman/c_api_details.html