微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

在我的算法中,我将 3 组不同的约束动态添加到模型 (m1),然后将其保存在 3 个 ConstraintRef[] 数组(即 a,b,c)中。添加的约束数量因迭代而异。 我还需要在求解之后访问这些约束的对偶值,这对于这个模型来说不是问题(例如,dual.(a))。 但是,在我的算法中的某个时刻,我需要解决我的模型 (m2) 的副本。解决之后,我无法查询对偶,因为数组 a,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)

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

解决方法

如果您提供一个最小的工作示例来说明您要实现的目标,则提供帮助会更容易。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。