
\chapter{Discussion}

\section{XXX Discussion}
\label{sec:discussion}

Pyomo is being actively developed to support real-world applications at
Sandia National Laboratories.  Our experience with Pyomo and Coopr has
validated our initial assessment that Python is an effective language for
supporting the solution of optimization applications.  Although it is
clear that custom languages can support a more concise, mathematically
intuitive syntax, Python's clean syntax and programming model make it
a natural choice for optimization tools like Pyomo.

Coopr was publicly released as an open source project in 2008.  Future development will focus on several key design issues:
\begin{itemize}

\item Nonlinear Problems - Conceptually, it is straightforward to extend
Pyomo to support the definition of general nonlinear models.  However,
the model generation and expression mechanisms need to be re-designed
to support capabilities like automatic differentiation.

\item Optimized Expression Trees - Our scaling experiments suggest that 
Pyomo's runtime performance can be improved by using a different 
representation for expression trees.  The representation of expression 
trees could be reworked to avoid frequent object construction, either 
through a low-level representation or a Python extension library.

\item Python Optimizers - A variety of Python optimization packages
are now available, which we would like to leverage.  In particular,
these will be important when nonlinear problems are supported in Pyomo.

\item Direct Optimizer Interfaces - Coopr currently does not support
direct library interfaces to optimizers, although this is a capability
that is strongly supported by Python.  This is not a design limitation
of Coopr, but instead has been a matter of development priorities.
Similarlly, extensions to external solver packages like Acro's COLIN
optimization library~\citep{ACRO} will be quite natural;  Coopr has
preliminary support for applications that are defined using a system
call interface.

\end{itemize}
Finally, it should be straightforward to extend Coopr to support remote
solver execution with NEOS~\citep{NEOS} and Optimization Services~\citep{OS}.

