2015年7月5日 星期日

[銘] 掛號看病(二)

故意拆成兩篇就是為了湊湊數目,另外也把看起來比較可怕的東西放在這裡。說過了這裡是給我留個記錄,可是真的有好玩的東西在裡面,大家不要被嚇到阿。

上次停留在最適條件以及限制,我們重新把問題定義清楚:
假設第$i$個人的看病時間是$X_i \sim $ gamma($\alpha, \beta$),其中$\alpha$ 是形狀參數然後$\beta$是幅度參數。假設$a$是大家選擇抵達的時間,$s$是掛到的序號,$n$是總人數,$\eta$是你最晚什麼時候要到醫院。(我做到一半才發現這個$\eta$很重要,不然會發生每個人一路苦苦等待到天荒地老的情況。)

今天把情況分成兩個,首先是你的序號不是最後幾個,也就是$n-s>r$,那如果看到你來的時間比較早,來的時候前面的人都還沒有看完,也就是$\Sigma_{i=1}^{s-1} X_i \ge a$,那你要花費的等待時間就是$\Sigma_{i=1}^{s-1} X_i - a$,反過來則是要接受過號的處罰,但是如果沒有過久才去的話就要過兩號,但是如果一路等到其他人都看完了你才去的話,就不用等了。(報到時間的限制$\eta$就是重要在這裡)

如果你今天序號是最後幾個,那你太早到的結果雖然是一樣的,不過你最後接受到的過號處罰也是要小心的計算一下邊邊的條件才不會錯。

接下來就是骯髒的計算了,這部份就放心略過,知道我有算過幾次就好哈哈。(我偷偷把一些參數都簡化,例如gamma分配硬被我搞成exponential)
\[ E[u(a)] = -\int 1(a\le Y)(Y - a)f_Y(y)dy - \frac{5}{2\alpha} \int 1(a > Y)f_Y(y)dy \]
\[ = -\frac{a^s}{\Gamma(n)} e^{-a} -s +a -[a+5/2 - s] P(Y \le a) \]
where $Y = \Sigma_{i=1}^{s-1} X_i $

(這兩個等號我一直手滑所以算很久,然後其中的邊邊條件我先不管,所以過號懲罰一律是跳兩號,這點在等一下的解會看到他的結果。另外就是加總的範圍我加到$s$而非$s-1$,這點我在後來也會討論。)

所以我們就算出來了,但是很可惜的Gamma的CDF沒有解析解,上面這個式子如果要對$a$微分找出最適的解也沒有解析解,所以我們只畫一個圖出來看看應該長什麼樣子。
用以下兩行就可以生出matlab的圖案:
fz = @(a,s)  - a.^s.*exp(-a)./gamma(s) + a - s - (a - s + 5/2).*(gamcdf(a,s,1));
ezmesh(fz,[0,10])

這個圖要怎樣看呢?你挑一個$s$切過去,就是你拿到那一個號碼的時候,對應到各個高度,你選每一個$a$所可以獲得的效用,高度越高代表那是你最好的選擇。先從切$s=8$過去看看好了,這個時候如果你$a=0$,也就是你拿到8號但是你一大早就去排隊了,那你當然是等到天荒地老,反之你沿著$a$往後走,這個選擇看起來越來越誘人。

另外可以看到圖的右半面都平平的,這個是我們的過後設計造成的,反正你如果比較晚來你就是等兩號,沒有別種了,所以後面才會一片平。另外是在$(0,0)$點的地方最高,這也很簡單,如果你拿到第一個號碼牌,你醫院一開門來只要醫生沒遲到保證你不用等。

這個圖最有趣的眉角就是從左邊往右爬的過程中,不是一路上升的,其實是有先到最高點再往下一個緩坡。(這個把圖轉一轉就知道。)這件事情就是告訴你如果你可以依照平均的等待時間(在這裡我是設定為1),那再拉扯一下過號的風險和前面的不確定性,大概才是最好的決定。那這個最佳的時間通常是前面幾號的人比平均時間早一點來等(如果1號過號那就要等了號不如一開始來排),然後後面的人遲一些進來(前面幾個人的抵達難以估計,反正過號了不起懲罰差兩個),這樣就可以解釋為什麼大家都會等比較久了。

不過代誌沒有像憨人想得那麼簡單,以上是我第一天想這個問題的結果,你有沒有看出什麼問題?

沒有留言:

張貼留言