Cover
Pyomo-Optimization Modeling in Python
Preface
Goals of the Book
Who Should Read This Book
Comments and Questions
Acknowledgements
Contents
Reface
Contents
1 Introduction
1.1 Mathematical Modeling
1.2 Modeling Languages for Optimization
1.3 Modeling Graph Coloring
1.4 Motivating Pyomo
1.4.1 Open Source
1.4.2 Customizable Capability
1.4.3 Solver Integration
1.4.4 Modern Programming Language
1.5 Getting Started
1.6 Book Summary
1.7 Discussion
2 Pyomo Modeling Strategies
2.1 Modeling Components
2.2 Concrete Models: Specifying Components Via Expressions
2.3 Concrete Models: Specifying Components Via Rules
2.4 Abstract Models
2.5 Optimizing Models
2.5.1 Optimization with the pyomo Command
2.5.2 Optimization Scripts
2.6 Discussion
2.A Examples
2.A.1 Concrete Pyomo Model with Explicit Variables
2.A.2 Concrete Pyomo Model with Indexed Variables
2.A.3 Concrete Pyomo Model with External Data
2.A.4 Concrete Pyomo Model with Constraint Rules
2.A.5 Concrete Pyomo Model with Abstract Component Declarations
2.A.6 Using a Function to Construct a Concrete Pyomo Model
2.A.7 Abstract Pyomo Model
2.A.7.1 Pyomo Model
2.A.7.2 Data Commands
2.A.8 A Python Script that Optimizes a Concrete Pyomo Model
2.A.9 A Python Script that Optimizes an Abstract Pyomo Model
3 Model Components: Variables, Objectives, and Constraints
3.1 Modeling with Components
3.2 Variables
3.2.1 Var Declarations
3.2.2 Variable Initialization
3.2.3 Working with Variables
3.3 Objectives
3.3.1 Simple Declarations
3.3.2 Declarations with Rule Functions
3.4 Constraints
3.4.1 Declarations with Logical Expressions
3.4.2 Declarations with Expression Tuples
3.5 Constraint Lists
3.6 Discussion
4 Model Components: Sets and Parameters
4.1 Set Data
4.1.1 Set Declarations
4.1.2 Set Initialization
4.1.3 Set Data Validation
4.1.4 Set Options
4.1.5 RangeSet
4.1.6 Discussion of Index Sets
4.2 Parameter Data
4.2.1 Param Declarations
4.2.2 Parameter Initialization
4.2.3 Data Validation
4.3 Discussion
5 Miscellaneous Model Components and Utility Functions
5.1 Miscellaneous Components
5.2 Advanced Component Indexing
5.3 Functions to Support Modeling
5.3.1 Generalized Dot Products
5.3.2 Generating Sequences
5.3.3 Helper Functions
5.4 Discussion
5.A Examples
5.A.1 Error Checks in a Concrete Model
5.A.2 Error Checks in an Abstract Model
6 Initializing Abstract Models with Data Command Files
6.1 Model Data
6.2 The set Command
6.2.1 Simple Sets
6.2.2 Sets of Tuple Data
6.2.3 Set Arrays
6.3 The param Command
6.3.1 One-dimensional Parameter Data
6.3.2 Multi-Dimensional Parameter Data
6.4 The import Command
6.4.1 Simple Import Examples
6.4.2 Import Syntax Options
6.4.3 Interpreting Relational Tables
6.4.4 Importing from Spreadsheets and Relational Databases
6.5 The include Command
6.6 Data Namespaces
6.7 Discussion
6.A Examples
6.A.1 Namespace Data Commands
6.A.2 The Diet Problem
7 The Pyomo Command-line Interface
7.1 Overview
7.2 Building a Model Instance
7.3 Specifying the Model Object
7.4 Selecting Data with Namespaces
7.5 Customizing Pyomo's Workflow
7.6 Customizing Solver Behavior
7.7 Analyze Solver Results
7.8 Managing Diagnostic Output
7.9 Discussion
7.A Examples
7.A.1 Model Object with Non-Default Name
7.A.2 Pyomo Data Commands with Multiple Namespaces
8 Nonlinear Programming with Pyomo
8.1 Introduction
8.2 Building Nonlinear Programming Formulations
8.2.1 Nonlinear Expressions
8.2.2 The Rosenbrock Example
8.3 Solving Nonlinear Programming Formulations
8.3.1 Nonlinear Solvers
8.3.2 Tips for Nonlinear Programming
Variable Initialization
Undefined Evaluations
Model Singularities and Problem Scaling
8.4 Nonlinear Programming Examples
8.4.1 Variable Initialization in Minimization of Multimodal Function
8.4.2 Optimal Quotas for Sustainable Harvesting of Deer
8.4.3 Estimation of Parameters in Infectious Disease Models
8.4.4 Reactor Design
8.A Examples
8.A.1 Rosenbrock
8.A.2 Multimodal
8.A.3 Deer Harvesting
8.A.4 Disease Estimation
8.A.5 Reactor Design
8.A.5.1 Initial Design
8.A.5.2 Design Table
9 Stochastic Programming Extensions
9.1 Introduction
9.2 Stochastic Programming: Definition and Notations
9.3 Modeling in PySP
9.3.1 The Deterministic Reference Model
9.3.2 The Scenario Tree
9.3.3 Scenario Parameter Specification
9.3.4 Compilation of the Scenario Tree Model
9.4 Generating and Solving the Extensive Form
9.5 Progressive Hedging: A Generic Decomposition Strategy
9.5.1 The runph Script
9.5.1.1 Variable-specific ρ
9.5.1.2 Linearization of the Proximal Penalty Terms
9.6 Progressive Hedging Extensions: Advanced Configuration
9.6.1 Watson and Woodruff Extensions
9.6.1.1 Mipgap Control and Cycle Detection Parameters
9.6.1.2 General Variable Fixing and Slamming Parameters
9.6.1.3 Variable-specific Fixing and Slamming Parameters
9.6.2 Solving a Constrained Extensive Form
9.6.3 Alternative Convergence Criteria
9.6.4 User-Defined Extensions
9.7 Solving PH Scenario Sub-Problems in Parallel
9.8 Discussion
9.A Examples
9.A.1 Farmer Model
9.A.2 Farmer Data File
9.A.3 Scenario Tree Model
9.A.4 Scenario Data Command File
10 Scripting and Algorithm Development
10.1 Introduction
10.2 Scripting Basics
10.2.1 A Canonical Optimization Script
10.3 Common Scripting Tasks
10.3.1 Printing and Comparing Variable Values
10.3.2 Looping Over Variables
10.3.3 Initializing and Fixing Variables
10.3.4 Adding and Dropping Constraints
10.3.5 Sharing Solution Results Across Multiple Models
10.3.6 Plotting Data with Matplotlib
10.3.7 Generating Different Models with a Function
10.4 Hybrid Optimization
10.5 Benders Decomposition
10.6 Discussion
10.A Examples
10.A.1 A Simple Optimization Script
10.A.2 A Simple Optimization Script with Multiple Data Files
10.A.3 A More Comprehensive Optimization Script
10.A.4 A Comprehensive Optimization Script that Mimics the pyomo Command
10.A.5 An Optimization Script with Multiple Models
10.A.6 An Optimization Script that Prints the Value of Variables
10.A.7 A Script that Performs Optimization from Two Starting Points
10.A.8 A Script that Performs Optimization from a Grid of Starting Points
10.A.9 A Script that Reoptimizes a Model after Fixing Variables
10.A.10 An Iterative Optimization Process that Explicitly Activates Select Constraints
10.A.11 Sharing Results Between Models
10.A.12 Plotting Solver Results with Matplotlib
10.A.13 A Sudoku Problem Solved by Iteratively Adding Cuts
10.A.14 Hybrid Optimization for Parameter Estimation
Appendix A Installing Coopr
A.1 Installation Overview
A.2 Using an Installer
A.3 Installing Coopr as a Site Package
A.4 Installing a Coopr Release Using coopr_install
A.5 Installing a Development Branch Using coopr_install
A.6 Discussion
Appendix B A Brief Python Tutorial
B.1 Overview
B.2 Installing and Running Python
B.3 Python Line Format
B.4 Variables and Data Types
B.5 Data Structures
B.5.1 Strings
B.5.2 Lists
B.5.3 Tuples
B.5.4 Sets
B.5.5 Dictionaries
B.6 Conditionals
B.7 Iterations and Looping
B.8 Generators and List Comprehensions
B.9 Functions
B.10 Objects and Classes
B.11 Modules
B.12 Python Resources
Appendix C Pyomo and Coopr: The Bigger Picture
C.1 Coopr Overview
C.2 Optimization Solvers
References
Index