Chapter Contents
Chapter Contents
Previous
Previous
Next
Next
The INTPOINT Procedure

Example 4.1: Production, Inventory, Distribution Problem

The following code shows how to save a specific problem's data in data sets and solve the model with PROC INTPOINT:

   title 'Production Planning/Inventory/Distribution';
   title2 'Minimum Cost Flow problem';
   title3;
   data node0;
      input _node_ $ _supdem_ ;
      datalines;
   fact1_1   1000
   fact2_1    850
   fact1_2   1000
   fact2_2   1500
   shop1_1   -900
   shop2_1   -900
   shop1_2   -900
   shop2_2  -1450
   ;
   data arc0;
      input _tail_ $ _head_ $ _cost_ _capac_ _lo_ diagonal factory
            key_id $10. mth_made $ _name_&$17. ;
      datalines;
   fact1_1  f1_mar_1  127.9  500 50 19 1 production March prod f1 19 mar
   fact1_1  f1_apr_1   78.6  600 50 19 1 production April prod f1 19 apl
   fact1_1  f1_may_1   95.1  400 50 19 1 production May   .
   f1_mar_1 f1_apr_1   15     50  . 19 1 storage    March .
   f1_apr_1 f1_may_1   12     50  . 19 1 storage    April .
   f1_apr_1 f1_mar_1   28     20  . 19 1 backorder  April back f1 19 apl
   f1_may_1 f1_apr_1   28     20  . 19 1 backorder  May   back f1 19 may
   f1_mar_1 f2_mar_1   11      .  . 19 . f1_to_2    March .
   f1_apr_1 f2_apr_1   11      .  . 19 . f1_to_2    April .
   f1_may_1 f2_may_1   16      .  . 19 . f1_to_2    May   .
   f1_mar_1 shop1_1  -327.65 250  . 19 1 sales      March .
   f1_apr_1 shop1_1  -300    250  . 19 1 sales      April .
   f1_may_1 shop1_1  -285    250  . 19 1 sales      May   .
   f1_mar_1 shop2_1  -362.74 250  . 19 1 sales      March .
   f1_apr_1 shop2_1  -300    250  . 19 1 sales      April .
   f1_may_1 shop2_1  -245    250  . 19 1 sales      May   .
   fact2_1  f2_mar_1   88.0  450 35 19 2 production March prod f2 19 mar
   fact2_1  f2_apr_1   62.4  480 35 19 2 production April prod f2 19 apl
   fact2_1  f2_may_1  133.8  250 35 19 2 production May   .
   f2_mar_1 f2_apr_1   18     30  . 19 2 storage    March .
   f2_apr_1 f2_may_1   20     30  . 19 2 storage    April .
   f2_apr_1 f2_mar_1   17     15  . 19 2 backorder  April back f2 19 apl
   f2_may_1 f2_apr_1   25     15  . 19 2 backorder  May   back f2 19 may
   f2_mar_1 f1_mar_1   10     40  . 19 . f2_to_1    March .
   f2_apr_1 f1_apr_1   11     40  . 19 . f2_to_1    April .
   f2_may_1 f1_may_1   13     40  . 19 . f2_to_1    May   .
   f2_mar_1 shop1_1  -297.4  250  . 19 2 sales      March .
   f2_apr_1 shop1_1  -290    250  . 19 2 sales      April .
   f2_may_1 shop1_1  -292    250  . 19 2 sales      May   .
   f2_mar_1 shop2_1  -272.7  250  . 19 2 sales      March .
   f2_apr_1 shop2_1  -312    250  . 19 2 sales      April .
   f2_may_1 shop2_1  -299    250  . 19 2 sales      May   .
   fact1_2  f1_mar_2  217.9  400 40 25 1 production March prod f1 25 mar
   fact1_2  f1_apr_2  174.5  550 50 25 1 production April prod f1 25 apl
   fact1_2  f1_may_2  133.3  350 40 25 1 production May   .
   f1_mar_2 f1_apr_2   20     40  . 25 1 storage    March .
   f1_apr_2 f1_may_2   18     40  . 25 1 storage    April .
   f1_apr_2 f1_mar_2   32     30  . 25 1 backorder  April back f1 25 apl
   f1_may_2 f1_apr_2   41     15  . 25 1 backorder  May   back f1 25 may
   f1_mar_2 f2_mar_2   23      .  . 25 . f1_to_2    March .
   f1_apr_2 f2_apr_2   23      .  . 25 . f1_to_2    April .
   f1_may_2 f2_may_2   26      .  . 25 . f1_to_2    May   .
   f1_mar_2 shop1_2  -559.76   .  . 25 1 sales      March .
   f1_apr_2 shop1_2  -524.28   .  . 25 1 sales      April .
   f1_may_2 shop1_2  -475.02   .  . 25 1 sales      May   .
   f1_mar_2 shop2_2  -623.89   .  . 25 1 sales      March .
   f1_apr_2 shop2_2  -549.68   .  . 25 1 sales      April .
   f1_may_2 shop2_2  -460.00   .  . 25 1 sales      May   .
   fact2_2  f2_mar_2  182.0  650 35 25 2 production March prod f2 25 mar
   fact2_2  f2_apr_2  196.7  680 35 25 2 production April prod f2 25 apl
   fact2_2  f2_may_2  201.4  550 35 25 2 production May   .
   f2_mar_2 f2_apr_2   28     50  . 25 2 storage    March .
   f2_apr_2 f2_may_2   38     50  . 25 2 storage    April .
   f2_apr_2 f2_mar_2   31     15  . 25 2 backorder  April back f2 25 apl
   f2_may_2 f2_apr_2   54     15  . 25 2 backorder  May   back f2 25 may
   f2_mar_2 f1_mar_2   20     25  . 25 . f2_to_1    March .
   f2_apr_2 f1_apr_2   21     25  . 25 . f2_to_1    April .
   f2_may_2 f1_may_2   43     25  . 25 . f2_to_1    May   .
   f2_mar_2 shop1_2  -567.83 500  . 25 2 sales      March .
   f2_apr_2 shop1_2  -542.19 500  . 25 2 sales      April .
   f2_may_2 shop1_2  -461.56 500  . 25 2 sales      May   .
   f2_mar_2 shop2_2  -542.83 500  . 25 2 sales      March .
   f2_apr_2 shop2_2  -559.19 500  . 25 2 sales      April .
   f2_may_2 shop2_2  -489.06 500  . 25 2 sales      May   .
   ;
   proc intpoint     
      bytes=1000000   
      printlevel2=2                                             
      nodedata=node0
      arcdata=arc0
      conout=arc1;
   run;

   proc print data=arc1; 
      var _from_ _to_ _cost_ _capac_ _lo_ _flow_ _fcost_ 
          diagonal factory key_id mth_made;
      sum _fcost_;
   run;

