Release notes
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Version 1.0.0 (August 27, 2026)
Breaking
Removed the
::AbstractVectorinterface to ExaModels. The inputxtoadd_predictorfor ExaModels must now be anExaModels.VariableorExaModels.Expression. No other input types are allowed. (#324), (#325)This is a breaking change only if you used the ExaModels extension, and only if your model did not follow ExaModels best practice and used something like
import ExaModels, MathOptAIcore = ExaModels.ExaCore(; concrete = Val(true))core, x = ExaModels.add_var(core, 2)x_vec = [x[i] for i in 1:2](core, y), _ = MathOptAI.add_predictor(core, MathOptAI.ReLU(), x_vec)instead of
import ExaModels, MathOptAIcore = ExaModels.ExaCore(; concrete = Val(true))core, x = ExaModels.add_var(core, 2)(core, y), _ = MathOptAI.add_predictor(core, MathOptAI.ReLU(), x)
Other
- Fixed some typos in the documentation (#323)
Version 0.2.9 (August 22, 2026)
Other
- Documentation updates (#315), (#316), (#318), (#319), (#320), (#321)
- Update minimum Julia version to v1.10 (#322)
Version 0.2.8 (August 10, 2026)
Added
- Added
SoftPlusEpigraph(#310), (#312)
Other
- Documentation updates (#303), (#305), (#307)
- Bumped actions/setup-python from 6 to 7 (#304)
- Fixed formatting for latest JuliaFormatter (#306)
- Added more tests for ExaModels (#311)
Version 0.2.7 (July 23, 2026)
Added
Other
- Added test for
LeakyReLU{ReLUEpigraph}(#293) - Explicitly include predictors in ExaModelsExt (#298)
- Updated printing because of JuMP@1.31.0 release (#299)
Version 0.2.6 (July 3, 2026)
Added
- Added
SoftPlusConicEpigraph(#288)
Other
Version 0.2.5 (June 25, 2026)
Added
- Added
ReLUEpigraph(#274) - Updated to ExaModels@0.11 (#277)
- Enabled
build_predictoron activation functions (#278) - Added an input convex tutorial using
ReLUEpigraph(#279), (#280)
Other
Version 0.2.4 (March 16, 2026)
Added
- Added support for
Flux.gelu(#263)
Fixed
- Don't construct
eval_hessian_lagrangianifpredictor.hessian=false(#266)
Other
- Added
ExaModelsexamples to the tutorials (#264)
Version 0.2.3 (March 5, 2026)
Added
- Added
; filterkeyword argument toreplace_weights_with_variables(#257) - Added ExaModels.jl extension (#259)
Fixed
- Added an error when
::Arraypassed as input for::AbstractPredictor(#252) - Removed
build_predictorfallback and simplifiedadd_predictorfallbacks (#253) - Removed
import JuMPfrom extensions where possible (#260)
Other
Version 0.2.2 (January 22, 2026)
Added
- Added support for
nn.Dropout(#239) - Added
LayerNormpredictor (#240) - Added
GCNConvandTAGConvpredictors (#244)
Other
Version 0.2.1 (January 15, 2026)
Added
- Added support for custom layers in PyTorch (#237)
Version 0.2.0 (January 14, 2026)
This release contains a number of breaking changes. See below for details on how to upgrade from v0.1.19.
Breaking
Remove
::Matrixmethod that maps over columns (#223).This change means you cannot do
MathOptAI.add_predictor(model, predictor, x)wherex::Matrixand have it return ay::Matrixcorresponding to mapping the predictor over the columns ofx.To upgrade, replace:
y, formulation = MathOptAI.add_predictor(model, predictor, x::Matrix)with:
ret = map(1:size(x, 2)) do i return MathOptAI.add_predictor(model, predictor, x[:, i])endformulation = last.(ret)y = reduce(hcat, first.(ret))and write additional code as needed to handle the
formulationobjects.Replace GrayBox by VectorNonlinearOracle implementation (#230)
We have removed the old
GrayBoxpredictor and replaced it by theVectorNonlinearOraclepredictor, which has now been renamed toGrayBox. In addition, the; vector_nonlinear_oracle = truekeyword argument has been removed, and the new; gray_box = trueis equivalent to the old; vector_nonlinear_oracle = true.To upgrade, replace:
MathOptAI.add_predictor(model, predictor, x; vector_nonlinear_oracle = true)with:
MathOptAI.add_predictor(model, predictor, x; gray_box = true)Change
configdictionary to have functions as values (#233)We have changed how the
; config = Dict()keyword works for the Flux, Lux, and PyTorch extensions. Where previously the values were instantiatedAbstractPredictorobjects, they must now be constructors that, when called, return anAbstractPredictorobject.As an example of upgrading, replace:
; config = Dict(Flux.relu => MathOptAI.ReLU())with:
; config = Dict(Flux.relu => MathOptAI.ReLU)# or, alternatively; config = Dict(Flux.relu => () -> MathOptAI.ReLU())
Added
- Add
LeakyReLUpredictor (#218) - Add
AvgPool2d,Conv2d, andMaxPool2dpredictors (#220), (#222), (#224) - Add support for custom models in Flux (#227)
- Add
MaxPool2dBigMpredictor (#231), (#235)
Fixed
- Simplify test to fix flakey
TestPythonCallExt.test_gelu(#228)
Other
- Remove comment that
vector_nonlinear_oracleis experimental (#219) - Added this changelog (#234), (#236)
Version 0.1.19 (December 5, 2025)
Added
Version 0.1.18 (October 24, 2025)
Added
- Propagate start values through layers (#210)
Other
Version 0.1.17 (October 23, 2025)
Fixed
- Iterate over PyTorch Sequential module itself, rather than its children (#207)
Version 0.1.16 (October 22, 2025)
Added
Other
- Clarify the problem class of each predictor (#205)
Version 0.1.15 (September 30, 2025)
Added
- Add extension hooks for InfiniteOpt (#200)
Other
- Refactor different ReLU into separate files (#199)
Version 0.1.14 (September 8, 2025)
Fixed
- Fix binary decision tree by making the tolerance default to 1e-6 (#196)
- Fix docs because of a change in Lux (#197)
Other
- Update README.md with MOAI paper (#194)
Version 0.1.13 (July 8, 2025)
Fixed
- Add DimensionMismatch checks for Affine and Scale (#192)
Version 0.1.12 (June 3, 2025)
Added
- Add a
reduced_spacefallback for extensions (#187)
Other
Version 0.1.11 (June 2, 2025)
Added
Other
Version 0.1.10 (April 14, 2025)
Added
- Allow relaxation of ReLUQuadratic (#178)
Fixed
- Fix duplicate test name (#176)
Version 0.1.9 (April 1, 2025)
Added
- Add
VectorNonlinearOraclepredictor (#172)
Version 0.1.8 (March 31, 2025)
Added
Other
- Add paper to README (#169)
Version 0.1.7 (January 17, 2025)
Fixed
- Evaluate torch model to get output dimension (#166)
Version 0.1.6 (November 7, 2024)
Other
- Clarify instructions to load PythonCall (#163)
Version 0.1.5 (November 6, 2024)
Added
- Add
gray_box_deviceoption forPyTorchModel(#159)
Fixed
- Fix flakey tests (#161)
Version 0.1.4 (October 25, 2024)
Fixed
- Add bound constraints to the Formulation object (#155)
Other
Version 0.1.3 (October 24, 2024)
Other
- Delete
.github/workflows/documentation-deploy.yml(#150) - Improve manual for NN extensions (#152)
- Fix documentation link in README.md (#153)
Version 0.1.2 (October 23, 2024)
Other
- Add
DOCUMENTER_KEY(#148)
Version 0.1.1 (October 23, 2024)
Other
- Update installation instructions for registered package (#141)
- Create documentation-deploy.yml (#146)
Version 0.1.0 (October 22, 2024)
Initial release. Too many pull requests to reference.