Teoria kolejek - myjnia samchodowa

0

Witam,

mam zasymulować działanie myjni samochodowej.
Założenia:

  1. czas mycia samochodu jest stały i wynosi 6 minut
  2. samochody przyjeżdżają na myjnie średnio co 12 minut (czasy pojawienie się samochodu na myjni są losowane z rozkładu wykładniczego)
  3. symulacja ma być przeprowadzona dla 24 godzin

Nie mam pomysłu jak losować te czasy dla samochodów, a dokładniej kiedy je generować. Można by zrobić losowanie co 12 minut i wtedy jak np wylosuje 4 to od bieżącej chwili samochód pojawi się za 4 minuty. To jednak nie będzie wystarczające bo wtedy liczba samochodów nigdy nie przekroczy 5 na godzinę

Ktoś ma jakiś pomysł?

1

NextTime=NowTime-12*log(1-rand()/(double)RAND_MAX);

0

A co oznacza RAND_MAX? Zapewne chodzi o maksymalną liczbę którą można wylosować, ale wg mnie nie ma takiej liczby. Na tym polega rozkład wykładniczy, że możliwe jest że coś się zdarzy za minutę i możliwe też jest że coś się zdarzy za 100 czy 1000 minut. Nie można moim zdaniem niczego wykluczać, choć pewne zdarzenia są mało prawdopodobne.

Nie rozumiem też dlaczego tam jest odejmowanie. Jeśli zaczynam symulację i mam NowTime=0 to przy wylosowaniu czegokolwiek cofam się?

Mi chodziło tylko o to, żeby pokazać w jakiej pętli losować czasy. Czy to ma być pętla po wszystkich minutach w dobie? Czy powiedzmy losować co 12 minut:

for(currentTime = 0; currentTime < 24*60; currentTime++)
     if(currentTime % 12 == 0)
           arrivalTime = currentTime + timeFromExponentialDistribution(lambda); 
    if(carWashEmpty)
           car = getCarFromQueue();
                 if(car.arrivalTime <= currentTime)
                     putCarInCarWash(car);
     .....
     ....

wtedy przy takim podejściu w pierwszej godzinie wylosuje się maksymalnie 5 samochodów, ale może się też wylosować mniej i w pozostałych godzinach przyjedzie więcej, żeby dążyć do średniej 5 samochodów na godzinę. Wtedy taki czas można by umieścić w jakiejś strukturze typu kolejka, z której brałoby się czasy od najmniejszego do największego.

1
Random rand=new Random();
for(lasttime=currentTime=0;currentTime<24*60;++currentTime)
  {
    if(lasttime<=currentTime)
      {
       lasttime-=12*Math.log(1-rand.nextDouble());
       putCarToQueue();
      }
     ...

1 użytkowników online, w tym zalogowanych: 0, gości: 1