第六章 換班程式的使用方法與執行結果
6.2 結果
40
為 3~5(透過 3 人~5 人換班)的換班方法數,如圖 6-7。
圖 6-7,視窗上顯示的換班方法數
41
度 3~5 的方法數= 1 個+ 1136 個)總共花費的執行時間為 10639 毫秒,也就是約 11 秒。以程式搜尋換班方法,不僅可以找出所有可行的換班方法,所花費的時 間比起人力搜尋也是相當有效率的
圖 6-8,找到的換班方法數及總花費時間
以同樣的 2008 年 7 月彰基第二呼吸照護中心護理人員排班表為測試資料,
在單天多人換班法下原本找不到任何換班方法的 97 例,在連續兩天多人換班法 下皆可以找到換班方法。
42
第七章 結論
連續兩天多人換班法可以依照個人需求選擇「選定日為第一日」或「選定日 為第二日」,讓使用者可以有更多選擇。若選擇選定日為第一日時找不到換班方 法,在同樣的選定日下還可以選擇選定日為第二日來搜尋換班方法,反之亦然。
在實務上,換班往往牽一髮而動全身,所以在換班時應盡量避免為了一位護 理人員的換班要求而同時牽動到多位護理人員的班表。在換班時為了避免換班過 於複雜,幾乎不會同時涉及 6 人以上換班,所以程式的迴圈長度限制在 5 以內。
最直接的換班方法為「兩兩互換」,所以一般來說都是先考慮兩兩互換的換班方 法,因此程式另外再統計迴圈長度為 2 的換班方法數提供使用者參考,若找不到 任何兩兩互換的換班方法再尋求 3 人以上的換班方法。
回顧第二章文獻中,單天多人換班法下以 2008 年 7 月彰基第二呼吸照護中 心護理人員排班表為測試資料共有 97 例找不到任何換班方法,同樣的測試資料 在連續兩天多人換班法下都可以獲得解答。
第五章中,回顧整個排班表發現在單天多人換班法下無法找到換班方法的問 題有其規律性。我們將其規則歸納出後,發現在連續兩天多人換班法下可以破壞 這個問題的規則而可以找到換班方法。
程式搜尋換班方法至列出所有換班方法所花費的時間相較於人力搜尋,可節 省大量的時間,且執行程式所占的記憶體約 12KB,所以連續兩天多人換班法在 實務上不僅是有效率的,也可以為換班問題提供更多的選擇。
43
參考文獻
[1] ETtodayvup 新聞雲,生活中心/綜合報導,2013 年 7 月 10 日,<全台護士 荒!花蓮偏鄉醫院祭月薪 62K、升公職急募人原文網址: 全台護士荒!花蓮 偏鄉醫院祭月薪 62K、升公職急募人 | ETtoday 地方新聞 | ETtoday 新聞 雲 http://www.ettoday.net/news/20130710/238603.htm#ixzz31K6BlpEH >
[2] 李光濱、王文傑、沈能元,《蘋果日報》,2013 年 6 月 21 日,〈扭曲的醫療 護 士吊點滴上班〉 網址:
http://www.appledaily.com.tw/appledaily/article/headline/20130621 /35098759/
[3] 吳世聰、王善嬿,〈護士荒未解 長庚關 116 病床 慈濟關 80 床〉,《自由 時報》,中部新聞,2012, 8, 10。
[4] 侯玉松、張鈺生、曾麗卿,〈應用禁忌演算法於護理人員排班程式設計〉,
《台灣國際醫學資訊聯合研討會論文集》,頁 284-289,2011。
[5] 林純玉,《護理人員排班程式設計與實作》,中華大學生物資訊學系碩士論 文,民國 99 年。
[6] 張鈺生,《應用禁忌演算法於護理人員排班程式設計》,中華大學生物資訊 學系碩士論文,民國 100 年。
[7] 洪翊豪,《應用回溯法於護理人員換班程式設計》,中華大學生物資訊學系 碩士論文,民國 101 年。
[8] 侯玉松、張鈺生、曾麗卿,〈應用禁忌演算法於護理人員排班程式設計〉,
《台灣國際醫學資訊聯合研討會論文集》,頁 284-289,2011。
[9] 侯玉松、洪翊豪〈A Study of the Nurse Shift Exchanging Problem〉,醫療 資訊雜誌 p15-26,2012。
[10] Meisels, E. Gudes and G. Solotorevsky, Employee timetabling, c o n s t r a i n t networks and knowledge-based rules: a mixed approach, in: E. Burke, P.
44
Ross (Eds.), Selected papers from the First International Conference on Practice and Theory of Automated Timetabling, Springer Lecture Notes in Computer Science, vol. 1154,Springer (1995) pp. 93–105.
[11] Glover, Tabu Search: A Tutorial, Interfaces, Vol. 20 (1990) pp. 74-94.
[12] Burke, P. Cowling, P. De Causmaecker and G. Vanden Berghe, A memetic approach to the nurse rostering problem, Applied Intelligence 15 (3) (2001) pp.
199–214.
[13] Burke, P. De Causmaecker and G. Vanden Berghe, A hybrid tabu search algorithm for the nurse rostering problem, in: B. McKay et al. (Eds.), Simulated
Evolution and Learning, Selected Papers from the 2nd Asia-Pacific Conference on Simulated Evolution and Learning, SEAL 98, Springer Lecture Notes in Artificial Intelligence, vol. 1585, Springer (1999) pp. 187–194.
[14] Dowsland, Nurse scheduling with tabu search and strategic oscillation, European Journal of Operational Research 106 (2) (1998) pp. 393–407.
[15] Ellis Horowitz, Sartaj Sahni, Sanguthevar Rajasekaran, Computer Algorithms C++, 1996.
[16] Ellis Horowitz, Sartaj Sahni, Dinesh Mehta, Fundamentals of Data Structures in C++, 2006.
45
附錄—程式一之C語言程式實作
一、程式碼
#include <stdio.h>
#include <stdlib.h>
#define NODE_NO 5 // 圖形節點數 int graph[NODE_NO][NODE_NO] = {
{0, 1, 1, 0, 1}, //測試圖形: 0--1, 0--2, 0--4 {1, 0, 1, 1, 0}, // 1--2, 1--3 {1, 1, 0, 1, 0}, // 2--3 {0, 1, 1, 0, 1}, // 3--4 {1, 0, 0, 1, 0}
}; //節點編號0~4, 共7條邊線 void DFS(int s, int u, int x[], int k) {
int v, i;
for (v=0; v<NODE_NO; v++) if (!graph[u][v]) continue;
else if (v==s)
{ //要補上檢查直行限制
printf("%d->", s); // 列印迴圈 for (i=1; i<k; i++)
printf("%d->", x[i]);
printf("%d\n", v);
46
}
else {
for (i=1; i<k; i++) if (v==x[i]) break;
if (i>=k) {
x[k] = v;
DFS(s, v, x, k+1);
} } }
void main() {
int x[NODE_NO];
DFS(1, 1, x, 1); // 測試: 由節點 1 出發 system("PAUSE");
}
二、執行結果
共找到15個迴圈如下:
1->0->1 1->0->2->1 1->0->2->3->1 1->0->4->3->1