NEOSServer.jl

Build Status codecov

NEOSServer.jl is a wrapper for the NEOS Server, a free internet-based service for solving numerical optimization problems.

See here for the full list of solvers and input formats that NEOS supports.

Affiliation

This wrapper is maintained by the JuMP community and is not an official interface of the NEOS Server.

Getting help

If you need help, please ask a question on the JuMP community forum.

If you have a reproducible example of a bug, please open a GitHub issue.

License

NEOSServer.jl is licensed under the MIT License.

Use of the NEOS Server requires you to comply with NEOS Server terms of use.

In particular, the commercial solvers are to be used solely for academic, non-commercial research purposes.

Installation

Install NEOSServer.jl using the package manager:

import Pkg
Pkg.add("NEOSServer")

The NEOS API

This package contains an interface for the NEOS XML-RPC API.

The following example shows how you can interact with the API. Wrapped XML-RPC functions begin with neos_ and are exported.

using NEOSServer

# Create a server. You must supply a valid email:
server = NEOSServer.Server("me@mydomain.com")

# Print the NEOS welcome message:
println(neos_welcome(server))

# Get an XML template:
xml_string = neos_getSolverTemplate(server, "milp", "Cbc", "AMPL")

# Modify template with problem data...

# Submit the XML job to NEOS:
job = neos_submitJob(server, xml_string)

# Get the status of the Job from NEOS:
status = neos_getJobStatus(server, job)

# Get the final results:
results = neos_getFinalResults(server, job)

Use with JuMP

Use NEOSServer.jl with JuMP as follows:

using JuMP, NEOSServer
model = Model() do
    return NEOSServer.Optimizer(; email = "me@mydomain.com", solver = "Ipopt")
end

Note: NEOSServer.Optimizer is limited to the following solvers:

  • "CPLEX"
  • "FICO-Xpress"
  • "Ipopt"
  • "Knitro"
  • "MOSEK"
  • "OCTERACT"
  • "SNOPT"

NEOS Limits

NEOS currently limits jobs to an 8 hour time limit, 3 GB of memory, and a 16 MB submission file. If your model exceeds these limits, NEOSServer.jl may be unable to return useful information to the user.