The INTPOINT Procedure

Example 2.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 _tail_ _head_ _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 Programming problem 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: After preprocessing, number of <= constraints= 0. 
    NOTE: After preprocessing, number of == constraints= 20. 
    NOTE: After preprocessing, number of >= constraints= 0. 
    NOTE: The preprocessor eliminated 1 constraints from the 
          problem. 
    NOTE: The preprocessor elimiated 9 constraint coefficients 
          from the problem. 
    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 48 nonzero elements in A * A transpose. 
    NOTE: Of the 20 rows and columns, 11 are sparse. 
    NOTE: There are 40 nonzero superdiagonal elements in the 
          sparse rows of the factored A * A transpose. This 
          includes fill-in. 
    NOTE: There are 49 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   169009903     0.835362       52835        25664       38005 
    1    36984291    17566249     0.914108 1649.363089   801.164462           0 
    2     1982553      866890     0.413012           0 1.461734E-12           0 
    3      542347      234381     0.153440           0            0           0 
    4      129900       52560     0.038044           0            0           0 
    5       25835       18168     0.013343           0            0           0 
    6 8923.214994 2976.020480     0.002203           0            0           0 
    7  928.231932  624.792307     0.000463           0            0           0 
    8  218.771392   74.386900  0.000055131           0            0           0 
    9   11.639195    2.197862  0.000001629           0            0           0 
   10    0.089160    0.000399 2.958631E-10           0            0           0 
    NOTE: The Primal-Dual Predictor-Corrector Interior Point 
          algorithm performed 10 iterations. 
    NOTE: Objective = -1281110.35. 
    NOTE: The data set WORK.ARC1 has 64 observations and 14 
          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.
 

The solution is given in the CONOUT=arc1 data sets. In the CONOUT= data set, shown in Output 2.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 used to satisfy backorders. 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 backorders).

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 backorders, 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 2.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.00 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.01 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        




Previous Page | Next Page | Top of Page