LCCC Workshop: System Design Meets Equation-based Languages Sep 20, - - PowerPoint PPT Presentation

lccc workshop system design meets equation based
SMART_READER_LITE
LIVE PREVIEW

LCCC Workshop: System Design Meets Equation-based Languages Sep 20, - - PowerPoint PPT Presentation

LCCC Workshop: System Design Meets Equation-based Languages Sep 20, 2012 Carl D. Laird, Assistant Professor Chemical Engineering, Texas A&M University William E. Hart, Jean-Paul Watson, John D. Siirola Sandia National Laboratories,


slide-1
SLIDE 1

Sep 20, 2012 LCCC Workshop: System Design Meets Equation-based Languages Carl D. Laird, Assistant Professor Chemical Engineering, Texas A&M University William E. Hart, Jean-Paul Watson, John D. Siirola Sandia National Laboratories, Albuquerque, NM David L. Woodruff, Professor Business Management, University of California, Davis

Thursday, September 20, 12

slide-2
SLIDE 2

Pyomo - Python Optimization Modeling Objects

  • Algebraic equation-based modeling language for
  • ptimization
  • e.g AMPL, GAMS, AIMMS
  • acausal, equation-based modeling
  • currently no support for differential equations
  • initially driven by large-scale MILP
  • Designed by Math Programmers for Math Programmers
  • open-source, extensible alternative to existing tools
  • used to enable research and engineering solutions
  • I work on algorithms and applications
  • I am a user of modeling languages, ... right?

2

Thursday, September 20, 12

slide-3
SLIDE 3

Typical Algebraic Modeling Language

3

Model Definition File Solver Interface Data File Solution

Thursday, September 20, 12

slide-4
SLIDE 4

Typical Algebraic Modeling Language

  • Provide powerful, high-level problem specification
  • Familiar math programming constructs (Sets, expressions)
  • Very limited programming / scripting capability
  • model transformations? language extensions?
  • plotting? functions? numerical libraries?

3

Model Definition File Solver Interface Data File Solution

Thursday, September 20, 12

slide-5
SLIDE 5

Seasonal Drivers in Infectious Disease Spread

4

1944 1949 1954 5000 10000

Seasonal Drivers?

Nonlinear Discrete- Time Disease Model

Thursday, September 20, 12

slide-6
SLIDE 6

Seasonal Drivers in Infectious Disease Spread

4

1944 1949 1954 5000 10000

Seasonal Drivers?

Nonlinear Discrete- Time Disease Model

0.4$ 0.6$ 0.8$ 1$ 0$ 2$ 4$ 6$ 8$ 10$ 12$

Thursday, September 20, 12

slide-7
SLIDE 7

Seasonal Drivers in Infectious Disease Spread

4

1944 1949 1954 5000 10000

Seasonal Drivers?

Nonlinear Discrete- Time Disease Model

0.4$ 0.6$ 0.8$ 1$ 0$ 2$ 4$ 6$ 8$ 10$ 12$

Large Mixed Integer Non-Linear Programming Problem

Thursday, September 20, 12

slide-8
SLIDE 8

Seasonal Drivers in Infectious Disease Spread

4

1944 1949 1954 5000 10000

Seasonal Drivers?

Nonlinear Discrete- Time Disease Model

0.4$ 0.6$ 0.8$ 1$ 0$ 2$ 4$ 6$ 8$ 10$ 12$

Large Mixed Integer Non-Linear Programming Problem

Thursday, September 20, 12

slide-9
SLIDE 9

Parallel Decomposition in Interior-Point Methods

5

Thursday, September 20, 12

slide-10
SLIDE 10

Parallel Decomposition in Interior-Point Methods

5

Thursday, September 20, 12

slide-11
SLIDE 11

Parallel Decomposition in Interior-Point Methods

6

  • Nonlinear Stochastic Optimization
  • Large-scale Parameter Estimation
  • Design Under Uncertainty
  • Spatially Decomposable Problems
  • Very large-scale NLP Problems
  • Highly Structured

min

xq,y

X

q∈Q

fq (xq) s.t. cq (xq) = 0 xL

q ≤ xq ≤ xU q

∀ q ∈ Q Lx

qxq − Ly qy = 0,

Thursday, September 20, 12

slide-12
SLIDE 12

Parallel Decomposition in Interior-Point Methods

6

  • Nonlinear Stochastic Optimization
  • Large-scale Parameter Estimation
  • Design Under Uncertainty
  • Spatially Decomposable Problems
  • Very large-scale NLP Problems
  • Highly Structured

min

xq,y

X

q∈Q