The following notes appear on the SAS log:

   NOTE: Number of nodes= 20 .
   NOTE: Number of supply nodes= 4 .
   NOTE: Number of demand nodes= 4 .
   NOTE: Total supply= 4350 , total demand= 4150 .
   NOTE: Number of arcs= 64 .
   NOTE: The following messages relate to the equivalent 
         Linear Program solved by the Interior Point algorithm.
   NOTE: Number of <= constraints= 0 .
   NOTE: Number of == constraints= 21 .
   NOTE: Number of >= constraints= 0 .
   NOTE: Number of constraint coefficients= 136 .
   NOTE: Number of variables= 68 .
   NOTE: 0 columns, 0 rows and 0 coefficients were added to the
         problem to handle unrestricted variables, variables that are 
         split, and constraint slack or surplus variables.
   NOTE: There are 54 nonzero elements in A * A transpose.
   NOTE: Of the 21 rows and columns, 14 are sparse.
   NOTE: There are 59 nonzero superdiagonal elements in the sparse
         rows of the factored A * A transpose. This includes fill-in.
   NOTE: There are 80 operations of the form u[i,j]=u[i,j]-u[q,j]*u[q,i]/u[q,q] 
         to factorize the  sparse rows of A * A transpose.
Iter Complem_aff Complem-ity  Duality_gap Tot_infeasb  Tot_infeasc Tot_infeasd
   0   -1.000000   167086681     0.835362       52835        26238       34922
   1    35446536    17335378     0.912917 1663.290349   825.996205           0
   2     1957002      878825     0.416636           0 1.956907E-12           0
   3      550439      237247     0.155174           0            0           0
   4      126652       53958     0.039021           0            0           0
   5       27526       18386     0.013499           0            0           0
   6 9153.811245 3029.529789     0.002242           0            0           0
   7  905.846996  614.526357     0.000455           0            0           0
   8  219.526873   73.592013  0.000054542           0            0           0
   9   11.383058    2.111334  0.000001565           0            0           0
  10    0.089558    0.000361 2.672549E-10           0            0           0
   NOTE: Primal-Dual Predictor-Corrector Interior point algorithm performed 10 iterations.
   NOTE: Objective = -1281110.35.
   NOTE: The data set WORK.ARC1 has 64 observations and 18 variables.
   NOTE: There were 64 observations read from the data set WORK.ARC0.
   NOTE: There were 8 observations read from the data set WORK.NODE0.
   NOTE: The data set WORK.ARC1 has 64 observations and 18 variables.
