Updates to JuMP dependencies (MathOptInterface) affecting results

I have a large JuMP project developed on older versions of Julia (1.7.0) and JuMP (1.22.1) (because I was stuck on a corporate IT system and it was hard to update).

I’ve since moved my project to a new IT system, and used the Julia package system and my original Project.toml, Manifest.toml files to rebuild the same project / environment (Julia 1.7.0 and JuMP 1.22.1 etc.).

It produced identical results to begin with. But then I added some new packages to my project, which led to updates to some JuMP dependencies, including MathOptInterface from 1.3.0 to 1.3.5.

At this point the results changed (running a bounds constrained non-linear minimisation using NLopt/LBFGS solver and the final objective value was about twice what it was previously).

I’ve since realised that I need to include the ---preserve=all option when I add packages to prevent unwanted upgrades, and this has fixed my problem for now.

But it still has me wondering: should we expect the performance of JuMP or related solvers to change this dramatically with different versions. And does anyone have any theories on what kind of changes to the packages might be contributing to these results.

Can you provide a reproducible example? Is the problem convex?

I’ll look into it. If it helps, its a nonlinear weighted least squares parameter estimation problem with 200-500 variables.

I’m not aware of any changes that are relevant, so it’s hard to offer any suggestions without a reproducible example.

If the problem is non-convex, then anything goes. Small differences in the numerics, or the order of constraints, could cause the solver to converge to a different point. Try a different starting point, etc.

If the problem is convex: did the solver converge to an “optimal” solution each time? Or did one end in an error? When using JuMP you must always check the termination status before querying the primal solution.

You could always try a different solver, like Ipopt.