1 / 53

9

Chapter 3 Linear Programming Problems

Additional Topics

3.1 Basic Control Flow and Operators in the OPTMODEL Procedure

3.2 Model Updates in the OPTMODEL Procedure

3.3 Sensitivity Analysis and Parametric Programming (Self-Study)

3.4 Network Flow Models

9

Chapter 3 Linear Programming Problems

Additional Topics

3.1 Basic Control Flow and Operators in the OPTMODEL Procedure

3.2 Model Updates in the OPTMODEL Procedure

3.3 Sensitivity Analysis and Parametric Programming (Self-Study)

3.4 Network Flow Models

Objectives

- Program simple routines using PROC OPTMODEL as an

algebraic modeling language.

PROC OPTMODEL Programming Statements

- Control flow statements in PROC OPTMODEL should

be familiar to users of the SAS DATA step

assignment () CONTINUE DO (blocks) DO

(iterative) DO UNTIL DO WHILE FOR IF THEN IF

THEN ELSE LEAVE null () STOP

PROC OPTMODEL Programming Statements

- FOR iterates over the

members of an index set.

assignment () CONTINUE DO (blocks) DO

(iterative) DO UNTIL DO WHILE FOR IF THEN IF

THEN ELSE LEAVE null () STOP

num DistOrigins,Destinations num

LongCities, LatCities for i in Origins

for j in Destinations / calculate

Disti,j /

Task Calculate the distances between all origin

and destination locations.

PROC OPTMODEL Programming Statements

- FOR iterates over the

members of an index set.

assignment () CONTINUE DO (blocks) DO

(iterative) DO UNTIL DO WHILE FOR IF THEN IF

THEN ELSE LEAVE null () STOP

num DistOrigins,Destinations num

LongCities, LatCities for i in Origins

for j in Destinations / calculate

Disti,j /

(There is a distance formula if Long and Lat are

measured in radians.)

PROC OPTMODEL Programming Statements

- FOR iterates over the

members of an index set.

assignment () CONTINUE DO (blocks) DO

(iterative) DO UNTIL DO WHILE FOR IF THEN IF

THEN ELSE LEAVE null () STOP

num DistOrigins,Destinations num

LongCities, LatCities for i in Origins

do x1 Longi y1 Lati for j in

Destinations if (ij) then Disti,j0

else do x2 Longj y2 Latj

Disti,j arcos(sin(y1)sin(y2)

cos(y1)cos(y2)cos(x2-x1))3956 end

end

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

lt1,1gt lt3,1gt lt4,1gt lt5,1gt

lt1,2gt lt3,2gt lt6,2gt

lt2,3gt lt4,3gt

lt1,4gt lt2,4gt lt4,4gt lt5,4gt lt6,4gt

lt2,5gt lt3,5gt lt6,5gt

lt1,6gt lt3,6gt lt4,6gt

2 3 6

SLICE(lt ,5gt,SET)2,3,6

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

lt2,1gt lt3,1gt lt6,1gt

lt2,2gt lt3,2gt lt6,2gt

lt2,4gt lt3,4gt lt6,4gt

lt2,5gt lt3,5gt lt6,5gt

2 3 6

2,3,6 CROSS 1,2,4,5

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes Nodes unionlti,jgt in Arcs

i,j

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs and Paths of Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes set ltstr,strgt Paths Nodes

unionlti,jgt in Arcs i,j Paths ????

Task Find all nodes connected by paths.

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes set ltstr,strgt Paths Nodes

unionlti,jgt in Arcs i,j Paths Arcs

for n in Nodes Paths Paths union (

slice(lt,ngt,Paths) cross slice(ltn,gt,Paths)

)

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes set ltstr,strgt Paths Nodes

unionlti,jgt in Arcs i,j Paths Arcs

for n in Nodes Paths Paths union (

slice(lt,ngt,Paths) cross slice(ltn,gt,Paths)

)

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes set ltstr,strgt Paths Nodes

unionlti,jgt in Arcs i,j Paths Arcs

for n in Nodes Paths Paths union (

slice(lt,ngt,Paths) cross slice(ltn,gt,Paths)

)

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs and Paths

of Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes set ltstr,strgt Paths Nodes

unionlti,jgt in Arcs i,j Paths Arcs

for n in Nodes Paths Paths union (

slice(lt,ngt,Paths) cross slice(ltn,gt,Paths)

)

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs and Paths

of Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes set ltstr,strgt Paths Nodes

unionlti,jgt in Arcs i,j Paths Arcs

for n in Nodes Paths Paths union (

slice(lt,ngt,Paths) cross slice(ltn,gt,Paths)

)

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs and Paths

of Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes set ltstr,strgt Paths Nodes

unionlti,jgt in Arcs i,j Paths Arcs

