JuMP Interface (Experimental)
JuMP to an ExaModel
We have an experimental interface to JuMP model. A JuMP model can be directly converted to a ExaModel
. It is as simple as this:
using ExaModels, JuMP, CUDA
N = 10
jm = Model()
@variable(jm, x[i = 1:N], start = mod(i, 2) == 1 ? -1.2 : 1.0)
@constraint(
jm,
s[i = 1:N-2],
3x[i+1]^3 + 2x[i+2] - 5 + sin(x[i+1] - x[i+2])sin(x[i+1] + x[i+2]) + 4x[i+1] -
x[i]exp(x[i] - x[i+1]) - 3 == 0.0
)
@objective(jm, Min, sum(100(x[i-1]^2 - x[i])^2 + (x[i-1] - 1)^2 for i = 2:N))
em = ExaModel(jm; backend = CUDABackend())
An ExaModel{Float64, CUDA.CuArray{Float64, 1, CUDA.DeviceMemory}, ...}
Problem name: Generic
All variables: ████████████████████ 10 All constraints: ████████████████████ 8
free: ████████████████████ 10 free: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0
lower: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0 lower: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0
upper: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0 upper: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0
low/upp: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0 low/upp: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0
fixed: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0 fixed: ████████████████████ 8
infeas: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0 infeas: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0
nnzh: (-212.73% sparsity) 172 linear: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ 0
nonlinear: ████████████████████ 8
nnzj: ( 0.00% sparsity) 80
Here, note that only scalar objective/constraints created via @constraint
and @objective
API are supported. Older syntax like @NLconstraint
and @NLobjective
are not supported. We can solve the model using any of the solvers supported by ExaModels. For example, we can use MadNLP:
using MadNLPGPU
result = madnlp(em)
"Execution stats: Optimal Solution Found (tol = 1.0e-04)."
JuMP Optimizer
Alternatively, one can use the Optimizer
interface provided by ExaModels
. This feature can be used as follows.
using ExaModels, JuMP, CUDA
using MadNLPGPU
set_optimizer(jm, () -> ExaModels.MadNLPOptimizer(CUDABackend()))
optimize!(jm)
This is MadNLP version v0.8.4, running with cuDSS v0.3.0
Number of nonzeros in constraint Jacobian............: 80
Number of nonzeros in Lagrangian Hessian.............: 172
Total number of variables............................: 10
variables with only lower bounds: 0
variables with lower and upper bounds: 0
variables with only upper bounds: 0
Total number of equality constraints.................: 8
Total number of inequality constraints...............: 0
inequality constraints with only lower bounds: 0
inequality constraints with lower and upper bounds: 0
inequality constraints with only upper bounds: 0
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du alpha_pr ls
0 2.0570000e+03 2.48e+01 1.00e+02 -1.0 0.00e+00 - 0.00e+00 0.00e+00 0
1 2.0474072e+03 2.47e+01 2.97e+01 -1.0 2.27e+00 - 1.00e+00 4.00e-03h 1
2 1.1009058e+03 1.49e+01 2.24e+01 -1.0 2.24e+00 - 1.00e+00 1.00e+00h 1
3 1.1598223e+02 2.15e+00 5.34e+01 -1.0 2.14e+00 - 1.00e+00 1.00e+00h 1
4 6.5263510e+00 1.12e-01 4.74e+00 -1.0 1.72e-01 - 1.00e+00 1.00e+00h 1
5 6.2326771e+00 1.64e-03 2.08e-02 -1.0 5.91e-02 - 1.00e+00 1.00e+00h 1
6 6.2324576e+00 1.18e-06 1.22e-05 -3.8 1.40e-03 - 9.98e-01 1.00e+00h 1
7 6.2323021e+00 5.36e-11 1.98e-06 -5.0 3.12e-05 - 8.90e-01 1.00e+00h 1
Number of Iterations....: 7
(scaled) (unscaled)
Objective...............: 7.8690682927808819e-01 6.2323020878824593e+00
Dual infeasibility......: 1.9831098138078929e-06 1.5706229725358512e-05
Constraint violation....: 5.3644583980288433e-11 5.3644583980288433e-11
Complementarity.........: 1.1122043961251575e-05 8.8086588173112493e-05
Overall NLP error.......: 8.8086588173112493e-05 8.8086588173112493e-05
Number of objective function evaluations = 8
Number of objective gradient evaluations = 8
Number of constraint evaluations = 8
Number of constraint Jacobian evaluations = 8
Number of Lagrangian Hessian evaluations = 7
Total wall-clock secs in solver (w/o fun. eval./lin. alg.) = 0.100
Total wall-clock secs in linear solver = 0.018
Total wall-clock secs in NLP function evaluations = 0.016
Total wall-clock secs = 0.134
EXIT: Optimal Solution Found (tol = 1.0e-04).
Again, only scalar objective/constraints created via @constraint
and @objective
API are supported. Older syntax like @NLconstraint
and @NLobjective
are not supported.
This page was generated using Literate.jl.