GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3....

20
GiMPy and GrUMPy: Visualization for Optimization in Python Ted Ralphs 1 Aykut Bulut 1 Brady Hunsaker 3 Michael O’Sullivan 2 Osman Ozaltin 4 1 COR@L Lab, Department of Industrial and Systems Engineering, Lehigh University 2 Department of Engineering Science, University of Auckland 3 Google 4 Department of Management Sciences, University of Walterloo INFORMS Computing Society Conference, 7 January, 2013 Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 1 / 20

Transcript of GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3....

Page 1: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GiMPy and GrUMPy: Visualization for Optimization inPython

Ted Ralphs1 Aykut Bulut1 Brady Hunsaker3

Michael O’Sullivan2 Osman Ozaltin4

1COR@L Lab, Department of Industrial and Systems Engineering, Lehigh University2Department of Engineering Science, University of Auckland

3Google4Department of Management Sciences, University of Walterloo

INFORMS Computing Society Conference, 7 January, 2013

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 1 / 20

Page 2: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GiMPy Overview

A graph class written in Python 2.7.

Depends on Pydot (and hence Graphviz) and Pygame.

Builds, displays, and saves graphs.

Focus is on visualization of well-known graph algorithms and use inthe classroom.

Priority in implementation is on clarity of the algorithms.Efficiency is not the goal (though we try to be as efficient as we can).

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 2 / 20

Page 3: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GiMPy Data Structure

Derived from Dot class of Pydot.

Pydot is an API for building graphs and printing them in Dot languageused by Graphviz.Graphviz provides the methods for layout and visualization.Graphviz produces images that can then either be displayed live orsaved.

GiMPy extends the API and adds the data structures and methodsneeded to implement graph algorithms.

The graph is stored in adjacency list format, but alternative datastructures can be easily added.

Includes a wide range of graph algorithms and more are being added.

Derived classes implement tree and binary tree.

Available open source through COIN-OR.

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 3 / 20

Page 4: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GiMPy Display Capabilities

Has all the display capabilities of Graphviz.

Can display graphs on a window or save to the disk in various formats.

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 4 / 20

Page 5: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GiMPy Example

from gimpy import Graph

if __name__==’__main__’:

g = Graph(display=’pygame’)

g.add_edge(0,1)

g.add_edge(1,2)

g.add_edge(3,4)

g.display()

g.search(0)

Figure : Resulting window

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 5 / 20

Page 6: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GIMPy Example

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 6 / 20

Page 7: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GiMPy Example

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 7 / 20

Page 8: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GiMPy Algorithm Visualization

from gimpy import Graph

if __name__==’__main__’:

g = Graph(display=’pygame’)

g.add_edge(0,1)

g.add_edge(1,2)

g.add_edge(3,4)

g.search()

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 8 / 20

Page 9: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GiMPy Algorithm Visualization

The following problem/algorithm pairs with similar visualization optionsexist.

Graph Search: BFS, DFS, Prim’s, Component Labeling, Dijkstra’s,Topological Sort.

Shortest path: Dijkstra’s, Label Correcting

Maximum flow: Augmenting Path, Preflow Push

Minimum spanning tree: Prim’s Algorithm, Kruskal Algorithm

Minimum Cost Flow: Network Simplex, Cycle Canceling

Data structures: Union-Find (quick union, quick find)

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 9 / 20

Page 10: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GiMPy Binary Tree

Tree class dervide from Graph class.

BinaryTree class dervide from Tree class.

Has binary tree specific API and attributes.

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 10 / 20

Page 11: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GrUMPy Overview

Visualizes branch and bound process.

Adds dynamic visualization to the Branch and Bound Analysis Kit(BAK).

Reads branch and bound data in a specific format.

Derived from BinaryTree of GiMPy.

Builds branch and bound binary tree.

Has all the analysis (search/visualization) capabilities of GiMPy.

Biggest advantage to all its predecessors is the capability to dovisualizations on the fly.

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 11 / 20

Page 12: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GrUMPy Branch and Bound Visualizations

There are four visualizations of BB tree provided by GrUMPy.

BB tree

Histogram

Scatter plot

Incumbent path

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 12 / 20

Page 13: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

from baktree import BAKTree

if __name__ == ’__main__’:

bt = BAKTree()

bt.set_display_mode(’pygame’)

line_number = 0

file_ = open(’p0201_GLPK.in’, ’r’)

for line in file_:

bt.ProcessLine(line)

line_number = line_number+1

if line_number%100 != 0:

continue

if bt.root is not None:

gnuplot_image = bt.GenerateTreeImage()

if gnuplot_image is not None:

bt.display_image(gnuplot_image)

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 13 / 20

Page 14: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GrIMPy BB Tree

Figure : BB tree generated by GrUMPy

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 14 / 20

Page 15: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GrUMPy Histogram

Figure : BB histogram generated by GrUMPy

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 15 / 20

Page 16: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GrUMPy Scatter Plot

Figure : Scatter plot generated by GrUMPy

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 16 / 20

Page 17: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GrUMPy Incumbent Path

Figure : Incumbent path generated by GrUMPy

Depends on scatterplot

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 17 / 20

Page 18: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

GrUMPy On the Fly

GrUMPy can read input from stdin.

By configuring the solver output you can make GrUMPy generatevisualizations as your problem is being solved.

GrUMPy reads stdin and updates binary tree and visualizations on thefly.

GrUMPy can be used on the fly with the following command.

solver problem | python baktree.py

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 18 / 20

Page 19: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

from baktree import BAKTree

import sys

if __name__ == ’__main__’:

bt = BAKTree()

bt.set_display_mode(’pygame’)

line_number = 0

file_ = open(’p0201_GLPK.in’, ’r’)

for line in sys.stdin:

bt.ProcessLine(line)

line_number = line_number+1

if line_number%100 != 0:

continue

if bt.root is not None:

bt.display_all()

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 19 / 20

Page 20: GiMPy and GrUMPy: Visualization for Optimization in Pythonted/files/talks/GrUMPy-ICS... · 2016. 3. 26. · GrUMPy can read input from stdin. By con guring the solver output you can

Wrap-up

The software is available and under active development.

Please try it and help us improve!

Ralphs, et al. (COR@L Lab) GiMPy/GrUMPy 20 / 20