fq (xq) s.t. cq (xq) = 0 xL

q ≤ xq ≤ xU q

∀ q ∈ Q Lx

qxq − Ly qy = 0,

Thursday, September 20, 12

slide-13
SLIDE 13

Parallel solution of structured linear system

min

xq,y

X

q∈Q

fq (xq) s.t. cq (xq) = 0 xL

q ≤ xq ≤ xU q

∀ q ∈ Q Lx

qxq − Ly qy = 0,

Parallel Decomposition in Interior-Point Methods

7

Thursday, September 20, 12

slide-14
SLIDE 14

Parallel construction/evaluation

  • f equations, J, H

Parallel solution of structured linear system

min

xq,y

X

q∈Q

fq (xq) s.t. cq (xq) = 0 xL

q ≤ xq ≤ xU q

∀ q ∈ Q Lx

qxq − Ly qy = 0,

Parallel Decomposition in Interior-Point Methods

7

Thursday, September 20, 12

slide-15
SLIDE 15

Other Examples of Applications

8

Parallel Parameter Estimation for Spatial Transportation Affecting Disease Spread Optimal Response to Water Contamination Events

Thursday, September 20, 12

slide-16
SLIDE 16

Fragile tool chain

9 Model Definition File Solver Interface Data File Solution File

Optimization Package Compiled C++ Matlab Python

Write Input Files Parse Output Files

Thursday, September 20, 12

slide-17
SLIDE 17

Two Choices

10

  • 2. Use programming language
  • develop components

in another language

  • import types/functionality
  • 1. Design new language
  • modeling, scripting

syntax

  • compiler tools

Thursday, September 20, 12

slide-18
SLIDE 18

Two Choices

10

  • Selected to develop in Python (Choice 2)
  • tired of writing parsers
  • not language experts
  • existing tools are not actively updated
  • not responsible for full language functionality and packages
  • want full-featured language and user-extensibility (for “free”)
  • 2. Use programming language
  • develop components

in another language

  • import types/functionality
  • 1. Design new language
  • modeling, scripting

syntax

  • compiler tools

Thursday, September 20, 12

slide-19
SLIDE 19

Requirements

11

  • Powerful
  • full support for standard math programming constructs

(LP, MILP, NLP, MINLP, ...)

  • full-featured programming environment (model interrogation, scripting,

functions, classes, standard & numerical libraries)

  • extensive solver integration - “out-of-the-box”
  • Open
  • licensed under BSD (i.e. really open-source)
  • reduce barriers to adoption, ease of collaboration
  • transparency
  • Flexible
  • extensible by users, contributors, not only by us
  • portable (Windows, Linux, OS X)
  • Easy
  • language constructs familiar to math programmers - Abstract Models
  • scripting / programming capability well-defined
  • substantial documentation

Thursday, September 20, 12

slide-20
SLIDE 20

Why Python?

12

  • License
  • open-source
  • Language Features
  • familiar, lean syntax, rich set of existing data types, object-
  • riented, exceptions, dynamic loading, ...
  • Support and stability
  • highly stable, well-supported
  • Documentation
  • extensive online documentation, several books
  • Libraries
  • significant external libraries, numerical & scientific packages
  • Portability
  • widely available on many platforms

Thursday, September 20, 12

slide-21
SLIDE 21

Simple Modeling Example: Knapsack

13

S : set of items (set) vi : value of item i (param) wi : weight of item i (param) Wmax : maximum weight (param) xi : binary indicator (var)

max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wmax xi ∈ {0, 1} ∀ i ∈ S

Thursday, September 20, 12

slide-22
SLIDE 22

Knapsack Problem: Abstract Model

14

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

Thursday, September 20, 12

slide-23
SLIDE 23

Knapsack Problem: Abstract Model

15

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

Thursday, September 20, 12

slide-24
SLIDE 24

Knapsack Problem: Abstract Model

16

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

Thursday, September 20, 12

slide-25
SLIDE 25

Knapsack Problem: Abstract Model

17

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

Thursday, September 20, 12

slide-26
SLIDE 26

Knapsack Problem: Abstract Model

17

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

Thursday, September 20, 12

slide-27
SLIDE 27

Knapsack Problem: Abstract Model

18

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

Thursday, September 20, 12

slide-28
SLIDE 28

Knapsack Problem: Abstract Model

19

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

Thursday, September 20, 12

slide-29
SLIDE 29

Knapsack Problem: Abstract Model

20

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

Thursday, September 20, 12

slide-30
SLIDE 30

Knapsack Problem: Abstract Model

21

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

Thursday, September 20, 12

slide-31
SLIDE 31

