Download Why Python?

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Building Applications with
Python & Gurobi
Kostja Siefen
Building optimization models with Gurobi
}
Option 1 – use a modeling language
◦ Very easy to build models
– Optimization modeling constructs built into language
◦ Attractive choice for non-programmers
◦ Alternatives: AMPL, GAMS, Pyomo, …
}
Option 2 – use a full programming language
◦ Much more powerful and flexible development environment
– Complete access to solver functionality
– Richer set of language features
◦ Natural choice when deploying models and/or integrating them into
applications for others to use
◦ Alternatives: C, C++, C#, Java, MATLAB, Python, R, VB
}
2
But what if users didn't have to choose between easy and
powerful?
© 2015 Gurobi Optimization
Gurobi Python Environment
}
High-level optimization modeling constructs embedded in
Python programming language
◦ Combines expressiveness of a modeling language with the power and
flexibility of a programming language
}
Design goals:
Require minimal programming skills to get started
Bring "feel" of a modeling language to the Python interface
Allow for code that is easy to write and maintain
Maintain unified design across all of our interfaces
Remain lightweight and efficient (memory & CPU) when compared with
solver alone
◦ Support all solver and programming needs
◦
◦
◦
◦
◦
}
3
Consistently earns high praise from our users
© 2015 Gurobi Optimization
Why Python?
}
Fast, powerful and easy-to-use
}
Extendible with vast library of prewritten modules (over 50,000)
◦ Statistical analysis, visualization, GUIs, web development, web services,
data connections, file compression, data encryption, …
}
One of top-10 most popular programming languages, according to
TIOBE Programming Community Index
◦ http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
◦ Large and rapidly growing Python community with great training resources
}
Interactive shell is useful for prototyping
}
Can be deployed to create full-featured optimization applications
◦ GUI, server, web, …
}
4
Free and open source with license that's business-friendly
© 2015 Gurobi Optimization
Getting started with Python
}
Don't need to be an expert to start modeling in Python
}
Nothing extra to buy or install
◦ Gurobi distribution includes Python interpreter and basic modules
}
Gurobi Interactive Shell is Python shell with Gurobi extensions
◦ Powerful environment for interacting with existing models
}
To launch the shell:
◦ Windows
– Double-click the Gurobi icon on the desktop
– Or run gurobi from a Command Prompt window
◦ Linux
– Run the gurobi.sh command from a terminal
◦ Mac
– Click on the Gurobi icon in the Launchpad
– Or run the gurobi.sh command from a terminal
5
© 2015 Gurobi Optimization
Programming in Python
}
Python is a cross-platform, high-level programming language
◦
◦
◦
◦
◦
◦
Object-oriented
Interpreted
Dynamically typed
Automatic memory management
Includes a large standard library
Documentation tightly integrated with the code
}
Python programs are typically stored in text files with .py extension
}
Most functionality in Python is provided by modules
◦ To use a module in Python programs, include an import statement
}
6
To use the Gurobi interface, import the gurobipy module:
from gurobipy import *
© 2015 Gurobi Optimization
Editing and running Python programs
}
Any text editor can be used to work with .py files
◦ Most programming editors have Python mode with syntax highlighting,
etc.
}
To run a program:
◦ Windows
– At a Command Prompt window, enter
gurobi [program_name]
◦ Linux/Mac
– At a terminal, enter
gurobi.sh [program_name]
}
Many IDEs available
◦ https://wiki.python.org/moin/IntegratedDevelopmentEnvironments
◦ Easy to install Gurobi in other Python distributions
7
© 2015 Gurobi Optimization
Gurobi recommends Anaconda
}
Windows, Mac, Linux; 32/64-bit
}
Python 2.x, 3.x — your choice
}
~150 packages in the default installation
}
conda package and environment management
◦ ~350 packages available with a simple conda install
◦ Create isolated “silos” for multiple projects
}
8
Gurobi provides/maintains Anaconda packages
© 2015 Gurobi Optimization
Essential Gurobi modeling constructs
}
Model
a model
}
Var
a decision variable
}
Constr
a constraint
}
Overloaded operators
◦ Basic arithmetic (+, -, ×, ÷)
◦ Constraint (≤, =, ≥)
9
}
Aggregate sum operator (quicksum)
}
Python provides the rest!
© 2015 Gurobi Optimization
Typical steps for building a model
}
Create empty Model object with Model() constructor
}
Add variables with Model.addVar()
}
Call Model.update() once to process pending model updates
◦ Gurobi provides efficient "lazy updates"
◦ Only call Model.update() when necessary to reference new elements
}
Call Model.setObjective() to set objective function
}
Add constraints with Model.addConstr()
}
Solve the model with Model.optimize()
◦ Will process any pending model updates
10
© 2015 Gurobi Optimization
Example: simple model
# Create empty Model
m = Model()
# Add variables
x = m.addVar(vtype=GRB.BINARY)
y = m.addVar(vtype=GRB.BINARY)
z = m.addVar(vtype=GRB.BINARY)
# Process pending updates
m.update()
11
© 2015 Gurobi Optimization
Example: simple model
# Set objective function
m.setObjective(x + y + 2*z, GRB.MAXIMIZE)
# Add constraints
m.addConstr(x + 2*y + 3*z <= 4)
m.addConstr(x + y >= 1)
# Solve model
m.optimize()
12
© 2015 Gurobi Optimization
Indices and subscripts in Python
}
List is a mutable sequence of elements
◦ Useful when representing index sets
◦ Elements of any type (integers, strings, …) indexed by integers (0 to n-1)
◦ Ex: cities=['CHI', 'NYC', 'ATL']; cities.append('MIA');
cities[2]='BOS'; cities.remove('NYC'); cities.sort()
}
Tuple is an immutable, compound grouping of elements
◦ Ideal for representing multidimensional subscripts
◦ Ex: arc=('CHI','NYC'); j=arc[1]
}
Dictionary is a mutable mapping from keys to values
◦ Useful when representing coefficients or variables indexed by subscripts
◦ Keys must be immutable (integers, strings, tuples, …)
◦ Ex: cost={('CHI','NYC'):100, ('ATL','MIA'):150};
cost[('NYC','MIA')]=200; c=cost['ATL','MIA']
13
© 2015 Gurobi Optimization
Iterating in Python and aggregate sums
}
Loops iterate over collections of elements (list, dictionary, …)
◦
◦
}
List comprehension efficiently builds lists via set notation
◦
}
Ex: penaltyarcs=[a for a in arcs if cost[a]>1000]
quicksum() is direct replacement for Python's sum() function
◦
◦
}
Useful when representing the for-all modeling construct
Ex:
for c in cities:
print c # must indent all statements in loop
Gurobi feature that is more efficient when working with Var objects
Ex: obj=quicksum(cost[a]*x[a] for a in arcs)
Combining loops with sums is ideal when building constraints
Ex:
∑
j∈J
xij ≤ 5, ∀i ∈ I
can be built with
for i in I:
m.addConstr(quicksum(x[i,j] for j in J) <= 5)
14
© 2015 Gurobi Optimization
Building a Gurobi Model: Six Steps
15
Create a model
m = Model()
Add variables
x = m.addVar(...)
Commit changes
m.update()
Set objective
m.setObjective(...)
Add constraints
m.addConstr(...)
Optimize
m.optimize()
© 2015 Gurobi Optimization
Spyder
}
}
Scientific Python Development EnviRonment
Familiar integrated development environment (IDE) for users of
MATLAB, Visual Studio, etc.
}
Built-in editor, file explorer, documentation browser
}
Graphical interface for debugging (ipdb)
}
IPython console for interactive code execution
http://pythonhosted.org/spyder
16
© 2015 Gurobi Optimization
Latest Python-related enhancements in v6.5
}
Interactive examples for commonly faced business problems
◦ http://www.gurobi.com/resources/examples/example-models-overview
}
Expression building is more than 4X faster
}
Lazy update mode
◦ Set new UpdateMode parameter to 1
◦ Refer to new variables and constraints without calling Model.update()
}
More control over when Gurobi environments are created/released
◦ Default environment not created until first used
◦ Released with new disposeDefaultEnv() method
}
New Conda package simplifies installation for the Anaconda Python distribution
$ conda config --add channels http://conda.anaconda.org/gurobi
$ conda install gurobi
17
© 2015 Gurobi Optimization
Interactive Examples
18
© 2015 Gurobi Optimization
Jupyter (formerly IPython)
}
}
}
}
A web application for interactive data analysis
Create notebooks containing live code, text, equations, and
visualizations
A great way to prototype new algorithms, document experiments,
share reproducible results
Originally for Python, now there are kernels for over 50 different
languages
http://www.jupyter.org
19
© 2015 Gurobi Optimization
Pandas
}
Fast and efficient DataFrame and Series objects
}
Read/write CSV, HDF5, Excel, SQL, plain text
}
Missing data handling
}
Slicing, fancy indexing, subsetting
}
Merges, joins
}
Split-apply-combine operations (groupby)
http://pandas.pydata.org
20
© 2015 Gurobi Optimization
Bokeh
}
Interactive visualization for web browsers
◦ High performance with streaming data and big data
◦ In-browser interactivity on otherwise static pages
◦ Bindings for Python, Scala, Julia, R
http://bokeh.pydata.org
21
© 2015 Gurobi Optimization
Jupyter Demo
22
© 2015 Gurobi Optimization
References
}
Visit http://www.gurobi.com/documentation/ for more information on
the Gurobi Python Interface
◦ Quick Start Guide
◦ Reference Manual
}
Explore our functional code examples to learn more about advanced
features
◦ Working with sparse models: netflow, workforce
◦ Accessing data sources (databases, spreadsheets, …): diet
}
Visit https://docs.python.org/ learn more about Python
◦ Official Python website
◦ Tutorials, documentation, examples, …
}
23
Visit https://www.continuum.io to get started with the Anaconda Python
distribution, which includes iPython and Jupyter
© 2015 Gurobi Optimization