Example #1
0
        private IEnumerable <Event> EndWarmupPhase(double time)
        {
            yield return(_env.TimeoutD(time));

            for (var b = 0; b < Backlog.Length; b++)
            {
                Backlog[b].Reset(Backlog[b].Current);
            }
            SystemUtilization.Reset(SystemUtilization.Current);
            for (var u = 0; u < StationUtilization.Length; u++)
            {
                StationUtilization[u].Reset(StationUtilization[u].Current);
            }
            WIPInventory.Reset(WIPInventory.Current);
            FGIInventory.Reset(FGIInventory.Current);
            WorkerUtilization.Reset(WorkerUtilization.Current);
            for (var w = 0; w < WorkerUtilizations.Length; w++)
            {
                WorkerUtilizations[w].Reset(WorkerUtilizations[w].Current);
            }
            Backorders.Reset(Backorders.Current);
            WIPLeadTime.Reset();
            FGILeadTime.Reset();
            Tardiness.Reset();
            ServiceLevel.Reset();
        }
Example #2
0
        private IEnumerable <Event> Job(int[] route, double due)
        {
            var start = _env.NowD;
            var flow  = _env.Process(JobFlow(route)); // wait until job is finished

            yield return(flow | _env.TimeoutD(due - start));

            if (flow.IsAlive)
            {
                Backorders.Increase();
                _backorderedJobs.Add(flow, Tuple.Create(start, due));
                yield return(flow);

                _backorderedJobs.Remove(flow);
            }
            WIPLeadTime.Add(_env.NowD - start);
            var tardiness = Math.Max(_env.NowD - due, 0);

            Tardiness.Add(tardiness);
            if (_env.NowD < due)
            {
                ServiceLevel.Add(1);
                FGIInventory.Increase();
                var fgiDelay = due - _env.NowD;
                yield return(_env.TimeoutD(fgiDelay)); // wait until due date to deliver order

                FGIInventory.Decrease();
                FGILeadTime.Add(fgiDelay);
            }
            else
            {
                ServiceLevel.Add(0);
                FGILeadTime.Add(0);
                Backorders.Decrease();
            }
        }