using JuMP, Ipopt
runs = Any[]
model = Model(Ipopt.Optimizer)
@variable(model, 0 <= x[1:4] <= 1)
my_objective(x...) = sum(sin((x[i] - i) / 10) for i in 1:4)
register(model, :mobj, length(x), my_objective; autodiff = true)
@NLobjective(model, Min, mobj(x...))
for i in 1:5
x0 = rand(4)
set_start_value.(x, x0)
optimize!(model)
push!(
runs,
(
obj = objective_value(model),
x = value.(x),
x0 = x0,
)
)
end
obj, index = findmin(r -> r.obj, runs)
runs[index]
3 Likes