// license that can be found in the LICENSE file. package main import ( "fmt" "godes" ) const NEW_CUSTOMERS = 5 // Total number of customers const INTERVAL_CUSTOMERS = 12.00 // Generate new customers roughly every x minites const SERVICE_TIME = 12.0 const MIN_PATIENCE = 1 // Min. customer patience const MAX_PATIENCE = 3 // Max. customer patience // random generator for the arrival interval - expovariate distribution var arrivalGen *godes.ExpDistr = godes.NewExpDistr() // random generator for the patience time time - uniform distribution var patienceGen *godes.UniformDistr = godes.NewUniformDistr() // random generator for the service time - expovariate distribution var serviceGen *godes.ExpDistr = godes.NewExpDistr() // true when Counter var counterAvailable *godes.BooleanControl = godes.NewBooleanControl() type Customer struct { *godes.Runner name int }
) const PT_MEAN = 10.0 // Avg. processing time in minutes const PT_SIGMA = 2.0 // Sigma of processing time const MTTF = 300.0 // Mean time to failure in minutes const REPAIR_TIME = 30.0 // Time it takes to repair a machine in minutes const REPAIR_TIME_SIGMA = 1.0 // Sigma of repair time const NUM_MACHINES = 10 const SHUT_DOWN_TIME = 4 * 7 * 24 * 60 // random generator for the processing time - normal distribution var processingGen *godes.NormalDistr = godes.NewNormalDistr() // random generator for the time until the next failure for a machine - exponential distribution var breaksGen *godes.ExpDistr = godes.NewExpDistr() // true when repairman is available for carrying a repair var repairManAvailableSwt *godes.BooleanControl = godes.NewBooleanControl() type Machine struct { *godes.Runner partsCount int number int } func (machine *Machine) Run() { for { godes.Advance(processingGen.Get(PT_MEAN, PT_SIGMA)) machine.partsCount = machine.partsCount + 1 if godes.GetSystemTime() > SHUT_DOWN_TIME {