'******************************************************** '* TIME PERT MODEL * '* * '* LIST OF MAIN VARIABLES: * '* * '* N : NUMBER OF ACTIVITIES * '* NA : NUMBER OF PRECEDING ACTIVITIES * '* D(N) : PROBABLE DURATION FOR EACH ACTIVITY * '* PRED(N) : INDEX OF PRECEDING ACTIVITIES * '* ANTE(NA) : PRECEDING ACTIVITIES OF EACH ACTIVITY * '* MARQ(2,N): ACTIVITY LEVEL * '* TOT(N) : SOONEST DATE FOR EACH ACTIVITY * '* TARD(N) : LATEST DATE FOR EACH ACTIVITY * '* DE : ESTIMATED DURATION * '* DOP : OPTIMISTIC DURATION (DO IS NOT VALID) * '* DP : PESSIMISTIC DURATION * '* ANTE : NUMBER OF PREVIOUS ACTIVITIES * '* K : NUMBER OF ACTIVITY LEVEL * '* R : USED TO SEEK A LEVEL * '* TOT : USED TO SEEK SOONEST DATE * '* TARD : USED TO SEEK LATEST DATE * '* FTA : LATEST ENDING DATE * '* FOT : SOONEST ENDING DATE * '* LO : MAXIMUM WIDTH OG GANT'S DIAGRAM * '* MAXT : PROBABLE MAXIMUM TIME * '* X : NORMALIZATION COEFFICIENT FOR GANT'S * '* DIAGRAM * '* Y : NUMBER OF UNITS FOR A SIGN * OR + IN * '* GANT'S DIAGRAM * '* ---------------------------------------------------- * '* PROBLEM DESCRIPTION: * '* A Company, owning one mainframe computer, wants to * '* buy and install a second one. Before a false floor * '* must be laid to hide connection cables, and an air- * '* conditioning unit must be put in. The activities to * '* perform are given in the following table (durations * '* in hours): * '* ------------------------------------------------- * '* Number Task Description Preceding DE DO DP * '* Activities * '* ------------------------------------------------- * '* 1 Set the Dates of * '* All the Tasks - 3 2 4 * '* 2 Install Electric * '* Connections 1 7 4 10 * '* 3 Install Air Condit. 2 16 8 24 * '* 4 Disconnect Old * '* Computer 2 4 2 6 * '* 5 Start New Air Cond. 3 2 1 3 * '* 6 Lay False Floor 3,4 24 16 32 * '* 7 Clean Up the Room 6 3 2 4 * '* 8 Install New Computer 5,7 16 8 24 * '* 9 --- 8 0 0 0 * '* ------------------------------------------------- * '* SAMPLE RUN: * '* TIME PERT MODEL * '* ACTIVITY DESCRIPTION * '* * '* NUMBER OF ACTIVITIES ? 9 * '* * '* NUMBER OF PRECEDING ACTIVITIES ? 11 * '* * '* ACTIVITY #1: * '* ESTIMATED DURATION ? 3 * '* OPTIMISTIC DURATION ? 2 * '* PESSIMISTIC DURATION ? 4 * '* NUMBER OF PRECEDING ACTIVITIES ? 0 * '* * '* ACTIVITY #2: * '* ESTIMATED DURATION ? 7 * '* OPTIMISTIC DURATION ? 4 * '* PESSIMISTIC DURATION ? 10 * '* NUMBER OF PRECEDING ACTIVITIES ? 1 * '* PREC. ACTIVITY #1 ? 1 * '* * '* ACTIVITY #3: * '* ESTIMATED DURATION ? 16 * '* OPTIMISTIC DURATION ? 8 * '* PESSIMISTIC DURATION ? 24 * '* NUMBER OF PRECEDING ACTIVITIES ? 1 * '* PREC. ACTIVITY #1 ? 2 * '* * '* ACTIVITY #4: * '* ESTIMATED DURATION ? 4 * '* OPTIMISTIC DURATION ? 2 * '* PESSIMISTIC DURATION ? 6 * '* NUMBER OF PRECEDING ACTIVITIES ? 1 * '* PREC. ACTIVITY #1 ? 2 * '* * '* ACTIVITY #5: * '* ESTIMATED DURATION ? 2 * '* OPTIMISTIC DURATION ? 1 * '* PESSIMISTIC DURATION ? 3 * '* NUMBER OF PRECEDING ACTIVITIES ? 1 * '* PREC. ACTIVITY #1 ? 3 * '* * '* ACTIVITY #6: * '* ESTIMATED DURATION ? 24 * '* OPTIMISTIC DURATION ? 16 * '* PESSIMISTIC DURATION ? 32 * '* NUMBER OF PRECEDING ACTIVITIES ? 2 * '* PREC. ACTIVITY #1 ? 3 * '* PREC. ACTIVITY #2 ? 4 * '* * '* ACTIVITY #7: * '* ESTIMATED DURATION ? 3 * '* OPTIMISTIC DURATION ? 2 * '* PESSIMISTIC DURATION ? 4 * '* NUMBER OF PRECEDING ACTIVITIES ? 1 * '* PREC. ACTIVITY #1 ? 6 * '* * '* ACTIVITY #8: * '* ESTIMATED DURATION ? 16 * '* OPTIMISTIC DURATION ? 8 * '* PESSIMISTIC DURATION ? 24 * '* NUMBER OF PRECEDING ACTIVITIES ? 2 * '* PREC. ACTIVITY #1 ? 5 * '* PREC. ACTIVITY #2 ? 7 * '* * '* ACTIVITY #9: * '* ESTIMATED DURATION ? 0 * '* OPTIMISTIC DURATION ? 0 * '* PESSIMISTIC DURATION ? 0 * '* NUMBER OF PRECEDING ACTIVITIES ? 1 * '* PREC. ACTIVITY #1 ? 8 * '* * '* TIME PERT MODEL * '* RESULTS * '* * '* CA = CRITICAL ACTIVITY * '* SBD = SOONEST BEGIN DATE * '* LBD = LATEST BEGIN DATE * '* SED = SOONEST END DATE * '* LED = LATEST END DATE * '* * '* ACTIVITY #1 PROBABLE DURATION: 3 * CA * * '* SBD = 0 LBD = 0 * '* SED = 3 LED = 3 * '* TOTAL MARGIN = 0 * '* * '* ACTIVITY #2 PROBABLE DURATION: 7 * CA * * '* SBD = 3 LBD = 3 * '* SED = 10 LED = 10 * '* TOTAL MARGIN = 0 * '* * '* ACTIVITY #3 PROBABLE DURATION: 16 * CA * * '* SBD = 10 LBD = 10 * '* SED = 26 LED = 26 * '* TOTAL MARGIN = 0 * '* * '* ANY KEY TO CONTINUE... ? * '* * '* ACTIVITY #4 PROBABLE DURATION: 4 * '* SBD = 10 LBD = 22 * '* SED = 14 LED = 26 * '* TOTAL MARGIN = 12 * '* * '* ACTIVITY #5 PROBABLE DURATION: 2 * '* SBD = 26 LBD = 51 * '* SED = 28 LED = 53 * '* TOTAL MARGIN = 25 * '* * '* ACTIVITY #6 PROBABLE DURATION: 24 * CA * * '* SBD = 26 LBD = 26 * '* SED = 50 LED = 50 * '* TOTAL MARGIN = 0 * '* * '* ANY KEY TO CONTINUE... ? * '* * '* ACTIVITY #7 PROBABLE DURATION: 3 * CA * * '* SBD = 50 LBD = 50 * '* SED = 53 LED = 53 * '* TOTAL MARGIN = 0 * '* * '* ACTIVITY #8 PROBABLE DURATION: 16 * CA * * '* SBD = 53 LBD = 53 * '* SED = 69 LED = 69 * '* TOTAL MARGIN = 0 * '* * '* ACTIVITY #9 PROBABLE DURATION: 0 * CA * * '* SBD = 69 LBD = 69 * '* SED = 69 LED = 69 * '* TOTAL MARGIN = 0 * '* * '* ANY KEY TO CONTINUE... ? * '* * '* GANT'S DIAGRAM * '* * '* THE SIGNS * OR + ARE WORTH 3 TIME UNITS * '* * '* ----------------------------------------- * '* * 3 * '* *** 10 * '* ******** 26 * '* **++++++ 26 * '* *++++++++++++ 53 * '* ************ 50 * '* * 53 * '* ******** 69 * '* ----------------------------------------- * '* * = PROBABLE DURATION + = TOTAL MARGIN * '* * '* ---------------------------------------------------- * '* REFERENCE: * '* Modèles pratiques de décision Tome 2, By Jean-Pierre * '* Blanger, PSI Editions, France, 1982. * '******************************************************** 'NOTE: PERT is an acronym for Program Evaluation & Review Technique. 'PROGRAM TPERT DEFINT I-N OPTION BASE 0 CLS GOSUB 2000 'DESCRIBE ACTIVITIES GOSUB 3000 'DETERMINE LEVEL GOSUB 4000 'SOONEST DATES GOSUB 5000 'LATEST DATES GOSUB 6000 'EDIT DATES GOSUB 7000 'GANT'S DIAGRAM END 2000 'DESCRIBE ACTIVITIES PRINT PRINT " TIME PERT MODEL" PRINT " ACTIVITY DESCRIPTION" PRINT INPUT " NUMBER OF ACTIVITIES "; N PRINT INPUT " NUMBER OF PRECEDING ACTIVITIES "; NA PRINT DIM D(N), PRED(N), ANTE(NA), MARQ(2, N), TOT(N), TARD(N) FOR I = 1 TO N PRINT " ACTIVITY #"; I; ":" INPUT " ESTIMATED DURATION "; DE INPUT " OPTIMISTIC DURATION "; DOP INPUT " PESSIMISTIC DURATION "; DP D(I) = INT(10 * (DOP + 4 * DE + DP) / 6) / 10 INPUT " NUMBER OF PRECEDING ACTIVITIES "; ANTE IF ANTE = 0 THEN ANTE = 1: GOTO 2200 FOR J = 1 TO ANTE PRINT " PREC. ACTIVITY #"; J; : INPUT ""; ANTE(PRED(I - 1) + J) NEXT J 2200 PRINT : PRED(I) = PRED(I - 1) + ANTE NEXT I PRINT PRINT " TIME PERT MODEL" PRINT " RESULTS" PRINT RETURN 3000 'Determine Level MARQ(2, 0) = 1 FOR I = 1 TO N K = K + 1 FOR J = 1 TO N IF MARQ(2, J) <> 0 THEN GOTO 3130 FOR R = PRED(J - 1) + 1 TO PRED(J) IF MARQ(2, ANTE(R)) = 0 THEN F = 1 NEXT R IF F = 1 THEN F = 0: GOTO 3130 FOR R = PRED(J - 1) + 1 TO PRED(I) MARQ(1, J) = K NEXT R 3130 NEXT J FOR J = 1 TO N IF MARQ(1, J) = K THEN MARQ(2, J) = K NEXT J NEXT I K = MARQ(2, 1) FOR I = 1 TO N IF MARQ(2, I) > K THEN K = MARQ(2, I) NEXT I RETURN 4000 'SOONEST DATES FOR I = 1 TO K FOR J = 1 TO N IF MARQ(2, J) <> I THEN GOTO 4090 FOR I1 = PRED(J - 1) + 1 TO PRED(J) TOT = INT(10 * (TOT(ANTE(I1)) + D(ANTE(I1)))) / 10 IF TOT(J) = 0 THEN TOT(J) = TOT IF TOT > TOT(J) THEN TOT(J) = TOT NEXT I1 4090 NEXT J NEXT I RETURN 5000 'LATEST DATES FOR I = 1 TO N IF MARQ(2, I) = K THEN TARD(I) = TOT(I): I = N NEXT I FOR I = K TO 1 STEP -1 FOR J = 1 TO N IF MARQ(2, J) <> I THEN GOTO 5120 FOR I1 = PRED(J - 1) + 1 TO PRED(J) TARD = INT(10 * (TARD(J) - D(ANTE(I1)))) / 10 IF TARD(ANTE(I1)) = 0 THEN TARD(ANTE(I1)) = TARD: GOTO 5110 END IF IF TARD(ANTE(I1)) > TARD THEN TARD(ANTE(I1)) = TARD 5110 NEXT I1 5120 NEXT J NEXT I RETURN 6000 'EDIT DATES PRINT " CA = CRITICAL ACTIVITY" PRINT " SBD = SOONEST BEGIN DATE" PRINT " LBD = LATEST BEGIN DATE" PRINT " SED = SOONEST END DATE" PRINT " LED = LATEST END DATE" PRINT FOR I = 1 TO N PRINT " ACTIVITY #"; I; " PROBABLE DURATION: "; D(I); FTA = TARD(I) + D(I): FOT = TOT(I) + D(I) XMT = TARD(I) - TOT(I) IF XMT = 0 THEN PRINT " * CA *": GOTO 6120 PRINT 6120 PRINT " SBD = "; TOT(I); " LBD = "; TARD(I) PRINT " SED = "; FOT; " LED = "; FTA PRINT " TOTAL MARGIN = "; XMT PRINT IF I / 3 <> INT(I / 3) OR I = N THEN GOTO 6190 INPUT " ANY KEY TO CONTINUE... "; R$ PRINT 6190 NEXT I INPUT " ANY KEY TO CONTINUE... "; R$ PRINT RETURN 7000 'GANT'S DIAGRAM XLO = 35: XMAXT = 0 PRINT " GANT'S DIAGRAM" PRINT FOR I = 1 TO N IF TOT(I) + D(I) > XMAXT THEN XMAXT = TOT(I) + D(I) NEXT I IF XMAXT < XLO THEN X = 1: GOTO 7100 X = INT(10 * XLO / XMAXT) / 10: Y = INT((XMAXT / XLO) / X) 7100 PRINT " THE SIGNS * OR + ARE WORTH"; Y; "TIME UNITS" PRINT FOR I = 1 TO XLO + 8: PRINT "-"; : NEXT I PRINT FOR I = 1 TO N - 1 L = INT(TOT(I) * X) FOR J = 1 TO L: PRINT " "; : NEXT J L = INT(D(I) * X): IF L = 0 THEN GOTO 7170 FOR J = 1 TO L: PRINT "*"; : NEXT J 7170 L = INT((TARD(I) - TOT(I)) * X) IF L = 0 THEN GOTO 7200 FOR J = 1 TO L: PRINT "+"; : NEXT J 7200 PRINT (TARD(I) + D(I)) NEXT I FOR I = 1 TO XLO + 8: PRINT "-"; : NEXT I PRINT " * = PROBABLE DURATION + = TOTAL MARGIN" PRINT RETURN 'end of file tpert.bas