applying linear optimization using glpk

Download Applying Linear Optimization Using GLPK

If you can't read please download the document

Upload: jeremy-chen

Post on 16-Apr-2017

4.436 views

Category:

Technology


0 download

TRANSCRIPT

Applying Linear Optimization Using GLPK

CCISDevt Sharing Session

Applying Linear OptimizationUsing GLPK

Outline

What is Linear Optimization?

What is GLPK?

Available Bindings

GNU MathProg Scripting

Examples:

Trans-shipment (the standard example)

Time Table Scheduling (from school days...)

Allocating HDB Flats by Combinatorial Auction

Linear Optimization? What?

The minimization of functions of the form

c1 x1 + c2 x2 + + cn xn

by varying decision variables xi,subject to constraints of the form

ai1 x1 + ai2 x2 + + ain xn = bi orai1 x1 + ai2 x2 + + ain xn bi

where the other coefficients aij, bi and ci are fixed.

Linear Optimization? What?

A typical example: The Diet Problem. By varying the intake of each type of food (e.g.: chicken rice, durian, cheese cake), minimize

(The Total Cost of Food)

subject to

(Non-negativity of the intakes of each type.)(Satisfaction of minimum nutritional requirements)

Linear Optimization? What?

A secondary school example. By varying decision variables x and y, maximize

2 x + y

subject to

x 0, x 1,y 0, y 1,x + y 1.5

Linear Optimization? What?

A secondary school example. By varying decision variables x and y, maximize

2 x + y

subject to

x 0, x 1,y 0, y 1,x + y 1.5

Linear Optimization? What?

A secondary school example. By varying decision variables x and y, maximize

2 x + y

subject to

x 0, x 1,y 0, y 1,x + y 1.5

Linear Optimization? What?

A secondary school example. By varying decision variables x and y, maximize

2 x + y

subject to

x 0, x 1,y 0, y 1,x + y 1.5

Linear Optimization? What?

A more useful sounding example: Simple Commodity Flow. By varying the number of TV sets being transferred along each road in a road network, minimize

(Total Distance each TV set is moved through)

subject to

(Non-negativity of the flows)(Sum of Inflows = Sum of Outflows at each junction where Stock counts as inflow & demand, outflow.)

Linear Optimization? What?

Perhaps one of the most widely used mathematical techniques:

Network flow / multi-commodity flow problems

Project Management

Production Planning, etc...

Used in Mixed Integer Linear Optimization for:

Airplane scheduling

Facility planning

Timetabling, etc...

Linear Optimization? What?

Solution methods:

Simplex-based algorithmsNon-polynomial-time algorithm

Performs much better in practice than predicted by theory

Interior-point methodsPolynomial-time algorithm

Also performs better in practice than predicted by theory

What is GLPK

GLPK: GNU Linear Programming Kit

An open-source, cross-platform software package for solving large-scale Linear Optimization and Mixed Integer Linear Optimization problems.

Comes bundled with the GNU MathProg scripting language for rapid development.

URL: http://www.gnu.org/software/glpk/

GUSEK (a useful front-end): http://gusek.sourceforge.net/gusek.html

Bindings for GLPK

GLPK bindings exist for:

C, C++ (with distribution)

Java (with distribution)

C#

Python, Ruby, Erlang

MATLAB, R

even Lisp.

(And probably many more.)

Scripting with GNU MathProg

For expressing optimization problems in a compact, human readable format.

Used to generate problems for computer solution.

Usable in production as problem generation is typically a small fraction of solution time and problem generation (in C/C++/Java/etc) via the API takes about as long.

Hence, rapid development as opposed to rapid prototyping.

Scripting with GNU MathProg

Parts of a script:

Model: Description of objective function and constraints to be satisfied

Data: Parameters that go into the model

Data can be acquired from a database (e.g. via ODBC).

Post processed solution can be written to a database.

Scripting with GNU MathProg

Model File (For choosing a meet-up date)

set Peoples;set Days;set Meals;... # PrefInd[...] defined herevar x{d in Days, m in Meals} binary;maximize Participation_and_Preference: sum{p in Peoples, d in Days, m in Meals} PrefInd[p,d,m]*x[d,m];s.t.one_meal: sum{d in Days, m in Meals} x[d,m] = 1;solve;... # Post-processing hereend;

Scripting with GNU MathProg

Data File (for the above model)

data;set Peoples := JC LZY FYN MJ;set Days := Mon Tue Wed Thu Fri Sat Sun;set Meals := Lunch Dinner;# Last element is 1 if preferred, 0 if otherwiseset Prefs := (JC, Mon, Dinner, 1),(JC, Tue, Dinner, 0),... # Rest of preference data;

end;

Scripting with GNU MathProg

Good student practice:

Decouple model from data (separate files)

Write script to generate data file from sources

Reasonable production practice

Decouple model from data

Acquire data from and write output to database

Abuse: Read statements can be used to write to the database (e.g.: a currently working flag)

Examples

Trans-shipment (the standard example)

A source to destination network flow problem

Data: Quantity at source, Demand at destination

Time Table Scheduling (from school days...)

Respect requirements, Maximize preference

Support alternate sessions and multiple time slots

A Combinatorial Auction for HDB Flat Allocation

Allocation and pricing of HDB flats

Efficiently solvable (Surprise!)

Example: Trans-shipment

Model File

set I;/* canning plants */param a{i in I};/* capacity of plant i */set J;/* markets */param b{j in J};/* demand at market j */param d{i in I, j in J};/* distance in thousands of miles */param f;/* freight in dollars per case per thousand miles */param c{i in I, j in J} := f * d[i,j] / 1000;/* transport cost */var x{i in I, j in J} >= 0;/* shipment quantities in cases */minimize cost: sum{i in I, j in J} c[i,j] * x[i,j]; /* total costs */s.t. supply{i in I}: sum{j in J} x[i,j] = b[j];/* satisfy demand */solve;# < Post-processing code >end;

Example: Trans-shipment

Data File

data;set I := Seattle San-Diego;param a := Seattle 350San-Diego 600;

set J := New-York Chicago Topeka;param b := New-York 325Chicago 300Topeka 275;

param d :New-YorkChicagoTopeka :=Seattle2.51.71.8San-Diego2.51.81.4 ;

param f := 90;end;

Example: Trans-shipment

Sample Output

GLPK Simplex Optimizer, v4.476 rows, 6 columns, 18 non-zeros...OPTIMAL SOLUTION FOUND***************************************************POST SOLVE(Post-processed Output)************************************************Flow[ Seattle -> New-York ] = 50.000000Flow[ Seattle -> Chicago ] = 300.000000Flow[ Seattle -> Topeka ] = 0.000000Flow[ San-Diego -> New-York ] = 275.000000Flow[ San-Diego -> Chicago ] = 0.000000Flow[ San-Diego -> Topeka ] = 275.000000

Example: Trans-shipment

Using ODBC as a Data Source

table tbl_plants IN 'ODBC' 'dsn=demo_tpt' 'plants' :I