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 Librarygasoil.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 Librarymethanol.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.minimumof 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 ofKstandard ratings, written as onejnp.whereline. The Pyomo twin picks one rating per line withKbinaries each.K = 26is the IEC 60034 rating list; largerKare 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 asKgrows.
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).