Dear users,
I need to minimize this nonlinear function: f(x1,x2) = 1 + x2^2 - x - sin(x1) with box constraints.
How can I do this by using a function, named E-restrito, providing as argument f?
My code is:
function E_restrito( f(x1,x2) )
optimizer = Juniper.Optimizer
params = Dict{Symbol,Any}()
params[:nl_solver] = with_optimizer(Ipopt.Optimizer, print_level=0)
modelo = Model(with_optimizer(optimizer, params))
@variable(modelo, l[i] <= x[i in 1:2] <= u[i], start = 1)
@objective(modelo, Min, f(x1,x2))
optimize!(modelo)
end
odow
August 16, 2019, 11:19pm
2
Hi there. Have you read Nonlinear Modeling · JuMP ?
Yes, but no solved my problem. I want to define a given objective-function and call it by using a function.
blegat
August 17, 2019, 7:59am
4
You should use User defined functions as explained here:
http://www.juliaopt.org/JuMP.jl/v0.19.2/nlp/#User-defined-Functions-1
The signature of E_restrito
should be function E_restrito(f::Function)
odow
August 17, 2019, 2:07pm
5
To flesh out @blegat ’s suggestion:
using JuMP, Ipopt
function E_restrito(f)
model = Model(with_optimizer(Ipopt.Optimizer))
@variable(model, x[1:2] >= 0)
JuMP.register(model, :f, 2, f, autodiff=true)
@NLobjective(model, Min, f(x[1], x[2]))
optimize!(model)
return value.(x)
end
foo(x, y) = 1 + y^2 - x - sin(x)
E_restrito(foo)
4 Likes
Wonderfull!
Works very well.
Thank you so much for the complete response.