
\chapter{Getting Started with Pyomo}

\label{sec:intro}

\section{Introduction}

The Python Optimization Modeling Objects (Pyomo) software package
supports the definition and solution of optimization applications using
the Python scripting language.  Python is a powerful dynamic programming
language that has a very clear, readable syntax and intuitive object
orientation.  Pyomo includes Python classes for sparse sets, parameters,
and variables, which can be used to formulate algebraic expressions that
define objectives and constraints.  Thus, Pyomo can be used to concisely
represent mixed-integer linear programming (MILP) models for large-scale,
real-world problems that involve thousands of constraints and variables.
Further, Pyomo includes a flexible framework for applying optimizers to
analyze these models.

The design of Pyomo is motivated by a variety of factors that have
impacted applications at Sandia National Laboratories.  Sandia's discrete
mathematics group has successfully used AMPL~\citep{AMPL,FouGay03}
to model and solve large-scale integer programs for many years.
This application experience has highlighted the value of Algebraic
Modeling Languages (AMLs) for solving real-world applications, and AMLs
are now an integral part of operations research solutions at Sandia.

Pyomo was developed to provide an alternative platform for developing math
programming models that leverages Python's rich programming environment to
facilitate the application and deployment of optimization capabilities.
Pyomo provides a set of Python classes and functions that define a
modeling capability that is similar to AML's like AMPL.  Further, Pyomo
leverages a flexible plugin framework to provide a highly extensible and
flexible modeling framework.  Pyomo is integrated into Coopr, a COmmon
Optimization Python Repository.  Coopr packages provide optimization
components that can be applied to optimize Pyomo models in a flexible
manner.

This chapter discusses how to install Coopr and verify that Pyomo can
be run.  The rest of this document introduces the user to Pyomo and
describes the details of the Pyomo's modeling objects.  This presentation
is principally intended for Pyomo end-users.  Readers may also find the
following references useful when diving deeper into Coopr and Pyomo:
\begin{itemize}

\item W. E. Hart, J. Siirola, and J.-P. Watson, "Coopr User Manual: Customizing Coopr with Plugins", Sandia National Laboratories, 2009.

\item W. E. Hart, J.-P. Watson, and D. L. Woodruff, "Coopr User Manual: Pyomo Modeling Language and Extension Packages", Sandia National Laboratories, 2009.

\item W. E. Hart, J.-P. Watson, and D. L. Woodruff, "PYthon Optimization Modeling Objects (Pyomo)", 2009, (in preparation).

\end{itemize}


\input{coopr-getting-started}

