Skip to content

Latest commit

 

History

History
102 lines (73 loc) · 3.44 KB

README.md

File metadata and controls

102 lines (73 loc) · 3.44 KB

MathOptAI.jl

Build Status Code coverage

MathOptAI.jl is a JuMP extension for embedding trained AI, machine learning, and statistical learning models into a JuMP optimization model.

License

MathOptAI.jl is provided under a BSD-3 license as part of the Optimization and Machine Learning Toolbox project, O4806.

See LICENSE.md for details.

Despite the name similarity, this project is not affiliated with OMLT, the Optimization and Machine Learning Toolkit.

Installation

Install MathOptAI.jl using the Julia package manager:

import Pkg
Pkg.add("MathOptAI")

Getting started

Here's an example of using MathOptAI to embed a trained neural network from Flux into a JuMP model. The vector of JuMP variables x is fed as input to the neural network. The output y is a vector of JuMP variables that represents the output layer of the neural network. The formulation object stores the additional variables and constraints that were added to model.

julia> using JuMP, MathOptAI, Flux

julia> predictor = Flux.Chain(
           Flux.Dense(28^2 => 32, Flux.sigmoid),
           Flux.Dense(32 => 10),
           Flux.softmax,
       );

julia> #= Train the Flux model. Code not shown for simplicity =#

julia> model = JuMP.Model();

julia> JuMP.@variable(model, 0 <= x[1:28^2] <= 1);

julia> y, formulation = MathOptAI.add_predictor(model, predictor, x);

julia> y
10-element Vector{VariableRef}:
 moai_SoftMax[1]
 moai_SoftMax[2]
 moai_SoftMax[3]
 moai_SoftMax[4]
 moai_SoftMax[5]
 moai_SoftMax[6]
 moai_SoftMax[7]
 moai_SoftMax[8]
 moai_SoftMax[9]
 moai_SoftMax[10]

Documentation

Documentation is available at https://lanl-ansi.github.io/MathOptAI.jl.

Getting help

For help, questions, comments, and suggestions, please open a GitHub issue.

Inspiration

This project is mainly inspired by two existing projects:

Other works, from which we took less inspiration, include:

The 2024 paper of López-Flores et al. is an excellent summary of the state of the field at the time that we started development of MathOptAI.

López-Flores, F.J., Ramírez-Márquez, C., Ponce-Ortega J.M. (2024). Process Systems Engineering Tools for Optimization of Trained Machine Learning Models: Comparative and Perspective. Industrial & Engineering Chemistry Research, 63(32), 13966-13979. DOI: 10.1021/acs.iecr.4c00632