## The MMCFClass Project

**MMCFClass** is an *abstract* (pure virtual) base C++ class which
defines the interface between a generic Multicommodity Min Cost Flow (MMCF)
problem solver, or, more in general, a solver of problems with the MMCF
structure "plus or minus" some variables and/or constraints, and the
application programs. The interface tackles some of the most common needs
that an application might have, and provides an abstract layer which make
applications independent from the details of the particular solver that is
used. A set of "virtualized" data types is used to provide the some
flexibility in choosing the type (integer or floating-point) and the
precision of the numbers (costs, flows, indices ...), although this solution
is not really elegant and satisfactory and changes are foreseen in a future.

Rather than to set a standard right away, the attempt here is to make a first
step towards a better standardization, providing some initial pieces and
seeing if there is enough interest to carry this idea forward; thus, we
would very much appreciate to hear
comments about MMCFClass. Sure thing is, such an abstract layer may help
faster dissemination and use of results in the field of algorithms for
Multicommodity-type problems, such as Network Design ones. In case you might
be interested in developing an algorithm which conforms to the interface, or
porting an existing one, a distribution of the
MMCFClass alone is available. Please let
us know of any such development, so that we can list your code together with
the ones in this page.

The currently available codes that have been developed or ported under the
MMCFClass interface are:

- MMCFCplex: a "wrapper class" that solves the
problems through calls to the Cplex Callable Library (of course,
you'll need a valid Cplex license to use it).

- MMCFCoin: a "wrapper class" that solves the
problems through calls to the open-source solvers of the
COIN-OR project.

- MMCFB: a Linear Multicommodity Min Cost Flow
solver based on a cost decomposition approach, and employing either a
Bundle-type algorithm or a SubGradient algorithm to solve the
Lagrangian Dual.

All these codes use the Graph service C++ class for
MMCF-type problems solvers to read descriptions of the instances from file(s),
in various formats, or from memory, possibly modify and pre-process them and
make them available in memory to the solver in an unique way, independently
from the original format.