Example #1
0
        /// <summary>
        /// Generates a new event based on this UserGroups random interarrival mean.
        /// </summary>
        /// <param name="simulationClock">Simulation clock for offsetting time to enter system</param>
        /// <returns></returns>
        public Job GenerateArrival(double simulationClock)
        {
            CurEventCooldown = PseudoRandomGenerator.ExponentialRVG(view.InterarrivalERVGMean);
            Job newJob = new Job(CurEventCooldown + simulationClock, this, simulationClock);

            return newJob;
        }
        /// <summary>
        /// Called when a system component is processing a Job.
        /// </summary>
        /// <param name="component">Next component to process job</param>
        /// <param name="job">Job being processed</param>
        /// <param name="isMac">If it's the Mac, set SystemEntryTime and increment number of jobs in system for W and L</param>
        /// <returns></returns>
        private KeyValuePair<double, Job> SystemComponentJobProcess(SystemComponentData component, Job job, bool isMac)
        {
            if (isMac)
            {
                job.SystemEntryTime = SimClock;
                jobsInSystem++;
            }

            // BUSY
            if (SimClock < component.TimeIdleAgain)
            {
                job.ArrivalTime = component.TimeIdleAgain + PseudoRandomGenerator.ExponentialRVG(component.ProcessMean);
            }
            // IDLE
            else
            {
                component.TotalTimeIdle += (SimClock - component.TimeIdleAgain);
                job.ArrivalTime += PseudoRandomGenerator.ExponentialRVG(component.ProcessMean);
            }

            component.TimeIdleAgain = job.ArrivalTime;
            job.LocationInSystem = component;

            return new KeyValuePair<double,Job>(job.ArrivalTime, job);
        }