+{Page}ProductionCost ! 6 Initializations /02/10/2003 00:51:35.391 !---------------------------------------- +{Object.1} ProductionCost.[1]WearParameters +{Trans} {nop.P}Trans:{&D.WearCoeff = 0.1; &D.WearExpon = 1.8} -{Trans} -{Object.1} ProductionCost.[1]WearParameters !---------------------------------------- +{Object.2} ProductionCost.[2]PiecesRequired REAL(KIND=dbl):: dblTimeAvailable REAL(KIND=dbl):: dblTimeAtBestRate +{Trans} dblTimeAtBestRate = #D.PiecesRequired / &D.BestProductionRate dblTimeAvailable = Uniform(&D.JitRangeLo,&D.JitRangeHi) #R.Batch = CustomerID() #D.JitTime = Time() + dblTimeAvailable !----- WRITE(21,*)"++Conceptual clock:",Time(), & " Machines in use are:",&R.MachinesInUse WRITE(21,*)" Planning batch",#R.Batch WRITE(21,*)" Just-in-time delivery time:",#D.JitTime WRITE(21,*)" Pieces to be delivered:",#D.PiecesRequired WRITE(21,*) WRITE(21,*)" Optimal production per hour:",&D.BestProductionRate WRITE(21,*)" Optimal production cost per piece:",&D.BestProductionCost WRITE(21,*) WRITE(21,*)" Time required at optimal rate:",dblTimeAtBestRate WRITE(21,*)" Time available for production:",dblTimeAvailable WRITE(21,*)" -----" !----- IF(dblTimeAtBestRate < dblTimeAvailable)THEN WRITE(21,*)" Sufficient time at optimal rate. Therefore..." #D.TimeToProduce = dblTimeAtBestRate ELSE WRITE(21,*)" Insufficient time at optimal rate. Therefore..." #D.TimeToProduce = dblTimeAvailable ENDIF !----- #D.PiecesPerHour = #D.PiecesRequired / #D.TimeToProduce #D.ProductionStartTime = MaxF(#D.JitTime - #D.TimeToProduce, 0.0_dbl) !----- WRITE(21,*)" Planned production per hour:",#D.PiecesPerHour WRITE(21,*)" Planned production start:",#D.ProductionStartTime WRITE(21,*)" Planned production duration:",#D.TimeToProduce WRITE(21,*)" Planned production finish:",#D.JitTime WRITE(21,*) !----- -{Trans} +{SignalTarget} IF(CustomerID() > 1)THEN {Signal.12} ELSE WRITE(9,*)"~~~No signal to a[12], since Customer ID is <=1" ENDIF &L.NextBatch = #R.Batch < &R.MaxBatches WRITE(9,*)"Create another batch request?",&L.NextBatch -{SignalTarget} -{Object.2} ProductionCost.[2]PiecesRequired !---------------------------------------- +{Object.3} ProductionCost.[3]MachineCostPerHour +{Trans} @D.CostPerHour = &D.WearCoeff * #D.PiecesPerHour ** &D.WearExpon WRITE(9,*)"&D.WearCoeff,#D.PiecesPerHour,&D.WearExpon,@D.CostPerHour" WRITE(9,*)&D.WearCoeff,#D.PiecesPerHour,&D.WearExpon,@D.CostPerHour -{Trans} -{Object.3} ProductionCost.[3]MachineCostPerHour !---------------------------------------- +{Object.4} ProductionCost.[4]LaborCostPerHour +{Trans} @D.CostPerHour = LookUp({t.D}LaborCosts,#D.PiecesPerHour,1) WRITE(9,*)"{cp.D}PiecesPerHour,@D.CostPerHour",#D.PiecesPerHour, & @D.CostPerHour -{Trans} -{Object.4} ProductionCost.[4]LaborCostPerHour !---------------------------------------- +{Object.5} ProductionCost.[5]BatchProduction +{Merging} {nop.P}Merging:{#D.CostPerHour = MergeSum(@D.CostPerHour)}... #D.CostPerPiece = #D.CostPerHour / #D.PiecesPerHour -{Merging} +{Trans} WRITE(9,*)"#D.CostPerHour,#D.CostPerPiece",#D.CostPerHour,#D.CostPerPiece @R.Batch = #R.Batch @D.PiecesRequired = #D.PiecesRequired @D.CostPerPiece = #D.CostPerPiece -{Trans} +{Duration} {nop.D}Duration={#D.TimeToProduce}... !----- &R.MachinesInUse = &R.MachinesInUse + 1 &R.MaxMachinesInUse = MaxF(&R.MaxMachinesInUse,&R.MachinesInUse) !----- -{Duration} +{SignalTarget} !----- &D.TotalAtOptimal = @D.PiecesRequired * &D.BestProductionCost &D.TotalAtActual = @D.PiecesRequired * @D.CostPerPiece &D.DeviationFromOpt = MaxF(&D.TotalAtActual - &D.TotalAtOptimal, 0.0_dbl) !----- &R.MachinesInUse = &R.MachinesInUse - 1 &R.BatchesRemaining = &R.BatchesRemaining - 1 !----- WRITE(21,*)REPEAT(" ",15)//"++Conceptual clock:",Time(), & " Machines in use were:",&R.MachinesInUse + 1 WRITE(21,*)REPEAT(" ",15)//" Cost of batch",@R.Batch WRITE(21,*)REPEAT(" ",15) & //" Per piece and total at optimal production rate:", & &D.BestProductionCost,&D.TotalAtOptimal WRITE(21,*)REPEAT(" ",15) & //" Per piece and total at actual production rate:", & @D.CostPerPiece,&D.TotalAtActual WRITE(21,*)REPEAT(" ",15) & //" Deviation from optimal total cost:",&D.DeviationFromOpt WRITE(21,*) !----- IF(&R.BatchesRemaining < 1)WRITE(21,*)"Maximum machines used:", & &R.MaxMachinesInUse !----- -{SignalTarget} -{Object.5} ProductionCost.[5]BatchProduction !---------------------------------------- +{Object.6} ProductionCost.[6]Initializations !INTEGER(KIND=big):: bigTknNew +{Trans} !----- CALL OpenTableFile(21,WithPath("PrimerSigTables.HTM")) CALL GetTable(21,{Table.D}CostPerPieceInputs) CALL GetTable(21,{Table.D}LaborCosts) CALL GetTable(21,{Table.D}Widgets) CLOSE(21) !----- OPEN(21,FILE=WithPath("PrSbNtResults.TXT"),ACTION='WRITE') !----- &D.AWidgetsLo = {t.D}Widgets(1,1) &D.AWidgetsML = {t.D}Widgets(1,2) &D.AWidgetsHi = {t.D}Widgets(1,3) !----- &D.BWidgetsLo = {t.D}Widgets(2,1) &D.BWidgetsML = {t.D}Widgets(2,2) &D.BWidgetsHi = {t.D}Widgets(2,3) !----- &D.JitRangeLo = {t.D}Widgets(3,1) &D.JitRangeHi = {t.D}Widgets(3,2) !----- &D.TimeBetweenRequests = {t.D}Widgets(4,1) &D.BestProductionRate = {t.D}Widgets(5,1) !Per hour &D.BestProductionCost = {t.D}Widgets(6,1) !Per piece &R.MaxBatches = {t.D}Widgets(7,1) !----- &R.MachinesInUse = 0 &R.MaxMachinesInUse = 0 &R.BatchesRemaining = &R.MaxBatches !----- ! CALL Arrival(bigSur,bigTkn) CALL Arrival() !----- -{Trans} +{SignalTarget} {nop.P}SignalTarg:{{Signal.1}}... {Signal.2} -{SignalTarget} -{Object.6} ProductionCost.[6]Initializations !---------------------------------------- +{Object.7} ProductionCost.[7]LaborCostPerHour-->>|BatchProduction +{Duration} {nop.D}Duration={MaxF(#D.ProductionStartTime - Time(), 0.0_dbl)}... WRITE(9,*)"Delaying production start by",{nop.D}Duration,"hours" -{Duration} -{Object.7} ProductionCost.[7]LaborCostPerHour-->>|BatchProduction !---------------------------------------- +{Object.8} ProductionCost.[8]PiecesRequired--->|PiecesRequired +{Branch} {nop.L}Branch={&L.NextBatch} -{Branch} +{Duration} {nop.D}Duration={&D.TimeBetweenRequests} -{Duration} +{SignalTarget} {nop.P}SignalTarg:{CALL Arrival()} -{SignalTarget} -{Object.8} ProductionCost.[8]PiecesRequired--->|PiecesRequired -{Page}ProductionCost ////////////////////////////////////////// +{Page}PiecesRequired ! 3 DummyNode /02/10/2003 00:51:35.391 !---------------------------------------- +{Object.1} PiecesRequired.[1]Product A +{Trans} {nop.P}Trans:{@D.Widgets = Triangular(&D.AWidgetsLo,&D.AWidgetsML,&D.AWidgetsHi)}... WRITE(9,*)"A:@D.Widgets",@D.Widgets -{Trans} -{Object.1} PiecesRequired.[1]Product A !---------------------------------------- +{Object.2} PiecesRequired.[2]Product B +{Trans} {nop.P}Trans:{@D.Widgets = Triangular(&D.BWidgetsLo,&D.BWidgetsML,&D.BWidgetsHi)}... WRITE(9,*)"B:@D.Widgets",@D.Widgets -{Trans} -{Object.2} PiecesRequired.[2]Product B !---------------------------------------- +{Object.4} PiecesRequired.[4]PiecesRequired +{Merging} {nop.P}Merging:{#D.PiecesRequired = MergeSum(@D.Widgets)}... WRITE(9,*)"Mrg:#D.PiecesRequired",#D.PiecesRequired -{Merging} +{Trans} WRITE(9,*)"#D.PiecesRequired",#D.PiecesRequired -{Trans} -{Object.4} PiecesRequired.[4]PiecesRequired -{Page}PiecesRequired //////////////////////////////////////////