A Julia interface for the NEOS Optimisation Server
25 Stars
Updated Last
1 Year Ago
Started In
April 2015


Build Status codecov

The NEOS Server is a free internet-based service for solving numerical optimization problems. It is able to take models specified in a variety of formats and pass them to a range of both free and commercial solvers.

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

NEOS is particularly useful if you need to trial a commercial solver to determine if it meets your needs.

Terms of use

As part of the NEOS Server terms of use, the commercial solvers CPLEX, Gurobi, MOSEK, and FICO-Xpress are to be used solely for academic, non-commercial research purposes.


Install NEOSServer.jl using the package manager:

import Pkg


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(email="")

# Print the NEOS welcome message:

# 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, NEOSSServer

model = Model() do 
    NEOSServer.Optimizer(email="", solver="Ipopt")

Note: NEOSServer.Optimizer is limited to the following solvers: "CPLEX", "FICO-Xpress", "Gurobi", "Ipopt", "MOSEK" and "SNOPT".

NEOS Limits

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