Beispiel #1
0
        public void Run()
        {
            _env.Process(EndWarmupPhase(WarmupTime));
            _env.Process(Demand(route: new int[] { 0, 1, 2 }));
            _env.Process(Demand(route: new int[] { 0, 1, 3 }));
            _env.Process(Demand(route: new int[] { 4, 5, 6 }));
            _env.Process(Demand(route: new int[] { 4, 5, 7 }));
            _env.RunD(WarmupTime + ObservationTime);

            foreach (var job in _backorderedJobs)
            {
                ServiceLevel.Add(0);
                WIPLeadTime.Add(_env.NowD - job.Value.Item1);
                Tardiness.Add(_env.NowD - job.Value.Item2);
            }
        }
Beispiel #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();
            }
        }