Set Ipot (with JuMP) to terminate only if max time is reached

I would like to do the following: setting the Ipopt optimizer (used via JuMP) to terminate ONLY when max_cpu_time is reached. Is it possible?

motivation for doing such a stupid thing:
I need to run multiple optimization in parallel on the same machine. They are completely independent. However, by setting the option max_cpu_time via set_optimizer_attribute(model, "max_cpu_time", 100.0) the max time is divided by the number of processes running in parallel. There is an option max_wall_time on the ipopt documentation, but is only for future version of ipopt, not already compatible with Julia. Hence what I usually do is simply set a default value for max_cpu_time and then multiply that value by the number of processes that I want to run in parallel. However this partially works, because if for example one optimization ends quickly, then all the others will run for too much time (to account for the time that the first one didn’t use). Hence I would like to set the termination condition only based to time, so that I avoid this issue.


(EDIT: add small example to work with)

function ff(x) 
    return x^2

function jumpTimeOnlyTermination()
    model  = Model(Ipopt.Optimizer);
    set_optimizer_attribute(model, "linear_solver", "ma57")
    set_optimizer_attribute(model, "max_iter", 1000)
    set_optimizer_attribute(model, "max_cpu_time", 100.0)


    register(model, :ff, 1, ff; autodiff = true)


    return model 

Maybe a callback would be of use: Ipopt: Ipopt::TNLP Class Reference? Looking at the MOI wrapper to ipopt callbacks should be available from JuMP (I have neve used it, though).

You’d likely have to play with the different options, e.g., tightening the optimality criteria. But I don’t know if you can make Ipopt sit there after it has found the provably optimal solution (it seems a niche request, so unlikely to be supported).

I guess this ultimately could be addressed via Upgrade Ipopt_jll to MUMPS_seq@5.3.5 · Issue #246 · jump-dev/Ipopt.jl · GitHub?