如何在JuMP中初始化与模型相关的空约束数组



在我的算法中,我将3组不同的约束动态添加到模型(m1(中,然后将其保留在3个ConstraintRef[]数组(即a,b,c(中。添加的约束数量因迭代而异。在求解后,我还需要访问这些约束的对偶值,这对这个模型来说不是问题(例如,dual.(a)(。然而,在我的算法中的某个时刻,我需要求解我的模型的副本(m2(。在解决它之后,我无法查询duals,因为数组a,b,c没有任何关于m2的信息。

是否有一种方法可以将数组名称链接/注册到模型,以便在复制模型时,我可以有效地访问对偶值?

更新,这里有一个小例子:

using JuMP
using GLPK
a = ConstraintRef[]
m1 = Model(GLPK.Optimizer)
@variable(m1,x)
con1 = @constraint(m1, x==2)
push!(a,con1)
optimize!(m1)
d = dual.(a)
# (..) I keep adding constraints to 'a'
m2 = copy(m1)
set_optimizer(m2, GLPK.Optimizer)
# (..) I keep populating the set of constraints in 'a'
optimize!(m2)

我想做的是得到包含在中的所有约束的对偶,但对于m2。显然,dual.(a)不起作用。我以匿名的方式添加约束,因为我事先不知道每次迭代需要添加多少约束。

如果您提供了一个关于您试图实现的目标的最低限度的工作示例,那么提供帮助会更容易。

然而,您可能正在寻找从copy_model返回的reference_map,它在原始模型中的对象和新模型中复制的对象之间进行映射:

model = Model()
@variable(model, x)
@constraint(model, cref, x == 2)
new_model, reference_map = copy_model(model)
x_new = reference_map[x]
cref_new = reference_map[cref]

文档:https://jump.dev/JuMP.jl/dev/reference/models/#JuMP.copy_model

最新更新