for n in Nodes Paths Paths union (

slice(lt,ngt,Paths) cross slice(ltn,gt,Paths)

)

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs and Paths

of Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes set ltstr,strgt Paths Nodes

unionlti,jgt in Arcs i,j Paths Arcs

for n in Nodes Paths Paths union (

slice(lt,ngt,Paths) cross slice(ltn,gt,Paths)

)

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs and Paths

of Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes set ltstr,strgt Paths Nodes

unionlti,jgt in Arcs i,j Paths Arcs

for n in Nodes Paths Paths union (

slice(lt,ngt,Paths) cross slice(ltn,gt,Paths)

)

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs and Paths

of Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes set ltstr,strgt Paths Nodes

unionlti,jgt in Arcs i,j Paths Arcs

for n in Nodes Paths Paths union (

slice(lt,ngt,Paths) cross slice(ltn,gt,Paths)

)

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

B

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Network of Nodes and Arcs and Paths

of Arcs

C

A

D

E

set Arcs /ltA Bgt ltB Cgt ltC Dgt ltD Egt ltA Dgt/

set ltstrgt Nodes set ltstr,strgt Paths Nodes

unionlti,jgt in Arcs i,j Paths Arcs

for n in Nodes Paths Paths union (

slice(lt,ngt,Paths) cross slice(ltn,gt,Paths)

)

Computing Reachable Nodes Using PROC OPTMODEL

reachable.sas

- This demonstration illustrates some of the set

operations available in PROC OPTMODEL to find the

find all the nodes that are reachable by paths in

a simple network of nodes and arcs.

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

Productioni

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

Demandi

num T 5, Demand1..T var

Production1..T, Inventory1..T-1 con

Inventory_Balancei in 1..T Productioni

Demandi ????

Task Formulate balance constraints.

PROC OPTMODEL Set and Logical Operators

- PROC OPTMODEL defines new types of expressions

for the manipulation of sets, such as

aggregation operators.

AND CARD CROSS DIFF IF THEN ELSE INNOT

IN INTER MAXMIN OR PRODSUM SLICE SYMDIFF UNION W

ITHIN

num T 5, Demand1..T var

Production1..T, Inventory1..T-1 con

Inventory_Balancei in 1..T Productioni

Demandi if (i1) then

Inventory1 else if (iT) then

InventoryT-1 else Inventoryi

Inventoryi-1

Exercises 12

- These exercises reinforce the concepts discussed

previously.

9

Chapter 3 Linear Programming Problems

Additional Topics

3.1 Basic Control Flow and Operators in the OPTMODEL Procedure

3.2 Model Updates in the OPTMODEL Procedure

3.3 Sensitivity Analysis and Parametric Programming (Self-Study)

3.4 Network Flow Models

Objectives

- Understand how the presolver simplifies linear

programming problems. - Be able to modify a linear programming problem

(changing bounds or objective/constraint

coefficients, fixing variables, adding variables

or constraints) within the OPTMODEL procedure.

Automatic Updates The Presolver

- Before solving a mathematical programming

problem, the OPTMODEL presolver does the

following - processes linear constraints to tighten bounds on

variables - converts simple bound constraints to bounds on

variables - eliminates constraints that are implied by

variable bounds - eliminates variables whose values are fixed

OPTMODEL Presolver Example

- Suppose that these are the constraints of the

problem

2xy 6 2x7y 14 xy 5 x 0, y

0

OPTMODEL Presolver Example

- Suppose that these are the constraints of the

problem

2xy 6 x (6-y)/2 3 2x7y 14 y

(14-2x)/7 2 xy 5 x 0, y 0

OPTMODEL Presolver Example

- Suppose that these are the constraints of the

problem - (The constraint xy 5 is implied by the bounds.)

2xy 6 x (6-y)/2 3 2x7y 14 y

(14-2x)/7 2 xy 5 x 0, y 0

2xy 6 2x7y 14 0 x 3, 0 y

2

The OPTLP Presolver

- The LP solver has its own preprocessor, which can

further reduce the size of the problem

OPTMODEL/OPTLP Presolver Options

PROC OPTMODEL PRESOLVER option

SOLVE WITH LP / PRESOLVER option

Option Description

AUTOMATIC Default setting (between moderate and aggressive)

NONE Disable presolver

BASIC Remove empty constraints, substitute fixed variables

MODERATE A higher level of preprocessing

AGGRESSIVE Highest level of preprocessing

The PROC OPTMODEL and OPTLP Presolvers

product_mix.sas

- This demonstration illustrates the effect of the

PROC OPTMODEL and OPTLP presolvers on the organic

potting soils product mix problem.

Adding New Variables

- Recall Tables require 3 hours of labor, 1 pound

