I cannot view the anonymous variable in the model, when I use the following method:

julia> model = Model()
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: AUTOMATIC
CachingOptimizer state: NO_OPTIMIZER
Solver name: No optimizer attached.
julia> x = @variable(model, [1:2, 1:3])
2×3 Matrix{VariableRef}:
noname noname noname
noname noname noname
julia> model
A JuMP Model
Feasibility problem with:
Variables: 6
Model mode: AUTOMATIC
CachingOptimizer state: NO_OPTIMIZER
Solver name: No optimizer attached.

How can I set a name for the anonymous variable so that I can create it in the same way as the following variable creation method.

julia> model = Model()
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: AUTOMATIC
CachingOptimizer state: NO_OPTIMIZER
Solver name: No optimizer attached.
julia> @variable(model, x[1:2, 1:3])
2×3 Matrix{VariableRef}:
x[1,1] x[1,2] x[1,3]
x[2,1] x[2,2] x[2,3]
julia> model
A JuMP Model
Feasibility problem with:
Variables: 6
Model mode: AUTOMATIC
CachingOptimizer state: NO_OPTIMIZER
Solver name: No optimizer attached.
Names registered in the model: x

I don’t want to add 6 base_name to each of the 6 noname, but I want to register these 6 anonymous variables with the only one name x in the model, as if I didn’t create an anonymous variable in the beginning.

My question does seem strange, but I still want to know if there is such a way to achieve the idea.

It seems there is a bit of confusion because “name” is an overloaded concept:

Each variable has a string name, accessible via name(x). If name(x) == "", then it get’s printed as noname

You can use base_name = to set a string name for anonymous variables

JuMP variables (and collections of) can be assigned to Julia variables. We often say that this is a binding between a name and an object. In the assignment y = 1, the object 1 is bound to the name y.

Named JuMP variables get bound to the Julia variable of the same name

Named JuMP variables are registered in the model using the symbol of the same name

Anonymous variables don’t get registered in the model, and you choose which name it gets bound to

You can manually register things in the model via model[:key] = value

Perhaps this example makes things clearer

julia> model = Model()
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: AUTOMATIC
CachingOptimizer state: NO_OPTIMIZER
Solver name: No optimizer attached.
julia> x_binding = @variable(model, [1:2, 1:3], base_name = "x")
2×3 Matrix{VariableRef}:
x[1,1] x[1,2] x[1,3]
x[2,1] x[2,2] x[2,3]
julia> model
A JuMP Model
Feasibility problem with:
Variables: 6
Model mode: AUTOMATIC
CachingOptimizer state: NO_OPTIMIZER
Solver name: No optimizer attached.
julia> x
ERROR: UndefVarError: x not defined
julia> x_binding
2×3 Matrix{VariableRef}:
x[1,1] x[1,2] x[1,3]
x[2,1] x[2,2] x[2,3]
julia> model[:x_register] = x_binding
2×3 Matrix{VariableRef}:
x[1,1] x[1,2] x[1,3]
x[2,1] x[2,2] x[2,3]
julia> model
A JuMP Model
Feasibility problem with:
Variables: 6
Model mode: AUTOMATIC
CachingOptimizer state: NO_OPTIMIZER
Solver name: No optimizer attached.
Names registered in the model: x_register
julia> model[:x_register]
2×3 Matrix{VariableRef}:
x[1,1] x[1,2] x[1,3]
x[2,1] x[2,2] x[2,3]
julia> model[:x_register] === x_binding
true
julia> x
ERROR: UndefVarError: x not defined