Resource Constrained Scheduling (intpm5)
/****************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: INTPM5 */
/* TITLE: Resource Constrained Scheduling (intpm5) */
/* PRODUCT: OR */
/* SYSTEM: ALL */
/* KEYS: */
/* PROCS: CPM, GANTT, GPLOT */
/* DATA: */
/* */
/* SUPPORT: UPDATE: */
/* REF: Example 5 from the chapter, Introduction to Project */
/* Management. */
/* MISC: Scheduling Programming Tasks */
/* */
/****************************************************************/
data program;
format task $8. succ $8. ;
input task & succ & dur processor;
datalines;
Sort A Merge 1 5 1
Sort B Merge 1 4 1
Sort C Merge 1 3 1
Sort D Merge 2 6 1
Sort E Merge 2 4 1
Sort F Merge 2 6 1
Merge 1 Compare 5 1
Merge 2 Compare 4 1
Compare . 5 1
;
data resin;
input per processor;
datalines;
0 2
;
proc cpm data=program resin=resin
out=progschd resout=progrout;
activity task;
duration dur;
successor succ;
resource processor/per=per;
run;
title 'Scheduling Programming Tasks';
title2 'Data Set PROGSCHD';
proc print data=progschd;
run;
title2 'Data Set PROGROUT';
proc print data=progrout;
run;
pattern1 c=green v=s; /* duration of a non-critical activity */
pattern2 c=green v=e; /* slack time for a noncrit. activity */
pattern3 c=red v=s; /* duration of a critical activity */
pattern4 c=magenta v=e; /* slack time for a supercrit. activity */
pattern5 c=magenta v=s; /* duration of a supercrit. activity */
pattern6 c=cyan v=s; /* actual duration of an activity */
pattern7 c=black v=e; /* break due to a holiday */
pattern8 c=blue v=s; /* resource schedule of activity */
goptions hpos=80 vpos=43;
title h=2.5 'Scheduling Programming Tasks';
title2 h=1.5 'Comparison of Schedules';
proc gantt data=progschd graphics;
chart / height=1.5 increment=2 caxis=black;
id task;
run;
/* Create a data set for use with PROC GPLOT */
data plotout;
set progrout;
label _time_='Time of Usage';
label processor='Number of Processors';
label resource='Type of Schedule Followed';
resource='Constrained';
processor=rprocessor; output;
resource='Early Start';
processor=eprocessor; output;
run;
axis1 minor=none width=3;
axis2 length=80 pct;
symbol1 i=steplj c=red;
symbol2 i=steplj l=3 c=green;
title2 h=1.5 'Comparison of Processor Usage';
proc gplot data=plotout;
plot processor * _time_ = resource/ vaxis=axis1
haxis=axis2
caxis=black;
run;