Modernization of the Nonlinear Programming Generator
In AIMMS 26.1, following the earlier modernization of our MIP/LP generators, we've completed the same overhaul for the Nonlinear Programming (NLP) generator. This replaces the legacy code with the same modern architecture already powering linear model generation.Purpose of the modernizationThe legacy generator constrained how quickly we could evolve the platform. This is a significant step toward getting the entire model generation pipeline onto the modern codebase, enabling us to deliver improvements faster.What to expectThis change is not intended to have any significant impact on your experience. Two things worth noting:Solution differences are possible. The generated math program may differ slightly from the legacy generator (variable ordering, constraint ordering). Objective values will be the same if a global solver (e.g., BARON, Gurobi) is used, but might differ if a local solver (e.g., CONOPT, Knitro) is used. The specific optimal solution returned by the solver may also vary. This is normal behavior when the underlying matrix structure changes.Option: equals_bounds_imply_nonvar. The legacy generator applied this transformation automatically. The new generator makes it opt-in, since it adds overhead that isn't always justified. For NLP models in particular, we recommend enabling it. It can reduce both model size and the number of nonlinearities, which helps solver performance.As always, if you notice any unexpected behavior, let us know!