Software

CUTEst

A versatile testing environment for optimization and linear algebra solvers. The package contains a collection of test problems, along with Fortran 77, Fortran 90/95, C/C++ and Matlab tools intended to help developers design, compare and improve new and existing solvers. It is usually associated to SIFDecode, a decoder for problems modeled in the SIF—a generalization of the MPS modeling language for linear programs. CUTEst realizes the interface between such problems and a variety of popular solvers. There is a description of its predecessor, CUTEr on Wikipedia.

GALAHAD

A thread-safe library of Fortran 90 packages for nonlinear optimization problems. Areas currently covered by the library include unconstrained and bound-constrained optimization, quadratic programming, nonlinear programming, systems of nonlinear equations and inequalities, and nonlinear least squares problems. The library also contains a quadratic program preprocessor and a Lanczos-based method for trust-region subproblems. There is a description of GALAHAD on Wikipedia.

NLPy

nlpy is a Python package for numerical optimization. It aims to provide a toolbox for solving linear and nonlinear programming problems that is both easy to use and extensible. It is applicable to problems that are smooth, have no derivatives, or have integer data.

OPAL

OPAL is a Python modeling language for algorithmic optimization. How can we best choose parameter values so as to maximize performance? OPAL is a framework that allows to easily declare algorithms and the parameters on which they depend

Dr. Ampl

An optimization problem analyzer. Problems are modeled in AMPL and distinctive characteristics are extracted. Based on these, a database of Neos solvers is queried and a list of recommended solvers is returned. The software currently features preliminary convexity prover and disprover and returns upper and lower bounds on the objective over the set described by the bound constraints.

PyKrylov

A Library of Krylov methods in pure Python. Currently focuses on real linear systems and on methods that do not require products with the transpose operator. Also includes MINRES and SYMMLQ.

Example:

import numpy as np
from pykrylov.bicgstab import BiCGSTAB

bicgstab = BiCGSTAB(lambda v: A*v, reltol=1.0e-8)
bicgstab.solve(rhs, guess=np.ones(n), matvec_max=2*n)

PyOrder

A Python interface to sparse matrix ordering packages from the HSL. Currently features MC21 (aims to create a nonzero diagonal) and MC60 (reverse Cuthill-McKee and Sloane). Includes classes to read matrices in Harwell-Boeing, Rutherford-Boeing and MatrixMarket format and a fast spy() function.

Example:

from pyorder.pymc60 import rcmk
from pyorder.tools.hrb import RutherfordBoeingData
from pyorder.tools.spy import FastSpy

# Read and reorder.
M = RutherfordBoeingData('matrix.rb', patternOnly=True, readRhs=False)
perm, rinfo = rcmk(M.nrow, M.ind, M.ip)

# Plot reordered sparsity pattern.
(irow, jcol) = M.find()
FastSpy(M.nrow, M.ncol, perm[irow], perm[jcol], sym=M.issym)

Tokyo

A fast Cython wrapper for the BLAS.

LibAmpl

A simple framework to build a shared AMPL Library. This shared AMPL Library is used by NLPy, Dr. Ampl and can be used by any other AMPL-based solver.

PyNeos

A simple Python framework to solve problems modeled in AMPL remotely on one of the NEOS solvers via its XML-RPC interface.

Example from the command line:

python pyneos.py --model parabola.mod --data parabola.dat \
       --category nco --solver Ipopt

Example in a script:

from pyneos import NeosInterface
neos = NeosInterface()
xml = neos.BuildXmlString('lp',
                          'PCx',
                          'AMPL',
                          'diet1.mod',
                          'diet1.dat',
                          'solve;\ndisplay Total_Cost;\ndisplay Buy;',
                          'Yet again the diet problem')
msg = neos.SubmitJob(xml)

LBL

A unified C interface to the HSL MA27 and MA57 for the direct multifrontal factorization and solution of symmetric linear systems.

Example:

#include "lbl.h"
LBL_Data *lbl;           // Main data structure.
lbl = LBL_Initialize(nnz, n, stderr, 1);
lbl.irow = ...;          // Initialize row array.
lbl.jcol = ...;          // Initialize col array.
LBL_Analyze(lbl, 0);     // 0 = automatic pivot choice.
LBL_Factorize(lbl, val); // val is an array of doubles.
LBL_Solve(lbl, rhs);     // rhs is an array of doubles.
LBL_Finalize(lbl);

AMPL syntax modes

There is a major mode for Emacs and one for Vim. Should also work for gnu-mathprog, as used by GLPK.