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 workof 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