You can do all of this in JuMP, but it requires basic expertise in Julia and JuMP.
To change coefficients of constraints, you can wrap the model into a function and then use a loop that builds function for different sets of data before calling optimize!
. Check a similar question here
You can add new variables and constraints to a model. Check the example given in the documentation:
https://jump.dev/JuMP.jl/stable/variables/
function add_component_to_model(model::JuMP.Model)
x = model[:x]
# ... code that uses x
end
function build_model()
model = Model()
@variable(model, x)
add_component_to_model(model)
end