RUSKIE
  Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Привет всем!!!   Я в VBA новичок и поэтому очень бы был благодарен кто мне бы помог с этой задачкой.   Суть вот в чем:   клиенты приходят в магазин согласно экспоненц. распределению дальше в зависимости от того сколько у них items в корзине считается их shopping time и дальше они направляются к кассам (checkout arrival time). Только кто первый пришел тот первый и обслуживается поэтому может получиться что кто первый зашел в магазин может подойти к кассе а там уже клиент 2 обслуживается например и т.д.   Мне же нужно с помощью массивов(вот где у меня засада - я в них не шарю) записать каждый раз если клиент ждет больше 3 минут у кассы до того как его обслужат.   И в конце надо сказать какова вероятность того что клиент будет ждать больше 3 минут (все кто ждали больше трех минут / общее число клиентов).   Требуется сделать 1000 раз по часу симуляции. Т.е. там есть эта RS и если она больше 3600 (60 сек * 60 мин) то остановить цикл и запустить по новому и так 1000 раз.      Вот какой год я сам сотворил но он далек от окончания. У меня рамс с массивами а также там надо как то отсеивать кто пришел к кассе первым и т.д.   ПОМОГИТЕ плииизз!!!         Option Base 1   Sub ProblemA()   Dim AT, NI, ST, CT, SFT, IT, WT, RS  As Integer   'AT - customer arrival time   'NI - number of items in the basket   'ST - shopping time   'CT - checkout time   'SFT - server free time   'IT - idle time   'WT - wait time   'RS - running sum of total time   Dim WaitTime0(100), WaitTime1(100), WaitTime3(100) As Variant   Dim ArrivalTime(1 To 40), ShoppingTime(1 To 40), CAT(1 To 40) As Variant   Dim CheckoutTime(1 To 40), TBA(1 To 40) As Variant   'WaitTime0 - array where noone waited before checking out   'WaitTime1 - array where people had to wait less than 3 minute to be checked out   'WaitTime3 - array where people had to wait more than 3 minute to be checked out   'CAT - array with checkout arrival time   'TBA - time between arrivals      AT = 0   SFT = 0   RS = 0   L = 10000                 'just some number which is bigger than 3600   Randomize      i = 1   While RS < 3600   'running sum of total time 60sec*60min = 1 hour      'Arrival Time   mean = 120 'mean of 120 seconds   TBA(i) = Application.WorksheetFunction.roundup(invexp(mean), 0)   ArrivalTime(i) = ArrivalTime(i) + TBA(i)      'Number of Items in the basket   ri = Rnd()   NI = NumberOfItems(ri)      'Shopping Time   ST = Application.WorksheetFunction.roundup(Application.WorksheetFunction.norminv(Rnd(), 20 * NI / 5, 0.2 * 20), 0)   ShoppingTime(i) = ST      'Checkout Arrival Time   CAT(i) = ArrivalTime(i) + ShoppingTime(i)      'Checker Availability and Checkout Time   CT = 15 * NI / 5                        'Checkout time calculation   If SFT < CAT(i) Then                    'If server free time is less than checkout arrival time       WaitTime0(i) = WaitTime0(i) + 1     'then there is an idle time for a checker and no wait time       IT = CAT(i) - SFT                   'Idle Time calculation       SFT = CAT(i) + CT                   'New SFT is the sum of CAT and checkout time   Else       WT = SFT - CAT(i)                   'ortherwise there is a wait time           If WT > 180 Then           WaitTime3(i) = WaitTime3(i) + 1           Else           WaitTime1(i) = WaitTime1(i) + 1           End If       SFT = SFT + CT                      'New SFT   End If   CheckoutTime(i) = CT      x = ArrivalTime(i) + ShoppingTime(i) + CheckoutTime(i)   RS = RS + x      i = i + 1      Wend      If WaitTime3 > 0 Then   MsgBox WaitTime3 & " People Waited Over 3 Minutes"   Else   MsgBox "No One Waited Over 3 Minutes"   End If      End Sub      Function NumberOfItems(ri)   Select Case ri       Case 0 To 0.05       NumberOfItems = 5       Case 0.05 To 0.15       NumberOfItems = 10       Case 0.15 To 0.35       NumberOfItems = 15       Case 0.35 To 0.55       NumberOfItems = 20       Case 0.55 To 0.8       NumberOfItems = 25       Case 0.8 To 0.9       NumberOfItems = 30       Case 0.9 To 0.95       NumberOfItems = 35       Case 0.95 To 0.97       NumberOfItems = 40       Case 0.97 To 0.99       NumberOfItems = 45       Case 0.99 To 1       NumberOfItems = 50       End Select          End Function      ' Inverse of the exponential distribution function   Public Function invexp(mean)   invexp = -mean * Log(1 - Rnd)   End Function |