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.
As part of the NEOS Server terms of use, the commercial solvers are to be used solely for academic, non-commercial research purposes.
Install NEOSServer.jl using the package manager:
import Pkg
Pkg.add("NEOSServer")
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 NEOSServer.jl with JuMP as follows:
using JuMP, NEOSServer
model = Model() do
NEOSServer.Optimizer(email="me@mydomain.com", solver="Ipopt")
end
Note: NEOSServer.Optimizer
is limited to the following solvers:
"CPLEX"
"FICO-Xpress"
"Gurobi"
"Ipopt"
"Knitro"
"MOSEK"
"OCTERACT"
"SNOPT"
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.