JuMP 19.0: constraint_by_name fails for vectorized constraints

jump

#1
using JuMP
m = Model()
@variable(m, x[1:2])
@constraint(m, mycons, x .== 0)
cn = constraint_by_name(m, "mycons") # returns nothing

Should cn be nothing?
I expected it would return an array of constraint references.


#2

Names are currently ignored for vectorized constraints, see


#3

Even when that issue is resolved, constraint_by_name(m, "mycons") would not return an array of constraints. The name attribute applies to individual constraints, not to groups of them (http://www.juliaopt.org/JuMP.jl/v0.19.0/constraints/#Constraint-names-1). m[:mycons] is the way to look up Julia variables stored in the model scope (Point 3 at http://www.juliaopt.org/JuMP.jl/v0.19.0/constraints/#The-@constraint-macro-1).


#4

Thanks for the clarification.
Part of my desired usage was to test for whether a model has a constraint in it.
I thought constraint_by_name was the right way to do this because:

using JuMP
m = Model()
@variable(m, x)
@constraint(m, mycons, x == 0)
a = constraint_by_name(m, "mycons")
b = m[:mycons]
println(a == b) # true

a = constraint_by_name(m, "mycons2")
println(isnothing(a)) # true
b = m[:mycons2] # KeyError

I couldn’t figure out from the documentation a way to check whether mycons is defined using the symbol :mycons. I thought perhaps haskey but that’s not defined for a JuMP model. Any suggestions on the right way to do this?


#5

You can do haskey(object_dictionary(model), :mycons)


#6

Perfect, thanks. I didn’t see this function anywhere in the JuMP documentation.


#7

It would be nice if haskey was defined. I think it’s a pretty obvious thing that people are going to try and run into issues. I made an issue: https://github.com/JuliaOpt/JuMP.jl/issues/1887