MP2NL Changelog#

20261029#

  • Version 0.2.

  • Native NL complementarity remains the default (acc:nlcompl=2), including with Knitro’s configuration.

  • Use acc:nlcompl to control native complementarity in MP2NL; acc:compl has no effect. Reformulations selected by cvt:compl apply only with acc:nlcompl=0.

  • New configurations of solvers not accepting NL complementarity convert it (acc:nlcompl=0): gurobiasl, cplexasl, xpressasl (disjunction), bonmin, snopt, minos, lgo, loqo (product, cvt:compl=1), in addition to ipopt, lindoglobal and others. MINOS and SNOPT ignored NL complementarity constraints, the others failed.

  • Quadratic constraints created by reformulations (e.g., acc:div=0) continue to be written as NL quadratic expressions by default. cvt:quadcon=0 now requests linearization (previously ignored for NL output). ASL MIP solvers may need their nonconvex options (e.g., Gurobi’s nonconvex=2).

  • Configuration alglib4nl (ALGLIB for AMPL): logical expressions, if-then-else, min/max/abs, SOS and indicators are linearized by MP; complementarity is converted with cvt:compl=1 (product): ALGLIB ignores NL complementarity constraints. The product form is the supported default for this configuration. Its time limit and relative gap are timeout and pdgap.

  • lim:time (did nothing), and new mip:gap, mip:gapabs, are passed to the subsolver as its own keywords (e.g., Knitro’s maxtime, mip_opt_gap_rel, mip_opt_gap_abs; BARON’s maxtime, epsr, epsa) for the known configurations. They can be set per objective in a multi-objective solve (suffixes .option_timelimit, .option_mipgap), which used to fail with “Option not found”.

  • Fix: multi-objective passes after the first could submit an invalid NL model, causing the subsolver to read wrong data or stop.

  • Fix: multi-objective models with logical expressions could return an incorrect zero solution with Knitro 16.0.0 and use_asl=0. Unnecessary objective suffixes are now omitted from submitted models; Knitro’s binary NL reader still has limitations with suffixes.

20260624#

  • Changes in MP, in particular:

    • Option cvt:pow2_as_qp prefers quadratization of the ^2 operator for affine arguments (default).

    • Faster parsing of quadratic expressions with defined variables.

    • The main driver code is separated into a shared library and used commonly with AMPLS API.

20260525#

  • Forward AMPL imported function calls to the subsolver, such as gsl_ran_gaussian_pdf().

20260515#

  • Randomly permute algebraic constraints, which seems to help some solvers.

  • Produce defined variables for algebraic expressions with reference count above nl:assign:defvar.

  • Changes in MP, in particular:

    • Option cvt:expr:nlreif: above which reference count, logical expressions are reified.

20260414#

  • Changes in MP, in particular:

    • Option cvt:pre:boundsbest defaults to making auxiliary subexpression result variables free, unless the result is constant. This allows stronger nonlinear presolve.

20260108#

  • Reuse solutions between iterations of multi-objective emulator.

20251210#

  • Change in MP: option obj:multi:options: fix integer-valued objective-specific options.

20251121#

  • New option obj:multi:options to control whether multi-objective option suffixes are used.

20251021#

  • Changes in MP: option cvt:expr:nlassign.

20250814#

  • Changes in MP

    • Improved preprocessing of logical and combinatorial expressions (options cvt:pre:unnest, cvt:pre:sort).

    • Option cvt:pre:boundlogarg (default 0) to bound arguments of logarithm nonnegative. Previously always done, sometimes deteriorating performance of nonlinear solvers.

20250128#

  • Updates for compilers compatibility

20241219#

  • Added WantLogicalizedProd2Bin()

20240926#

  • First release of the MP2NL driver