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++; } }
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)); } }