Transitioning from MathProgBase
MathOptInterface is a replacement for MathProgBase.jl. However, it is not a direct replacement.
Transitioning a solver interface
MathOptInterface is more extensive than MathProgBase which may make its implementation seem daunting at first. There are however numerous utilities in MathOptInterface that the simplify implementation process.
For more information, read Implementing a solver interface.
Transitioning the high-level functions
MathOptInterface doesn't provide replacements for the high-level interfaces in MathProgBase. We recommend you use JuMP as a modeling interface instead.
If you haven't used JuMP before, start with the tutorial Getting started with JuMP
linprog
Here is one way of transitioning from linprog:
using JuMPfunction linprog(c, A, sense, b, l, u, solver) N = length(c) model = Model(solver) @variable(model, l[i] <= x[i=1:N] <= u[i]) @objective(model, Min, c' * x) eq_rows, ge_rows, le_rows = sense .== '=', sense .== '>', sense .== '<' @constraint(model, A[eq_rows, :] * x .== b[eq_rows]) @constraint(model, A[ge_rows, :] * x .>= b[ge_rows]) @constraint(model, A[le_rows, :] * x .<= b[le_rows]) optimize!(model) return ( status = termination_status(model), objval = objective_value(model), sol = value.(x) )endmixintprog
Here is one way of transitioning from mixintprog:
using JuMPfunction mixintprog(c, A, rowlb, rowub, vartypes, lb, ub, solver) N = length(c) model = Model(solver) @variable(model, lb[i] <= x[i=1:N] <= ub[i]) for i in 1:N if vartypes[i] == :Bin set_binary(x[i]) elseif vartypes[i] == :Int set_integer(x[i]) end end @objective(model, Min, c' * x) @constraint(model, rowlb .<= A * x .<= rowub) optimize!(model) return ( status = termination_status(model), objval = objective_value(model), sol = value.(x) )endquadprog
Here is one way of transitioning from quadprog:
using JuMPfunction quadprog(c, Q, A, rowlb, rowub, lb, ub, solver) N = length(c) model = Model(solver) @variable(model, lb[i] <= x[i=1:N] <= ub[i]) @objective(model, Min, c' * x + 0.5 * x' * Q * x) @constraint(model, rowlb .<= A * x .<= rowub) optimize!(model) return ( status = termination_status(model), objval = objective_value(model), sol = value.(x) )end