The solution is given in the CONOUT=arc1 data sets. In the CONOUT= data set, shown in Output 4.1.1, the variables diagonal, factory, key_id, and mth_made form an implicit ID list. The diagonal variable has one of two values, 19 or 25. factory also has one of two values, 1 or 2, to denote the factory where either production or storage occurs, from where TVs are either sold to shops or satisfy back-orders. production, storage, sales, and backorder are values of the key_id variable.

Other values of this variable, f1_to_2 and f2_to_1, are used when flow through arcs represents the transportation of TVs between factories. The mth_made variable has values March, April, and May, the months when TVs that are modeled as flow through an arc were made (assuming that no televisions are stored for more than one month and none manufactured in May are used to fill March back-orders).

These ID variables can be used after the PROC INTPOINT run to produce reports and perform analysis on particular parts of the company's operation. For example, reports can be generated for production numbers for each factory; optimal sales figures for each shop; and how many TVs should be stored, used to fill back-orders, sent to the other factory, or any combination of these, for TVs with a particular screen, those produced in a particular month, or both.

Output 4.1.1: CONOUT=ARC1
 
Production Planning/Inventory/Distribution
Minimum Cost Flow problem

Obs _tail_ _head_ _cost_ _capac_ _lo_ _FLOW_ _FCOST_ diagonal factory key_id mth_made
1 fact1_1 f1_apr_1 78.60 600 50 600.000 47160.00 19 1 production April
2 f1_mar_1 f1_apr_1 15.00 50 0 0.000 0.00 19 1 storage March
3 f1_may_1 f1_apr_1 28.00 20 0 0.000 0.00 19 1 backorder May
4 f2_apr_1 f1_apr_1 11.00 40 0 0.000 0.00 19 . f2_to_1 April
5 fact1_2 f1_apr_2 174.50 550 50 550.000 95975.00 25 1 production April
6 f1_mar_2 f1_apr_2 20.00 40 0 0.000 0.00 25 1 storage March
7 f1_may_2 f1_apr_2 41.00 15 0 15.000 615.00 25 1 backorder May
8 f2_apr_2 f1_apr_2 21.00 25 0 0.000 0.00 25 . f2_to_1 April
9 fact1_1 f1_mar_1 127.90 500 50 345.000 44125.49 19 1 production March
10 f1_apr_1 f1_mar_1 28.00 20 0 20.000 560.00 19 1 backorder April
11 f2_mar_1 f1_mar_1 10.00 40 0 40.000 400.00 19 . f2_to_1 March
12 fact1_2 f1_mar_2 217.90 400 40 400.000 87160.00 25 1 production March
13 f1_apr_2 f1_mar_2 32.00 30 0 30.000 960.00 25 1 backorder April
14 f2_mar_2 f1_mar_2 20.00 25 0 25.000 500.00 25 . f2_to_1 March
15 fact1_1 f1_may_1 95.10 400 50 50.000 4755.01 19 1 production May
16 f1_apr_1 f1_may_1 12.00 50 0 50.000 600.00 19 1 storage April
17 f2_may_1 f1_may_1 13.00 40 0 0.000 0.00 19 . f2_to_1 May
18 fact1_2 f1_may_2 133.30 350 40 40.000 5332.00 25 1 production May
19 f1_apr_2 f1_may_2 18.00 40 0 0.000 0.00 25 1 storage April
20 f2_may_2 f1_may_2 43.00 25 0 0.000 0.00 25 . f2_to_1 May
21 f1_apr_1 f2_apr_1 11.00 99999999 0 30.000 330.00 19 . f1_to_2 April
22 fact2_1 f2_apr_1 62.40 480 35 480.000 29952.00 19 2 production April
23 f2_mar_1 f2_apr_1 18.00 30 0 0.000 0.00 19 2 storage March
24 f2_may_1 f2_apr_1 25.00 15 0 0.000 0.00 19 2 backorder May
25 f1_apr_2 f2_apr_2 23.00 99999999 0 0.000 0.00 25 . f1_to_2 April
26 fact2_2 f2_apr_2 196.70 680 35 680.000 133756.00 25 2 production April
27 f2_mar_2 f2_apr_2 28.00 50 0 0.000 0.00 25 2 storage March
28 f2_may_2 f2_apr_2 54.00 15 0 15.000 810.00 25 2 backorder May
29 f1_mar_1 f2_mar_1 11.00 99999999 0 0.000 0.00 19 . f1_to_2 March
30 fact2_1 f2_mar_1 88.00 450 35 290.000 25520.00 19 2 production March
31 f2_apr_1 f2_mar_1 17.00 15 0 0.000 0.00 19 2 backorder April
32 f1_mar_2 f2_mar_2 23.00 99999999 0 0.000 0.00 25 . f1_to_2 March
33 fact2_2 f2_mar_2 182.00 650 35 645.000 117390.00 25 2 production March
34 f2_apr_2 f2_mar_2 31.00 15 0 0.000 0.00 25 2 backorder April
35 f1_may_1 f2_may_1 16.00 99999999 0 100.000 1600.00 19 . f1_to_2 May
36 fact2_1 f2_may_1 133.80 250 35 35.000 4683.00 19 2 production May
37 f2_apr_1 f2_may_1 20.00 30 0 15.000 300.00 19 2 storage April
38 f1_may_2 f2_may_2 26.00 99999999 0 0.000 0.00 25 . f1_to_2 May
39 fact2_2 f2_may_2 201.40 550 35 35.000 7049.00 25 2 production May
40 f2_apr_2 f2_may_2 38.00 50 0 0.000 0.00 25 2 storage April
41 f1_mar_1 shop1_1 -327.65 250 0 155.000 -50785.73 19 1 sales March
42 f1_apr_1 shop1_1 -300.00 250 0 250.000 -75000.00 19 1 sales April
43 f1_may_1 shop1_1 -285.00 250 0 0.000 0.00 19 1 sales May
44 f2_mar_1 shop1_1 -297.40 250 0 250.000 -74350.00 19 2 sales March
45 f2_apr_1 shop1_1 -290.00 250 0 245.000 -71050.02 19 2 sales April
46 f2_may_1 shop1_1 -292.00 250 0 0.000 0.00 19 2 sales May
47 f1_mar_2 shop1_2 -559.76 99999999 0 0.000 0.00 25 1 sales March
48 f1_apr_2 shop1_2 -524.28 99999999 0 0.000 0.00 25 1 sales April
49 f1_may_2 shop1_2 -475.02 99999999 0 25.000 -11875.50 25 1 sales May
50 f2_mar_2 shop1_2 -567.83 500 0 500.000 -283915.00 25 2 sales March
51 f2_apr_2 shop1_2 -542.19 500 0 375.000 -203321.25 25 2 sales April
52 f2_may_2 shop1_2 -461.56 500 0 0.000 0.00 25 2 sales May
53 f1_mar_1 shop2_1 -362.74 250 0 250.000 -90685.00 19 1 sales March
54 f1_apr_1 shop2_1 -300.00 250 0 250.000 -75000.00 19 1 sales April
55 f1_may_1 shop2_1 -245.00 250 0 0.000 0.00 19 1 sales May
56 f2_mar_1 shop2_1 -272.70 250 0 0.000 0.00 19 2 sales March
57 f2_apr_1 shop2_1 -312.00 250 0 250.000 -78000.00 19 2 sales April
58 f2_may_1 shop2_1 -299.00 250 0 150.000 -44850.00 19 2 sales May
59 f1_mar_2 shop2_2 -623.89 99999999 0 455.000 -283869.95 25 1 sales March
60 f1_apr_2 shop2_2 -549.68 99999999 0 535.000 -294078.80 25 1 sales April
61 f1_may_2 shop2_2 -460.00 99999999 0 0.000 0.00 25 1 sales May
62 f2_mar_2 shop2_2 -542.83 500 0 120.000 -65139.60 25 2 sales March
63 f2_apr_2 shop2_2 -559.19 500 0 320.000 -178940.80 25 2 sales April
64 f2_may_2 shop2_2 -489.06 500 0 20.000 -9781.20 25 2 sales May
              -1281110.35        

Chapter Contents
Chapter Contents
Previous
Previous
Next
Next
Top
Top

Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.