• 沒有找到結果。

應用禁忌演算法於護理人員排班程式設計

在文檔中 中 華 大 學 (頁 40-50)

從文獻中的爬山法[3],不能找到全域的最佳解,因此套用禁忌搜尋法來解 決護理人員排班程式的問題。從第三章節中,了解如何建構一整套的禁忌演算法,

在此章節沿用禁忌演算法的啟發式模式建構出一套符合護理人員排班的架構,從 前者保留下的彰基排班資料與數據,進而可以實測應用禁忌演算法於護理人員排 班程式的效率與品質。

4-1 符合護理人員排班的禁忌演算法元素定義

在設計符合護理人員排班的禁忌演算法前,要重新定義一次禁忌演算法,讓 演算法具有調理和邏輯,定義如下:

一、起始解

將一份護理人員排班的班表,當作起始解的目前解。

二、禁忌移動

一份班表內,20 名護士要安排一整個月的班表,而在做評估時,

每日每個護士做搜尋的動作,以兩兩護士交換產生的鄰近解當做評估,

而每日就有 20*19 的 380 種交換情況,而每個月有 30 天,則有 30*20*19 的 11400 種交換情況中找出最好的解,並把最好的評估移動,日期放入 禁忌名單內,讓下次做搜尋時,在禁忌名單內有相同的日期而不做搜尋 動作。假設有渴望條件情況下,會讓禁忌名單的日期繼續搜尋,如果鄰 近解的情況沒有比禁忌名單的解還要好,就繼續放入名單內,評估分數 不變;否則,更改禁忌名單內當天日期,並更改最好的評估分數。

三、鄰域大小

每個月 30 天,需要 20 名護士輪值早班、小夜班、大夜班,以及放 假,而做搜尋時,每日的排班兩兩護士都要做交換做評估,所以當每日 交換情況有 380 種情況,而每個月則有 11400 種情況,則鄰域大小為 11400。

四、禁忌名單的大小

在一個月內有 30~31 天,每日做兩兩護士班別交換得況下,在本研 究中設計一個月內的日期做為禁忌移動的依據,而在有、無渴望條件的 兩種情況下,最大的禁忌名單都設為 30 個,最小設為 5 個,做為效率 與品質的考量。

五、渴望條件

當禁忌名單內,有相同日期的禁忌成員,因目前解比最好歷史解還 要好,此時渴望條件達成,並把禁忌名單內相同日期的評估取代為目前 解的評估。

六、停止條件

在本研究中 ,為了設計一個快速有效率的排班表,從局部優良可 行解中跳脫出來去找全域的優良可行解,在此設計符合護理人員排完班 表的時間,兩小時為基準,做為禁忌演算法疊代最大次數的時間,當作 停止條件。

4-2 符合護理人員排班的禁忌演算法策略

定義完符合禁忌演算法的元素後,接著要定義一個符合應用禁忌演算法的執 行策略,如下:

一、禁止策略

依照佇列(queue)的方式建構出一個禁忌名單,存放的一個月日內兩 兩交換後鄰近解之最好的解之移動日期。在無渴望條件的情況下,把鄰 近解中之最好的解之當日日期放入禁忌名單內而再次搜尋到同日期的 情況則跳過,不做搜尋和評估;在有渴望條件下,當鄰近解中,最好的 解之當日日期放入禁忌名單內而再次搜尋到同日期的情況則繼續做搜 尋和評估的動作,假設比禁忌名單內好,把這日期的最佳解做紀錄並取 代。

二、解放策略

因利用佇列的形式建構出的禁忌名單,當禁忌名單滿了,再依照先 進先出法的法則,把紀錄最後一位的值被目前解的日期作取代;而當渴 望條件下,取代原始日期並把最佳解的值放入禁忌名單內,並更新 禁 忌名單,再依照先進先出法的原理,給予被修改的日期,挪移位置為首 位,其餘名單內的成員順延一位。

三、短期策略

在無渴望條件下,把目前鄰近解之最佳解的日期放入禁忌名單內,

並更新禁忌名單為首位,在第二次搜尋後,更新禁忌名單,把第一次的 日期放入第二位,而第二次搜尋到的日期放入首位,以此類推,當禁忌 名單滿了,依照先進先出法的原則把最後一位的日期刪除,並加入新日 期的禁忌名單為首位,其餘成員則延後一個順位。而在渴望條件下,當

