# Save objective values in an optimization loop

**URL:** <https://discourse.julialang.org/t/save-objective-values-in-an-optimization-loop/33192>\
**Category:** Optimization (Mathematical)\
**Created:** [January 10, 2020, 1:29pm UTC](https://discourse.julialang.org/t/save-objective-values-in-an-optimization-loop/33192 "2020-01-10T13:29:22Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![yordiak](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yordiak/32/12584_2.png) [@yordiak](https://discourse.julialang.org/u/yordiak)\
**Post date:** [January 10, 2020, 1:29pm UTC](https://discourse.julialang.org/t/save-objective-values-in-an-optimization-loop/33192/1 "2020-01-10T13:29:22Z")

</div>

Hello, here is my code

```julia
using JuMP, Plots, Gurobi

m=Model(with_optimizer(Gurobi.Optimizer))

@variable(m, x>=0)

@variable(m, y>=0)

k=0

obj_val=true

while k<=1

    φ(x,y)=3*x+k*y

    @objective(m, Max, φ(x,y))

    @constraint(m, 2*x-4>=0)

    @constraint(m, y-0.5*x>=0)

    

    optimize!(m)

    global k=k+0.2

    global obj_val = [objective_value(m)]

end

```

I want to save the objective value of each iteration, but i don’t know how to do it.

---

<div class="post-metadata">

**Author:** ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)\
**Post date:** [January 10, 2020, 2:30pm UTC](https://discourse.julialang.org/t/save-objective-values-in-an-optimization-loop/33192/2 "2020-01-10T14:30:17Z")

</div>

Use a vector `obj_val = Float64[]` to store the values, and use `push!` to add elements to the vector:

```nohighlight
using JuMP, Plots, Gurobi

function run_code()
    model = Model(with_optimizer(Gurobi.Optimizer))
    @variable(model, x >= 0)
    @variable(model, y >= 0)
    @constraint(model, 2x - 4 >= 0)
    @constraint(model, y - 0.5*x >= 0)
    k = 0
    obj_val = Float64[]
    while k <= 1
        @objective(model, Max, 3x + k * y)
        optimize!(model)
        k = k + 0.2
        push!(obj_val, objective_value(model))
    end
    return obj_val
end
run_code()

```

You should also read [Performance Tips · The Julia Language](https://docs.julialang.org/en/v1/manual/performance-tips/index.html).  
If you wrap your code in a function, it will run faster, and you don’t have the `global k` issues.

---

<div class="post-metadata">

**Author:** ![yordiak](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/yordiak/32/12584_2.png) [@yordiak](https://discourse.julialang.org/u/yordiak)\
**Post date:** [January 10, 2020, 2:43pm UTC](https://discourse.julialang.org/t/save-objective-values-in-an-optimization-loop/33192/3 "2020-01-10T14:43:42Z")

</div>

very nice solution… i wasn’t aware neither of that procedure nor the `push!` command
