Skip to content

jaxglobal.applications

Code-defined application models for the flagship benchmark.

Each class module (kinetics, logic, nn) exports PROBLEMS, a list of AppProblem. fstar is the best known global minimum of that exact formulation (the discretized or tabulated model that f evaluates), and pyomo() builds the same formulation for the equation-based solvers.

suite

suite(classes=None)

All problems of the given classes (default all); a missing class module is skipped.

Model classes

jaxglobal.applications.kinetics

ODE kinetic parameter estimation: least squares on a fixed-step RK4 integrator.

Data sources (verbatim measurement tables, ODE right-hand sides, initial conditions):

  • gasoil: catalytic cracking of gas oil, Tjoa & Biegler [tjoa1991simultaneous], as distributed in GAMS Model Library gasoil.gms (COPS [dolan2004benchmarking] #12, 21 observations x 2 states, tau = 0 ... 0.95). Also test problem in Floudas et al. [floudas1999handbook] and Esposito & Floudas [esposito2000global].
  • methanol: methanol-to-hydrocarbons, Maria [maria1989adaptive], as distributed in GAMS Model Library methanol.gms (COPS 2.0 #13, 17 observations x 3 states, tau = 0 ... 1.122).

Parameter bounds are our own choice (the benchmark tables in the papers were not available to us), see each problem's note. The integrator is plain RK4 with substeps of at most hmax between consecutive measurement times, so the model being optimized is the discretized one; fstar refers to that discretization and the continuous-time optimum (scipy.integrate.solve_ivp) is quoted in source.

Series reactions, reversible series and Lotka-Volterra from Esposito & Floudas are not included: their data tables could not be found verbatim.

jaxglobal.applications.logic

Small engineering models whose natural code uses control flow and tables.

Each model is what an engineer would write in plain JAX: a laminar/turbulent jnp.where friction-factor switch, jnp.max over parallel branches, a piecewise-linear property table (hinge form of jnp.interp), jnp.minimum for volume-discount tariffs. The Pyomo versions are the honest equation-based counterparts: every where/max/min becomes a pyomo.gdp disjunction or binary variables (big-M), and every interp becomes pyomo.environ.Piecewise with binaries.

  • pipes_parallel: two parallel pipes of different length share a viscous oil flow; pump head is the larger of the two pressure drops.
  • hx_water: tube-side design of a water-cooled exchanger; water properties from a table, Nusselt number by regime (max), friction by regime (where).
  • tariff_blend: buying four raw materials with volume-discount tariffs (jnp.minimum of two linear schedules) and an overage surcharge (jnp.maximum) subject to demand and a blend-quality constraint.
  • motor_lines_<K>: two parallel water lines share a flow; the flow split and the two diameters are chosen, and each line's pump motor is bought from a price list of K standard ratings, written as one jnp.where line. The Pyomo twin picks one rating per line with K binaries each. K = 26 is the IEC 60034 rating list; larger K are finer lists over the same range, to show how each side scales with the number of switches.
  • water_main_<K>: the same price list for the single pump of a branched water main (a trunk feeding two users at different elevations). The static lift bounds the pump power from below, and SCIP's presolve removes most of the binaries, so here the equation-based solver stays fast as K grows.

fstar for the first two is a dense grid followed by a local polish (fstar_by_grid); for tariff_blend it is exact (enumeration of the 2^4 tariff choices, one LP each). For motor_lines_<K> and water_main_<K> it is the best point found by jaxglobal or SCIP (Pyomo twin); see each entry's source for which solvers proved it optimal.

jaxglobal.applications.nn

Neural-network-surrogate benchmark after Schweidtmann & Mitsos [schweidtmann2019deterministic].

A. M. Schweidtmann and A. Mitsos, "Deterministic global optimization with artificial neural networks embedded", J. Optim. Theory Appl. 180(3), 925-948 (2019), doi:10.1007/s10957-018-1396-0 (arXiv:1801.07114). Section 5.1: the MATLAB peaks function on D = [-3,3]^2 (global min -6.551 at (0.228,-1.626)) is learned by tanh MLPs trained on Latin-hypercube samples (500 points, one hidden layer of 47 neurons for the illustrative example; 2000 points for the scaling study: one hidden layer with 40..700 neurons, and 1..6 hidden layers of 20 neurons). The paper trains in MATLAB (Levenberg-Marquardt, early stopping) and does not publish weights, so ours are RETRAINED in JAX (benchmarks/train_nn.py) and the networks are not the paper's. The paper has no higher-input-dimension peaks cases (its other studies are application ANNs with data we do not have).

Weights live in data/<name>.npz (W0,b0,...,W{L},b{L}); the net is x -> tanh(x W0 + b0) -> ... -> linear output. Pyomo builders: reduced space (pyomo_reduced, tanh expressions, no intermediate variables) and OMLT full space (pyomo_omlt).