禁忌名單與目前要做搜尋日期相同,則繼續做搜尋與評估,假設目前解 比較差則不更新禁忌名單;反之,就目前解比禁忌名單內同日期的解來 的好,取代禁忌名單內的評估值,並把日期順位挪移為首位,其餘則遞 補順延一位。

4-3 符合護理人員排班的禁忌演算法過程

在此設計符合護人員排班的禁忌演算法過程,步驟如下:

步驟一:將一分班表 S 中,依目前局面為可行解 i 當作起始解。並設最好歷 史解 i* =目前解 i 和微調次數 k=0。

步驟二:每次做完搜尋動作 k=k+1,並由禁忌名單檢查可換班日是否有被放 入禁忌名單內,在無渴望條件下,如果可換班日在有禁忌名單內,

則不做兩兩班別互換評估的動作,接著換下一個可換班日;在有渴 望條件下,會繼續做當日的兩兩換班評估。則經由每日兩兩班別互 換選擇最好的,在繼續評估一個月內所有鄰近解。

步驟三:當評估完所有鄰解後,從所有鄰近解中選擇最好的解移動 j;並設 定目前解 i=最好的移動 j 解,把目前解取代為最好的移動 j 解。

步驟四:假如目前解 f(i)的評估 <最好歷史解 f(i*)的評估,則表示目前解 i 比最好歷史解 i*還要好,並把最好歷史解 i* = 目前解 i。

步驟五:並把 j 的移動加入至禁忌名單內,更改禁忌名單的順位,把目前進 來的擺在首位,其餘成員遞補順延一位;當有渴望條件的情況下,

記錄最好歷史解的為渴望條件的評估。

步驟六:如果達到停止條件則停止。

否則轉至步驟二。

以上為步驟流程,當停止條件滿足時則不繼續執行演算法,而本研究中,因

為給予程式跑的最長容忍時間為兩小時,所以利用最大微調次數的時間為設定兩 小時左右,找尋在這時間內的全域的優良可行解,選擇兩小時的原因,為了要在 短時間找出最好的結果,符合護理人員約班的需求,並達到效率與品質。下一章 節中,分別製作有、無渴望條件情況下的程式流程,完整介紹應用禁忌演算法於 護理人員排班程式設計上。

4-4 符合護理人員排班的禁忌演算法實際流程

一、無渴望條件:

圖 4-1:無渴望條件的禁忌演算法之流程圖

根據圖 4-1 無渴望條件的流程圖,首先利用一份班表,當作起始解,

把可換班日期檢查是否有在禁忌名單內;如果有在名單內,則不去做搜 尋,直接回到可換班日;如果沒有在名單內,再算這天內兩兩換班的所 有解,選擇最好的評估,再進入評估一個月內所有最好的解。當尋找完

一個月所有解之後,依一個月的最好的解,使班別做移動,在評估最好 歷史解與目前解,選擇最好的取代最好歷史解,之後在更新禁忌名單,

最後判斷是否滿足停止條件,如果是,則最後的最終解;如果否,則更 新可換班日以及一個月內最好的解。當完成最終解之後,會把全域優良 可行解給列出來,並依照扣分權重,把所有扣分情況列出來。

二、有渴望條件:

圖 4-2:有渴望條件的禁忌演算法之流程圖

根據圖 4-2 有渴望條件流程圖,首先利用一份班表,當作起始解,

把可換班日期檢查是否有在禁忌名單內;如果有在名單內,則算這天內 兩兩換班的所有解,選擇最好的評估,再去判斷有無滿足渴望條件,如 果有滿足,則進入評估一個月內所有最好的解;如果沒有滿足,則往下 一個可換班日進去搜尋。如果沒有在名單內,則算這天內兩兩換班的所

有解,選擇最好的評估,再進入評估一個月內所有最好的解。當尋找完 一個月所有解之後,依一個月的最好的解,使班別做移動,在評估最好 歷史解與目前解,選擇最好的取代最好歷史解,之後在更新禁忌名單,

最後判斷是否滿足停止條件,如果是,則最後的最終解;如果否,則更 新可換班日以及一個月內最好的解。當完成最終解之後,會把全域優良 可行解給列出來,並依照扣分權重,把所有扣分情況列出來。

經過寫好的應用禁忌演算法於護理人員排班程式後,接下來利用前者《護理 人員排班程式設計與實作》[3]所留下來的排班資料與約班數據加以實測,分別 測是無渴望條件和有渴望條件,不同的效率與品質,將在下一章效能評估中做討 論。

在文檔中 中 華 大 學 (頁 40-50)

相關文件