Esempio n. 1
0
        public void PersonsArrival(int minute)
        {
            int NbArrivals = NumberOfArrival();

            for (int i = 0; i < NbArrivals; i++)
            {
                PersonsPool.Add(new Person(personId, 0, rand.Next(1, nbFloors), minute * 60, minute * 60));
                personId++;
            }
        }
Esempio n. 2
0
        public override IEnumerator <InstructionBase> Simulate()
        {
            for (int i = 0; i < SimulationMinuteTime; i++)
            {
                PersonsArrival(i);
            }

            while (true)
            {
                for (int i = 0; i < PersonsPool.Count; i++)
                {
                    PersonsPool[i].TimeBeforeGoingActive--;

                    if (PersonsPool[i].TimeBeforeGoingActive <= 0)
                    {
                        Console.Write("Person " + PersonsPool[i].Id + " is active");
                        if (PersonsPool[i].Departure == 0)
                        {
                            Console.WriteLine(" (Going up)");
                            PersonsPool[i].BeginQueueTimeGoingUp = Context.TimePeriod;
                        }
                        else
                        {
                            PersonsPool[i].BeginQueueTimeGoingDown = Context.TimePeriod;
                            Console.WriteLine(" (Going down)");
                        }


                        //PersonsWaiting[PersonsPool[i].Departure].Enqueue(PersonsPool[i]);
                        Floors[PersonsPool[i].Departure].PersonsWaiting.Enqueue(PersonsPool[i]);
                        if (!Floors[PersonsPool[i].Departure].QueueSizeHistory.ContainsKey(Context.TimePeriod))
                        {
                            Floors[PersonsPool[i].Departure].QueueSizeHistory.Add(Context.TimePeriod, Floors[PersonsPool[i].Departure].PersonsWaiting.Count);
                        }
                        else
                        {
                            Floors[PersonsPool[i].Departure].QueueSizeHistory[Context.TimePeriod] = Floors[PersonsPool[i].Departure].PersonsWaiting.Count;
                        }

                        if (Floors[PersonsPool[i].Departure].MaximumQueueSize < Floors[PersonsPool[i].Departure].PersonsWaiting.Count)
                        {
                            Floors[PersonsPool[i].Departure].MaximumQueueSize = Floors[PersonsPool[i].Departure].PersonsWaiting.Count;
                        }

                        PersonsPool.RemoveAt(i);
                        i--;
                    }
                }



                yield return(new WaitInstruction(1));
            }
        }