Is there a way to represent a JuMP constraint independently of a specific model (even if it is purely syntactic)? The macros for creating variables and constraints require a model, of course… What would be a convenient model-independent representation of constraints?
The manual has a section on constructing constraints without adding them to the model.
No. You cannot create a JuMP constraint independently of a model.
p.s. You should use the Optimization domain for JuMP-related questions: Optimization (Mathematical) - JuliaLang
Thanks, that gets me closer to what I want. Two follow-up questions:
(1) The variables in the constraint are still tied to the model, though; any way to avoid this? (In the worst case, I could represent the constraint with a string, but don’t know how to parse it… Was also thinking of a Julia Expr.)
(2) How do I add one of these constraints to a model?
A better question is: why do you want to do this? @build_constraint
is mainly used for callbacks (Callbacks · JuMP).
Sorry, thought the “jump” tag would be enough (first time using discourse). Any way to move a question over?
If you click the pencil by the title, there is an option to choose the category. I just moved it for you
I want to pick and choose which constraints go into a model.
One way to achieve that is as follows:
function build_model(flag::Bool)
model = Model()
@variable(model, x)
if flag
@constraint(model, x >= 0)
end
@objective(model, Min, x)
return model
end
Projects like PowerModels.jl very successfully use this approach to automatically build JuMP models that depend on the context.
One other option could be to use expressions:
One can define different expressions
e.g. ex = @expression(model, 2x + y - 1)
and then generate the constraint from one of these expressions.
@constraint(m, ex + y >= 5)