Example 2.23: Resource Driven Durations and Resource Calendars
This example illustrates the effect of resource driven durations and resource
calendars on the schedule of a project involving multiple resources.
In projects that use manpower as a resource,
the same activity may require different amounts of work from different
people. Also, the work schedules and vacations may differ for each
individual person. All of these factors may cause the schedules for
the different resources used by the activity to differ from each other.
Consider a software project requiring two resources: a programmer and
a tester. A network diagram displaying the activities and their
precedence relationships is shown in Figure 2.8.
Figure 2.8: Software Project Network
Some of the activities in this project have a fixed duration,
requiring the
same length of time from both resources; others require a different
number of days from the programmer and the tester. Further, some
activities require only a fraction of the resource; for example,
`Documentation' requires only 20 percent of the programmer's time
for a total of two man-days.
The activities in the project, their durations (if fixed) in days,
the total work required (if resource-driven) in days, the precedence
constraints, and the resource requirements are displayed in Output 2.23.1.
Output 2.23.1: Project Data
Software Development |
Activity Data Set SOFTWARE |
Activity |
act |
s1 |
s2 |
dur |
mandays |
progrmr |
tester |
Plans & Reqts |
1 |
2 |
3 |
2 |
. |
1.0 |
1.0 |
Product Design |
2 |
4 |
5 |
. |
3 |
1.0 |
. |
Product Design |
2 |
. |
. |
. |
1 |
. |
1.0 |
Test Plan |
3 |
6 |
7 |
3 |
. |
. |
1.0 |
Documentation |
4 |
9 |
. |
. |
2 |
0.2 |
. |
Documentation |
4 |
. |
. |
. |
1 |
. |
0.5 |
Code |
5 |
8 |
. |
10 |
. |
0.8 |
. |
Test Data |
6 |
8 |
. |
5 |
. |
. |
0.5 |
Test Routines |
7 |
8 |
. |
5 |
. |
. |
0.5 |
Test Product |
8 |
9 |
. |
6 |
. |
0.5 |
1.0 |
Finish |
9 |
. |
. |
0 |
. |
. |
. |
|
The following statements invoke PROC CPM with a WORK= specification on
the RESOURCE statement, which identifies (in number of man-days, in
this case) the amount of work required from each resource used by an
activity. If the WORK variable has a
missing value, the activity in that observation is assumed to have
a fixed duration. The project is scheduled to start on April 11, 1994,
and the activities are assumed to follow a five-day work week.
Unlike fixed-duration scheduling, each resource used by an activity
could have a different schedule; an activity is assumed to be
finished only when all of its resources have finished working on it.
proc cpm data=software out=sftout ressched=rsftout
date='11apr94'd interval=weekday resout=rout;
act act;
succ s1 s2;
dur dur;
res progrmr tester / work=mandays
rschedid=Activity;
id Activity;
run;
The individual resource schedules, as well as each activity's
combined schedule, are saved in a Resource Schedule data set,
RSFTOUT,
requested by the RESSCHED= option on the CPM statement. This output
data set (displayed in Output 2.23.2)
is very similar to the Schedule data set and
contains the activity variable and all the relevant schedule
variables (E_START, E_FINISH, L_START,
and so forth).
Output 2.23.2: Resource Schedule Data Set
Software Development |
Resource Schedule Data Set RSFTOUT |
Activity |
act |
RESOURCE |
DUR_TYPE |
dur |
mandays |
R_RATE |
E_START |
E_FINISH |
L_START |
L_FINISH |
Plans & Reqts |
1 |
|
|
2 |
. |
. |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
Plans & Reqts |
1 |
progrmr |
FIXED |
2 |
. |
1.0 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
Plans & Reqts |
1 |
tester |
FIXED |
2 |
. |
1.0 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
Product Design |
2 |
|
|
3 |
. |
. |
13APR94 |
15APR94 |
13APR94 |
15APR94 |
Product Design |
2 |
progrmr |
RDRIVEN |
3 |
3 |
1.0 |
13APR94 |
15APR94 |
13APR94 |
15APR94 |
Product Design |
2 |
tester |
RDRIVEN |
1 |
1 |
1.0 |
13APR94 |
13APR94 |
15APR94 |
15APR94 |
Test Plan |
3 |
|
|
3 |
. |
. |
13APR94 |
15APR94 |
20APR94 |
22APR94 |
Test Plan |
3 |
tester |
FIXED |
3 |
. |
1.0 |
13APR94 |
15APR94 |
20APR94 |
22APR94 |
Documentation |
4 |
|
|
10 |
. |
. |
18APR94 |
29APR94 |
26APR94 |
09MAY94 |
Documentation |
4 |
progrmr |
RDRIVEN |
10 |
2 |
0.2 |
18APR94 |
29APR94 |
26APR94 |
09MAY94 |
Documentation |
4 |
tester |
RDRIVEN |
2 |
1 |
0.5 |
18APR94 |
19APR94 |
06MAY94 |
09MAY94 |
Code |
5 |
|
|
10 |
. |
. |
18APR94 |
29APR94 |
18APR94 |
29APR94 |
Code |
5 |
progrmr |
FIXED |
10 |
. |
0.8 |
18APR94 |
29APR94 |
18APR94 |
29APR94 |
Test Data |
6 |
|
|
5 |
. |
. |
18APR94 |
22APR94 |
25APR94 |
29APR94 |
Test Data |
6 |
tester |
FIXED |
5 |
. |
0.5 |
18APR94 |
22APR94 |
25APR94 |
29APR94 |
Test Routines |
7 |
|
|
5 |
. |
. |
18APR94 |
22APR94 |
25APR94 |
29APR94 |
Test Routines |
7 |
tester |
FIXED |
5 |
. |
0.5 |
18APR94 |
22APR94 |
25APR94 |
29APR94 |
Test Product |
8 |
|
|
6 |
. |
. |
02MAY94 |
09MAY94 |
02MAY94 |
09MAY94 |
Test Product |
8 |
progrmr |
FIXED |
6 |
. |
0.5 |
02MAY94 |
09MAY94 |
02MAY94 |
09MAY94 |
Test Product |
8 |
tester |
FIXED |
6 |
. |
1.0 |
02MAY94 |
09MAY94 |
02MAY94 |
09MAY94 |
Finish |
9 |
|
|
0 |
. |
. |
10MAY94 |
10MAY94 |
10MAY94 |
10MAY94 |
|
For each activity in the project, the Resource Schedule data set
contains the
schedule for the entire activity as well as the schedule for each
resource used by the activity. The variable RESOURCE identifies the
name of the resource to which the observation refers and has
missing values for observations that refer to the
entire activity's schedule. The value of the variable DUR_TYPE
indicates whether the resource drives the activity's duration (`RDRIVEN')
or not (`FIXED').
The DURATION variable,dur, indicates the duration of
the activity for the
resource identified in that observation.
For resources that are of the driving type, the WORK variable,
mandays, shows the total amount of work (in units of the INTERVAL
parameter) required by the
resource for the activity in that observation. The variable
R_RATE shows the rate of usage of the resource for the
relevant activity. Note that for
driving resources, the variable dur is computed as
(mandays / R_RATE).
A Gantt chart of the schedules for each resource is plotted in
Output 2.23.3.
Output 2.23.3: Software Project Schedule
The daily
utilization of the resources is also saved in a data set, ROUT,
displayed
in Output 2.23.4. The resource usage data set indicates that you need
more than one tester on some days with both the early schedule
(on the 13th, 18th, and 19th of April) and the late schedule
(on the 6th and 9th of May).
Output 2.23.4: Resource Usage Data
Software Development |
Resource Usage Data Set ROUT |
Obs |
_TIME_ |
Eprogrmr |
Lprogrmr |
Etester |
Ltester |
1 |
11APR94 |
1.0 |
1.0 |
1.0 |
1.0 |
2 |
12APR94 |
1.0 |
1.0 |
1.0 |
1.0 |
3 |
13APR94 |
1.0 |
1.0 |
2.0 |
0.0 |
4 |
14APR94 |
1.0 |
1.0 |
1.0 |
0.0 |
5 |
15APR94 |
1.0 |
1.0 |
1.0 |
1.0 |
6 |
18APR94 |
1.0 |
0.8 |
1.5 |
0.0 |
7 |
19APR94 |
1.0 |
0.8 |
1.5 |
0.0 |
8 |
20APR94 |
1.0 |
0.8 |
1.0 |
1.0 |
9 |
21APR94 |
1.0 |
0.8 |
1.0 |
1.0 |
10 |
22APR94 |
1.0 |
0.8 |
1.0 |
1.0 |
11 |
25APR94 |
1.0 |
0.8 |
0.0 |
1.0 |
12 |
26APR94 |
1.0 |
1.0 |
0.0 |
1.0 |
13 |
27APR94 |
1.0 |
1.0 |
0.0 |
1.0 |
14 |
28APR94 |
1.0 |
1.0 |
0.0 |
1.0 |
15 |
29APR94 |
1.0 |
1.0 |
0.0 |
1.0 |
16 |
02MAY94 |
0.5 |
0.7 |
1.0 |
1.0 |
17 |
03MAY94 |
0.5 |
0.7 |
1.0 |
1.0 |
18 |
04MAY94 |
0.5 |
0.7 |
1.0 |
1.0 |
19 |
05MAY94 |
0.5 |
0.7 |
1.0 |
1.0 |
20 |
06MAY94 |
0.5 |
0.7 |
1.0 |
1.5 |
21 |
09MAY94 |
0.5 |
0.7 |
1.0 |
1.5 |
22 |
10MAY94 |
0.0 |
0.0 |
0.0 |
0.0 |
|
Suppose now that you have only one tester and one programmer. You can
determine a resource-constrained schedule using PROC CPM (as in the
fixed duration case) by specifying a resource availability data set,
RESIN (Output 2.23.5).
Output 2.23.5: Resource Availability Data
Software Development |
Resource Availability Data Set |
Obs |
per |
otype |
progrmr |
tester |
1 |
11APR94 |
reslevel |
1 |
1 |
|
The following statements invoke PROC CPM, and the
resulting Resource Schedule data set is displayed in
Output 2.23.6.
Note that the project still finishes on May 10, but
some of the activities (3, 4, 6, and 7) are delayed. The
resource-constrained schedule is plotted on a Gantt chart
in Output 2.23.7; both resources
follow the same weekday calendar.
proc cpm data=software resin=resin
out=sftout1 resout=rout1
rsched=rsftout1
date='11apr94'd interval=weekday;
act act;
succ s1 s2;
dur dur;
res progrmr tester / work=mandays
obstype=otype
period=per
rschedid=Activity;
id Activity;
run;
Output 2.23.6: Resource-Constrained Schedule: Common Calendar
Software Development |
Resource Constrained Schedule: Common Resource Calendar |
Activity |
act |
_CAL_ |
RESOURCE |
DUR_TYPE |
dur |
mandays |
R_RATE |
S_START |
S_FINISH |
E_START |
E_FINISH |
L_START |
L_FINISH |
Plans & Reqts |
1 |
0 |
|
|
2 |
. |
. |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
Plans & Reqts |
1 |
0 |
progrmr |
FIXED |
2 |
. |
1.0 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
Plans & Reqts |
1 |
0 |
tester |
FIXED |
2 |
. |
1.0 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
Product Design |
2 |
0 |
|
|
3 |
. |
. |
13APR94 |
15APR94 |
13APR94 |
15APR94 |
13APR94 |
15APR94 |
Product Design |
2 |
0 |
progrmr |
RDRIVEN |
3 |
3 |
1.0 |
13APR94 |
15APR94 |
13APR94 |
15APR94 |
13APR94 |
15APR94 |
Product Design |
2 |
0 |
tester |
RDRIVEN |
1 |
1 |
1.0 |
13APR94 |
13APR94 |
13APR94 |
13APR94 |
15APR94 |
15APR94 |
Test Plan |
3 |
0 |
|
|
3 |
. |
. |
14APR94 |
18APR94 |
13APR94 |
15APR94 |
20APR94 |
22APR94 |
Test Plan |
3 |
0 |
tester |
FIXED |
3 |
. |
1.0 |
14APR94 |
18APR94 |
13APR94 |
15APR94 |
20APR94 |
22APR94 |
Documentation |
4 |
0 |
|
|
10 |
. |
. |
26APR94 |
09MAY94 |
18APR94 |
29APR94 |
26APR94 |
09MAY94 |
Documentation |
4 |
0 |
progrmr |
RDRIVEN |
10 |
2 |
0.2 |
26APR94 |
09MAY94 |
18APR94 |
29APR94 |
26APR94 |
09MAY94 |
Documentation |
4 |
0 |
tester |
RDRIVEN |
2 |
1 |
0.5 |
26APR94 |
27APR94 |
18APR94 |
19APR94 |
06MAY94 |
09MAY94 |
Code |
5 |
0 |
|
|
10 |
. |
. |
18APR94 |
29APR94 |
18APR94 |
29APR94 |
18APR94 |
29APR94 |
Code |
5 |
0 |
progrmr |
FIXED |
10 |
. |
0.8 |
18APR94 |
29APR94 |
18APR94 |
29APR94 |
18APR94 |
29APR94 |
Test Data |
6 |
0 |
|
|
5 |
. |
. |
19APR94 |
25APR94 |
18APR94 |
22APR94 |
25APR94 |
29APR94 |
Test Data |
6 |
0 |
tester |
FIXED |
5 |
. |
0.5 |
19APR94 |
25APR94 |
18APR94 |
22APR94 |
25APR94 |
29APR94 |
Test Routines |
7 |
0 |
|
|
5 |
. |
. |
19APR94 |
25APR94 |
18APR94 |
22APR94 |
25APR94 |
29APR94 |
Test Routines |
7 |
0 |
tester |
FIXED |
5 |
. |
0.5 |
19APR94 |
25APR94 |
18APR94 |
22APR94 |
25APR94 |
29APR94 |
Test Product |
8 |
0 |
|
|
6 |
. |
. |
02MAY94 |
09MAY94 |
02MAY94 |
09MAY94 |
02MAY94 |
09MAY94 |
Test Product |
8 |
0 |
progrmr |
FIXED |
6 |
. |
0.5 |
02MAY94 |
09MAY94 |
02MAY94 |
09MAY94 |
02MAY94 |
09MAY94 |
Test Product |
8 |
0 |
tester |
FIXED |
6 |
. |
1.0 |
02MAY94 |
09MAY94 |
02MAY94 |
09MAY94 |
02MAY94 |
09MAY94 |
Finish |
9 |
0 |
|
|
0 |
. |
. |
10MAY94 |
10MAY94 |
10MAY94 |
10MAY94 |
10MAY94 |
10MAY94 |
|
Output 2.23.7: Resource-Constrained Schedule
Now suppose that the tester switches to part-time employment,
working only four days a week. Thus, the two resources have
different calendars. To determine the effect this change has
on the project schedule, define a calendar data
set identifying calendar `1' as having a holiday on Friday
(see Output 2.23.8). In a new resource availability data set (also
displayed in Output 2.23.8), associate
calendar `1' with the resource tester and calendar
`0' with the resource progrmr. Note that `0' refers to
the default calendar,
which is the weekday calendar for this project (since INTERVAL =
WEEKDAY).
Output 2.23.8: Resource and Calendar Data
Software Development |
Calendar Data Set CALENDAR |
Obs |
_cal_ |
_fri_ |
1 |
1 |
holiday |
Obs |
per |
otype |
progrmr |
tester |
1 |
. |
calendar |
0 |
1 |
2 |
11APR94 |
reslevel |
1 |
1 |
|
Next, invoke PROC CPM, as shown in the following statements,
with the Activity, Resource, and
Calendar data sets to obtain the revised schedule, plotted in
Output 2.23.9. Note that the project is delayed by two days because of
the TESTER's shorter work week, which is illustrated by the longer
holiday breaks in the TESTER's schedule bars. The new
resource constrained schedule is displayed in Output 2.23.10.
proc cpm data=software resin=resin2
caledata=calendar
out=sftout2 rsched=rsftout2
resout=rout2
date='11apr94'd interval=weekday;
act act;
succ s1 s2;
dur dur;
res progrmr tester / work=mandays
obstype=otype
period=per
rschedid=Activity;
id Activity;
run;
Output 2.23.9: Resource-Constrained Schedule
Output 2.23.10: Resource-Constrained Schedule: Multiple Calendars
Software Development |
Resource Constrained Schedule: Multiple Resource Calendars |
Activity |
act |
_CAL_ |
RESOURCE |
DUR_TYPE |
dur |
mandays |
R_RATE |
S_START |
S_FINISH |
E_START |
E_FINISH |
L_START |
L_FINISH |
Plans & Reqts |
1 |
0 |
|
|
2 |
. |
. |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
Plans & Reqts |
1 |
0 |
progrmr |
FIXED |
2 |
. |
1.0 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
Plans & Reqts |
1 |
1 |
tester |
FIXED |
2 |
. |
1.0 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
11APR94 |
12APR94 |
Product Design |
2 |
0 |
|
|
3 |
. |
. |
13APR94 |
15APR94 |
13APR94 |
15APR94 |
13APR94 |
15APR94 |
Product Design |
2 |
0 |
progrmr |
RDRIVEN |
3 |
3 |
1.0 |
13APR94 |
15APR94 |
13APR94 |
15APR94 |
13APR94 |
15APR94 |
Product Design |
2 |
1 |
tester |
RDRIVEN |
1 |
1 |
1.0 |
13APR94 |
13APR94 |
13APR94 |
13APR94 |
14APR94 |
14APR94 |
Test Plan |
3 |
0 |
|
|
3 |
. |
. |
14APR94 |
19APR94 |
13APR94 |
18APR94 |
18APR94 |
20APR94 |
Test Plan |
3 |
1 |
tester |
FIXED |
3 |
. |
1.0 |
14APR94 |
19APR94 |
13APR94 |
18APR94 |
18APR94 |
20APR94 |
Documentation |
4 |
0 |
|
|
10 |
. |
. |
28APR94 |
11MAY94 |
18APR94 |
29APR94 |
27APR94 |
10MAY94 |
Documentation |
4 |
0 |
progrmr |
RDRIVEN |
10 |
2 |
0.2 |
28APR94 |
11MAY94 |
18APR94 |
29APR94 |
27APR94 |
10MAY94 |
Documentation |
4 |
1 |
tester |
RDRIVEN |
2 |
1 |
0.5 |
28APR94 |
02MAY94 |
18APR94 |
19APR94 |
09MAY94 |
10MAY94 |
Code |
5 |
0 |
|
|
10 |
. |
. |
18APR94 |
29APR94 |
18APR94 |
29APR94 |
18APR94 |
29APR94 |
Code |
5 |
0 |
progrmr |
FIXED |
10 |
. |
0.8 |
18APR94 |
29APR94 |
18APR94 |
29APR94 |
18APR94 |
29APR94 |
Test Data |
6 |
0 |
|
|
5 |
. |
. |
20APR94 |
27APR94 |
19APR94 |
26APR94 |
21APR94 |
29APR94 |
Test Data |
6 |
1 |
tester |
FIXED |
5 |
. |
0.5 |
20APR94 |
27APR94 |
19APR94 |
26APR94 |
21APR94 |
28APR94 |
Test Routines |
7 |
0 |
|
|
5 |
. |
. |
20APR94 |
27APR94 |
19APR94 |
26APR94 |
21APR94 |
29APR94 |
Test Routines |
7 |
1 |
tester |
FIXED |
5 |
. |
0.5 |
20APR94 |
27APR94 |
19APR94 |
26APR94 |
21APR94 |
28APR94 |
Test Product |
8 |
0 |
|
|
6 |
. |
. |
03MAY94 |
11MAY94 |
02MAY94 |
10MAY94 |
02MAY94 |
10MAY94 |
Test Product |
8 |
0 |
progrmr |
FIXED |
6 |
. |
0.5 |
03MAY94 |
10MAY94 |
02MAY94 |
09MAY94 |
03MAY94 |
10MAY94 |
Test Product |
8 |
1 |
tester |
FIXED |
6 |
. |
1.0 |
03MAY94 |
11MAY94 |
02MAY94 |
10MAY94 |
02MAY94 |
10MAY94 |
Finish |
9 |
0 |
|
|
0 |
. |
. |
12MAY94 |
12MAY94 |
11MAY94 |
11MAY94 |
11MAY94 |
11MAY94 |
|
Copyright © 1999 by SAS Institute Inc., Cary, NC, USA. All rights reserved.