# Convex.jl/Mosek/SCS setting callback

**URL:** <https://discourse.julialang.org/t/convex-jl-mosek-scs-setting-callback/79780>\
**Category:** Optimization (Mathematical)\
**Created:** [April 21, 2022, 12:28pm UTC](https://discourse.julialang.org/t/convex-jl-mosek-scs-setting-callback/79780 "2022-04-21T12:28:34Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Alex\_W](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/alex_w/32/35586_2.png) [@Alex\_W](https://discourse.julialang.org/u/Alex_W)\
**Post date:** [April 21, 2022, 12:28pm UTC](https://discourse.julialang.org/t/convex-jl-mosek-scs-setting-callback/79780/1 "2022-04-21T12:28:34Z")

</div>

Hello all,

I am new to Julia so I apologize if this is trivial.

I am calling Mosek and SCS through Convex.jl and want to track how quickly these solvers are converging (for plotting purposes). Is it possible to pass a callback to Mosek/SCS through Julia that saves some information about each iterate?

Here is a MWE if that helps!

```julia
using LinearAlgebra
using Convex, SCS, MosekTools
using MathOptInterface
const MOI = MathOptInterface

function test()
    # problem copied from https://jump.dev/Convex.jl/stable/quick_tutorial/
    m = 4; n = 5
    A = randn(m, n); b = randn(m, 1)
    x = Variable(n)
    problem = minimize(sumsquares(A * x - b), [x >= 0])

    values = []
    norms = []
    times = []

    # ==== made up code, how do I do this?
    function callback(iterate)
        push!(values, value(iterate))
        push!(norms, norm(iterate))
        push!(times, time(iterate))
    end
    problem.add_callback!(callback)
    # ==== end of made up code

    solve!(problem, SCS.Optimizer; silent_solver=true)

    # solve!(problem, Mosek.Optimizer; silent_solver=true)

    println(values)
    println(norms)
    println(times)
end

test()

```

Best,  
Alex

---

<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:** [April 21, 2022, 7:26pm UTC](https://discourse.julialang.org/t/convex-jl-mosek-scs-setting-callback/79780/2 "2022-04-21T19:26:43Z")

</div>

No, it is not possible.

---

<div class="post-metadata">

**Author:** ![miles.lubin](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/miles.lubin/32/279_2.png) [@miles.lubin](https://discourse.julialang.org/u/miles.lubin)\
**Post date:** [April 21, 2022, 7:50pm UTC](https://discourse.julialang.org/t/convex-jl-mosek-scs-setting-callback/79780/3 "2022-04-21T19:50:18Z")

</div>

The only way I know how to do this would be to capture the solver’s output (to stdout) and parse it to extract the values you want to plot.

---

<div class="post-metadata">

**Author:** ![Alex\_W](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/alex_w/32/35586_2.png) [@Alex\_W](https://discourse.julialang.org/u/Alex_W)\
**Post date:** [April 21, 2022, 8:12pm UTC](https://discourse.julialang.org/t/convex-jl-mosek-scs-setting-callback/79780/4 "2022-04-21T20:12:30Z")

</div>

Got it. Unfortunately, capturing solver output doesn’t work for me as I want to plot other metrics.

Thanks for looking anyways!