Knapsack Problem: Abstract Model

22

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

Thursday, September 20, 12

slide-32
SLIDE 32

Knapsack Problem: Abstract Model

23

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

Model is completely abstract - there is no data

Thursday, September 20, 12

slide-33
SLIDE 33

Knapsack Problem: Abstract Model

23

S: set of items vi: value of items wi: weight of items Wm: maximum weight xi: binary indicator max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

from coopr.pyomo import * model = AbstractModel() model.ITEMS = Set() model.v = Param( model.ITEMS, within=PositiveReals ) model.w = Param( model.ITEMS, within=PositiveReals ) model.W_max = Param( within=PositiveReals ) model.x = Var( model.ITEMS, within=Binary ) def value_rule(model): return sum( model.v[i]*model.x[i] for i in model.ITEMS ) model.value = Objective( sense=maximize ) def weight_rule(model): return sum(model.w[i]*model.x[i] for i in model.ITEMS) \ <= model.W_max model.weight = Constraint( )

Model is completely abstract - there is no data > pyomo --solver=glpk knapsack.py akesson_art.dat

Thursday, September 20, 12

slide-34
SLIDE 34

Knapsack Problem: Concrete Model

24

from coopr.pyomo import * v = {'hammer':8, 'wrench':3, 'screwdriver':6, 'towel':11} w = {'hammer':5, 'wrench':7, 'screwdriver':4, 'towel':3} W_max = 14 model = ConcreteModel() model.ITEMS = Set( initialize=v.keys() ) model.x = Var( model.ITEMS, within=Binary ) model.value = Objective( expr = sum( v[i]*model.x[i] for i in model.ITEMS ), sense = maximize ) model.weight = Constraint( expr = sum( w[i]*model.x[i] for i in model.ITEMS ) <= W_max )

Thursday, September 20, 12

slide-35
SLIDE 35

Knapsack Problem: Concrete Model

25

from coopr.pyomo import * v = {'hammer':8, 'wrench':3, 'screwdriver':6, 'towel':11} w = {'hammer':5, 'wrench':7, 'screwdriver':4, 'towel':3} W_max = 14 model = ConcreteModel() model.ITEMS = Set( initialize=v.keys() ) model.x = Var( model.ITEMS, within=Binary ) model.value = Objective( expr = sum( v[i]*model.x[i] for i in model.ITEMS ), sense = maximize ) model.weight = Constraint( expr = sum( w[i]*model.x[i] for i in model.ITEMS ) <= W_max )

Thursday, September 20, 12

slide-36
SLIDE 36

Knapsack Problem: Concrete Model

26

from coopr.pyomo import * v = {'hammer':8, 'wrench':3, 'screwdriver':6, 'towel':11} w = {'hammer':5, 'wrench':7, 'screwdriver':4, 'towel':3} W_max = 14 model = ConcreteModel() model.ITEMS = Set( initialize=v.keys() ) model.x = Var( model.ITEMS, within=Binary ) model.value = Objective( expr = sum( v[i]*model.x[i] for i in model.ITEMS ), sense = maximize ) model.weight = Constraint( expr = sum( w[i]*model.x[i] for i in model.ITEMS ) <= W_max )

Thursday, September 20, 12

slide-37
SLIDE 37

Knapsack Problem: Concrete Model

27

from coopr.pyomo import * v = {'hammer':8, 'wrench':3, 'screwdriver':6, 'towel':11} w = {'hammer':5, 'wrench':7, 'screwdriver':4, 'towel':3} W_max = 14 model = ConcreteModel() model.ITEMS = Set( initialize=v.keys() ) model.x = Var( model.ITEMS, within=Binary ) model.value = Objective( expr = sum( v[i]*model.x[i] for i in model.ITEMS ), sense = maximize ) model.weight = Constraint( expr = sum( w[i]*model.x[i] for i in model.ITEMS ) <= W_max )

Thursday, September 20, 12

slide-38
SLIDE 38

Knapsack Problem: Concrete Model

28

from coopr.pyomo import * v = {'hammer':8, 'wrench':3, 'screwdriver':6, 'towel':11} w = {'hammer':5, 'wrench':7, 'screwdriver':4, 'towel':3} W_max = 14 model = ConcreteModel() model.ITEMS = Set( initialize=v.keys() ) model.x = Var( model.ITEMS, within=Binary ) model.value = Objective( expr = sum( v[i]*model.x[i] for i in model.ITEMS ), sense = maximize ) model.weight = Constraint( expr = sum( w[i]*model.x[i] for i in model.ITEMS ) <= W_max )

Thursday, September 20, 12

