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 |