如何在 JuMP 中初始化与模型相关的空约束数组?
How to initialize an empty array of constraints related to a model in JuMP?
在我的算法中,我向一个模型 (m1
) 动态添加了 3 组不同的约束,然后我将其保存在 3 个 ConstraintRef[]
数组中(即 a,b,c
)。添加的约束数量因迭代而异。
我还需要在求解后访问这些约束的对偶值,这对于这个模型来说不是问题(例如,dual.(a)
)。
但是,在我的算法中的某个时刻,我需要求解模型的副本 (m2
)。解决后,我无法查询对偶,因为数组 a,b,c
没有关于 m2
.
的任何信息
有没有办法 linking/registering 模型的数组名称,以便在复制模型时,我可以有效地访问对偶值?
更新,这里举个小例子:
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)
我想做的是获取 a 中包含的所有约束的对偶,但 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
在我的算法中,我向一个模型 (m1
) 动态添加了 3 组不同的约束,然后我将其保存在 3 个 ConstraintRef[]
数组中(即 a,b,c
)。添加的约束数量因迭代而异。
我还需要在求解后访问这些约束的对偶值,这对于这个模型来说不是问题(例如,dual.(a)
)。
但是,在我的算法中的某个时刻,我需要求解模型的副本 (m2
)。解决后,我无法查询对偶,因为数组 a,b,c
没有关于 m2
.
有没有办法 linking/registering 模型的数组名称,以便在复制模型时,我可以有效地访问对偶值?
更新,这里举个小例子:
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)
我想做的是获取 a 中包含的所有约束的对偶,但 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