slide-39
SLIDE 39

Knapsack Problem: Concrete Model

29

Scripting

from coopr.pyomo import * v = {'hammer':8, 'wrench':3, 'screwdriver':6, 'towel':11} w = {'hammer':5, 'wrench':7, 'screwdriver':4, 'towel':3} W_max = 14 model = ConcreteModel() model.ITEMS = Set( initialize=v.keys() ) model.x = Var( model.ITEMS, within=Binary ) model.value = Objective( expr = sum( v[i]*model.x[i] for i in model.ITEMS ), sense = maximize ) model.weight = Constraint( expr = sum( w[i]*model.x[i] for i in model.ITEMS ) <= W_max )

Thursday, September 20, 12

slide-40
SLIDE 40

Solver Interfaces

30

LP MILP NLP MINLP

CPLEX GUROBI Xpress GLPK CBC PICO OpenOpt

...

Thursday, September 20, 12

slide-41
SLIDE 41

Solver Interfaces

30

LP MILP NLP MINLP

CPLEX GUROBI Xpress GLPK CBC PICO OpenOpt NL AMPL Solver Library CPLEX GUROBI IPOPT Coliny Bonmin Couenne ...

...

Thursday, September 20, 12

slide-42
SLIDE 42

Solver Interfaces

30

LP MILP NLP MINLP

CPLEX GUROBI Xpress GLPK CBC PICO OpenOpt NL AMPL Solver Library CPLEX GUROBI IPOPT Coliny Bonmin Couenne ...

...

Thursday, September 20, 12

slide-43
SLIDE 43

Other Pyomo Features

31

  • Advanced scripting capability
  • functions, OO, model interrogation & transformation
  • Extensive set operations, tuples, multi-dimensional
  • Load data from different sources
  • AMPL dat files, CSV files, Excel, databases
  • Support for custom workflow with plugins
  • e.g. preprocess, create_modeldata, save_instance
  • And more with extensions...

Thursday, September 20, 12

slide-44
SLIDE 44

Summary

32

  • Pyomo is an equation-based, algebraic modeling language

for optimization

  • Pyomo is an object-oriented framework for building
  • ptimization-based applications
  • Based on Python
  • simple syntax for modeling
  • full-featured language
  • Significant solver integration
  • Open-source and Extensible
  • PySP: Stochastic Programming Framework
  • PH: Progressive Hedging Framework
  • Generalized Disjunctive Programming Capability
  • Blocks - Connectors
  • Piecewise-linear Constructs

Thursday, September 20, 12

slide-45
SLIDE 45

Some Closing Comments

  • Performance?
  • Python is slow... but not that slow
  • Time dominated by solution, not construction
  • Compiled code for solver/AD
  • Flat Model Specification
  • Abstract models
  • Computer scientists
  • Object-Oriented Modeling
  • Concrete models
  • Programmatic creation
  • Engineers
  • Karl Åström’s Comment: Don’t just do

what you did before with new technology

33

max X

i∈S

vi · xi s.t. X

i∈S

wi · xi ≤ Wm xi ∈ {0, 1}

Thursday, September 20, 12

slide-46
SLIDE 46

Plus our many users, including:

  • University of California, Davis
  • Texas A&M University
  • University of Texas
  • Rose-Hulman Institute of Technology
  • University of Southern California
  • George Mason University
  • Iowa State University
  • N.C. State University
  • University of Washington
  • Naval Postgraduate School
  • Universidad de Santiago de Chile
  • University of Pisa
  • Lawrence Livermore National Lab
  • Los Alamos National Lab

Aknowledgments (Development Community)

  • Sandia National Laboratories
  • Bill Hart
  • Jean-Paul Watson
  • John Siirola
  • David Hart
  • Tom Brounstein
  • University of California, Davis
  • Prof. David L. Woodruff
  • Prof. Roger Wets
  • Texas A&M University
  • Prof. Carl D. Laird
  • Daniel Word
  • James Young
  • Gabe Hackebeil
  • Texas Tech University
  • Zev Friedman
  • Rose Hulman Institute
  • Tim Ekl
  • William & Mary
  • Patrick Steele
  • North Carolina State
  • Kevin Hunter

34

Thursday, September 20, 12

slide-47
SLIDE 47

Learn More

35

  • Project Homepage

http://software.sandia.gov/coopr

  • The Book
  • Pyomo and PySP papers

Pyomo: Modeling and Solving Mathematical Programs in Python (Vol. 3, No. 3, 2011) PySP: Modeling and Solving Stochastic Programs in Python (Vol. 4, No. 2, 2012)

Thursday, September 20, 12