of metal, and 2 ft3 wood. Tables sell for 55.

The dual prices show that making tables is a

profitable activity - but how many should be produced?

set ltstrgt Products, Resources num

CostResources, AvailabilityResources num

Selling_PriceProducts num RequirementsResour

ces,Products Products Products union

/tables/

Model Updates Adding New Variables

- Recall Tables require 3 hours of labor, 1 pound

of metal, and 2 ft3 wood. Tables sell for 55.

The dual prices show that making tables is a

profitable activity - but how many should be produced?

set ltstrgt Products, Resources num

CostResources, AvailabilityResources num

Selling_PriceProducts num RequirementsResour

ces,Products Products Products union

/tables/ Selling_Price'tables'55

Requirements'labor','tables'3

Requirements'metal','tables'1

Requirements'wood','tables'2

Reading Data for New Variables

- SAS Data Set Work.New_Products

Product Selling_Price labor metal wood

1 tables 55 3 1 2

set ltstrgt Products, Resources num

CostResources, AvailabilityResources num

Selling_PriceProducts num RequirementsResour

ces,Products Products Products union

/tables/ read data New_Products into

Product Selling_Price r in Resources

ltRequirementsr,Productcol(r)gt

Adding a New Variable to an LP in PROC OPTMODEL

furniture_tables.sas

- This demonstration illustrates a simple way to

add a new variable to a linear programming

problem in PROC OPTMODEL.

Changing Variable/Constraint Bounds

- In the McDonalds diet problem, suppose you want

to add the restriction that at most two of each

item can be included in the diet. - Upper and lower bounds for variables and

constraints can be modified and/or read from SAS

data sets. - Objective and constraint coefficients can also be

modified, unless their values are assigned in a

declaration statement.

for j in Food xj.ub 2

Fixing/Unfixing Variables

- What is the minimum cost diet with a Big Mac?
- The syntax is

fix x'Big Mac' 1

FIX identifier-list ( expression )

Fixing/Unfixing Variables

- What is the minimum cost diet with a Big Mac?
- The syntax is
- The effect can be reversed

fix x'Big Mac' 1

FIX identifier-list ( expression )

UNFIX identifier-list ( expression )

Dropping/Restoring Constraints

- How much will the cost of the optimal diet

decrease if there is no limit on sodium? - The effect can be reversed with similar syntax

drop Diet'Sodium'

DROPRESTORE identifier-expression

Dropping/Restoring Constraints

- How much will the cost of the optimal diet

decrease if there is no limit on sodium? - The effect can be reversed with similar syntax
- What will these statements do?

drop Diet'Sodium'

DROPRESTORE identifier-expression

drop Diet restore Diet'Cal'

Diet'Protein'

Adding Constraints

- Some ad hoc constraints would make the McDonalds

diet problem more realistic - Limit sauces by the number/size of McNuggets

ordered (2 for 6 pieces 3 for 9 pieces 6 for 20

pieces). - Limit salad dressings and toppings by the number

of salads ordered. - Require one drink per meal.
- At most 30 of the calories should be from fat

(RDA requirement).

Re-optimizing in PROC OPTMODEL

- For many of these updates, it is more efficient

to re-optimize, starting from the previous

optimal solution

2D LP

Re-optimizing in PROC OPTMODEL

- For many of these updates, it is more efficient

to re-optimize, starting from the previous

optimal solution

Re-optimizing (Primal Simplex)

3D LP

2D LP

The BASISWARMSTART Option

- To re-optimize, the presolvers should be disabled

and the primal or dual simplex solver called - When the optimal solution is feasible for the new

problem (adding variables, changing objective)

use the primal simplex otherwise (changing

bounds, adding constraints), use the dual

simplex.

PROC OPTMODEL PRESOLVERNONE SOLVE

WITH LP / BASIS WARMSTART PRESOLVERNONE

SOLVERPSDS

Bogus OPTMODEL Program Structure

- What is wrong with this OPTMODEL program

structure?

proc optmodel presolvernone / declare

sets and parameters / / declare variables

/ / declare constraints / for j

in index-set do / declare objective

/ solve with lp / basiswarmstart

presolvernone / print

solution / end quit

Corrected OPTMODEL Program Structure

proc optmodel presolvernone / declare

sets and parameters / / declare variables

/ / declare constraints / /

declare objective / for j in index-set

do parameter j solve with lp

/ basiswarmstart

presolvernone / print solution /

end quit

Re-Optimizing the McDonalds Diet Problem

in PROC OPTMODEL mcdonalds_reopt.sas

- This demonstration illustrates how PROC OPTMODEL

can be used to re-optimize after making various

updates to the McDonalds diet problem.

Exercises 3-4

- These exercises reinforce the concepts discussed

previously.