SYMPHONY Overview (from Ted)
SYMPHONY is a black box solver, callable library, and solver framework
for MILPs that evolved from the COMPSys framework of Ralphs and
Lad\'anyi \cite{ladanyi:96,ralphs:95}. The source code for packaged
releases, with full documentation and examples, is available for
download \cite{download.symphony:04} and is licensed under the Common
Public License (CPL). The latest source is also available from the CVS
repository of the COIN-OR Foundation \cite{coin:04}. SYMPHONY is fully
documented and seven different specialized solvers built with SYMPHONY
are available for download as examples of how to use the code. There is
a step by step example showing how to build a simple branch-and-cut
solver in SYMPHONY for the matching problem \cite{trick.guzelsoy:04},
which is summarized in Section \ref{sec:case-studies}. The core solution
methodology of SYMPHONY is a customizable branch and cut algorithm that
can be executed sequentially or in
parallel~\cite{ralphs.ladanyi.saltzman:03}. SYMPHONY calls on several
other open source libraries for specific functionality, including
COIN-OR's Cut Generation Library, Open Solver Interface, and MPS file
parser components, GLPK's GMPL file parser, and a third-party solver for
linear-programming problems (LPs), such as COIN-OR's LP Solver
(CLP).
There are several unique features of SYMPHONY that are worthy of
mention. First, SYMPHONY contains a generic implementation of the WCN
algorithm described in \cite{ralphs.saltzman.wiecek:04} for solving
bicriteria MILPs, and methods for approximating the set of Pareto
outcomes. The bicriteria solver
can be used to examine tradeoffs
between competing objectives, and for solving parametric MILPS, a form
of global sensitivity analysis.
SYMPHONY also contains functions for
local sensitivity analysis based on ideas suggested by Schrage and
Wolsey~\cite{schrage.wolsey:85}.
Second, SYMPHONY has the capability to
warm start the branch-and-bound process from a previously calculated
branch-and-bound tree, even after modifying the problem data.
These capabilities are described in more detail in the paper of Ralphs
and Guzelsoy~\cite{ralphs.guzelsoy:04}. The \textbf{target audience} for
SYMPHONY is similar to that of MINTO---users who require the power of a
sophisticated solver framework, primarily for implementing custom branch
and cut algorithms, with a relatively simple C-style interface, or users
who require other advanced features such as parallelism, the ability to
solve multi-criteria instances, or the ability to warm start solution
procedures.
Symphony Users
Quite a few
- Cincinnati Children's Hospital
Research Foundation's Biomedical
Informatics
division.
They have been using SYMPHONY
for solving some bioinformatics problems.
- I know SYMPHONY is being used by
at least one airline,
- a wireless services
provider
- a company that makes routing
software,
- a company that makes scheduling
software for the mining industry,
- and a major pharmaceutical
company
Relationship between BCP and SYMPHONy from Ted’s FAQs:
What is the relationship of
SYMPHONY and COIN/BCP?
COIN/BCP is a C++ framework based roughly on an ancestor of
SYMPHONY, so
they take substantially the same approach and have similar functionality. COIN/BCP
was developed at IBM and is currently part of the
COIN-OR software repository.
Currently,
SYMPHONY is easier to use "out of the box" and is
a better choice for beginners. It is also more efficient for performing pure
branch and cut (without column generation). COIN/BCP has improved on
SYMPHONY
in some areas, however, such as support for branch and price.
SYMPHONY's
support for branch and price is limited. COIN/BCP is missing some features
that
SYMPHONY has, such as an implementation of global cut pools.
SYMPHONY
and COIN/BCP may be combined into a third-generation framework currently under
development.