• 沒有找到結果。

中 華 大 學

N/A
N/A
Protected

Academic year: 2022

Share "中 華 大 學"

Copied!
56
0
0

加載中.... (立即查看全文)

全文

(1)

中 華 大 學 碩 士 論 文

透過連續兩天循環換班方法 改善護理換班問題

Improvement of

the Nurse Shift Exchanging Problem through Cyclic Shift of Consecutive Two Days

系 所 別:生物資訊學系碩士班 學號姓名:M10120008 蔡幸珊 指導教授:侯玉松 博士

中 華 民 國 103 年 7 月

(2)

i

中文摘要

為提升護理人員的工作士氣,我們希望設計程式解決護理人員的換班問題。

根據文獻,單天多人換班法雖然能找出多種換班方法,但仍有找不到換班方法的 狀況,本論文遂發展連續兩天多人換班法以解決換班問題。

依據建立出的換班圖形並通過限制函式的檢查,再利用回溯法找出換班方法

。連續兩天多人換班不僅可以解決單天多人換班找不到的答案,同時也可提供更 多元更彈性的換班選擇。

關鍵詞:護理人員換班問題、圖形、回溯法

(3)

ii

Abstract

In order to keep up nurse morale, we expect to design programs to solve the problem of nurse shift exchanging. According to the literatures review, the method of nurse shift exchanging by one day still couldn’t find solutions in some case.

Therefore, we developed the nurse shift exchanging by consecutive two days. We design a method to build the corresponding graph, bounding functions, and then searching cycles by using a backtracking algorithm to find the feasible solutions of shift exchanging. The nurse shift exchanging by consecutive two days not only can solve these case which couldn’t find any feasible solution in shift exchanging by one day, but also can provide more multiple and more flexible choices.

Keywords: Nurse Shift Exchanging Problem, Graph, Backtracking

(4)

iii

誌 謝

這篇研究論文的完成首先要感謝我的指導老師侯玉松教授,使我這個原本對 程式一知半解的研究生能一步一步了解整個大程式的架構,並進一步學會運用很 多不同的程式技巧。在研究的過程中雖然面臨了種種難題,但在我遇到困難時老 師都能耐心地給予指導並指點方向,讓我能順利完成論文程式並做出研究成果。

還要感謝第一次帶我書報課的曾文慶老師,記得第一次要交生物相關的書報 報告時,我因為缺乏生物概念而不知所措。曾老師還抽空教我一些生物基礎概念 還有一些蒐集資料的方法,讓我在念研究所期間有很大的幫助。

再來要感謝的是我的家人,在我念研究所期間給我的大力支持。還有我的朋 友葉少芃,在繁忙的工作中抽空教我一些解決問題的技巧並給我建議,並在我遇 到困難時幫我加油打氣。謝謝你們在我研究所這兩年的期間所給予的幫助與支 持。

最後還要感謝實驗室裡的同學們,偉聖、凱傑、啟婷、利偉、冠甫、維謙和 子維,讓因為不是中華直升碩士班一開始對環境都不熟悉的我能很快適應環境,

並在求學階段給予很多的幫助。特別感謝凱傑、利偉和冠甫不管是在學校事務還 是作業等常常給我提醒與幫忙。

(5)

iv

目 錄

第一章 簡介... 1

1.1 護理人員排班之概述... 2

1.2 護理人員換班動機... 6

第二章 文獻回顧... 8

2.1 爬山法... 8

2.2 禁忌演算法... 9

2.3 回溯法... 10

2.4 單天多人換班法... 10

第三章 回溯法... 13

3.1 回溯法簡介... 13

3.2 回溯法的應用... 15

第四章 連續兩天多人換班... 19

4.1 連續兩天多人換班概述... 19

4.2 直行限制與橫列限制的介紹... 21

4.3 建立換班關係圖形... 21

4.3.1 建立節點... 22

4.3.2 建立邊線... 22

4.3.3 確保某人選定日的班一定換到班... 25

4.3.4 簡單迴圈的意義... 26

4.4 利用回溯法找出所有簡單迴圈... 27

第五章 找出排班表中造成無法換班的規則... 30

第六章 換班程式的使用方法與執行結果... 36

6.1 操作步驟... 36

6.2 結果... 40

(6)

v

第七章 結論... 42 參考文獻... 43 附錄 程式一之C語言程式實作... 45

(7)

vi

表目錄

表 1-1,2008 年 7 月第二呼吸照護中心的部分約班表 ... 2

表 1-2,2008 年 7 月第二呼吸照護中心的部分排班表 ... 3

表 1-3,兩兩互換與三人以上換班 ... 6

表 2-1,單天多人換班法 ... 10

表 2-2,7/10 日游○惠的 D 班在單天多人換班下找不到任何換班方法 ... 11

表 4-1,選定日為第一日 ... 19

表 4-2,選定日為第二日 ... 20

表 5-1,王○娥 9 日的 R 班換掉會違反不能連續上班超過 7 天的限制... 30

表 5-2,連續兩天多人換班法下可以不違反連續上班超過 7 天的規則 ... 31

表 5-3,E 班與 D 班間只能安排 R 班 ... 31

表 5-4,連續兩天多人換班法下解決在 E 班與 D 班間只能安排 R 班的問題 ... 32

表 5-5,N 班與 D 班間只能安排 R 班 ... 32

表 5-6,連續兩天多人換班法下解決在 N 班與 D 班間只能安排 R 班的問題 ... 33

表 5-7,N 班與 D 班間只能安排 R 班 ... 33

表 5-8,連續兩天多人換班法下解決在 N 班與 E 班間只能安排 R 班的問題 ... 33

表 5-9,13 日王○娥與賴○怡班表互換會違反兩項限制 ... 34

表 5-10,連續兩天多人換班法解決找不到換班方法的 N 班 ... 35

(8)

vii

圖目錄

圖 3-1,階層為 4 的樹狀圖 ... 13

圖 3-2,回溯法路徑示意圖 ... 14

圖 3-3,四后的正確擺放方法 ... 15

圖 4-1,12 日與 13 日六位護理人員班表所建立的節點 ... 22

圖 4-2,記錄第 1 列第 4 行為 1 的二維陣列 ... 23

圖 4-3,節點 1 指向節點 4 的邊線 ... 23

圖 4-4,6 個節點的可換班關係所產生的二維陣列 ... 24

圖 4-5,根據 6 個節點產生的二維陣列所畫出的邊線 ... 24

圖 4-6,取消 4→2 的連線後為正確的圖形連線 ... 26

圖 4-7,以圖 4-7 所對應的深先搜尋法所建立的樹狀圖 ... 29

圖 6-1,程式開始的畫面 ... 36

圖 6-2,選擇班表 ... 37

圖 6-3,將班表資料呈現在視窗的表格上 ... 37

圖 6-4,選擇選定日 ... 38

圖 6-5,印出所有換班方法 ... 38

圖 6-6,換班方法 ... 39

圖 6-7,視窗上顯示的換班方法數 ... 40

圖 6-8,找到的換班方法數及總花費時間 ... 41

(9)

viii

程式目錄

程式 3-1,利用回溯法解出 N 后問題程式碼...18 程式 4-1,利用回溯演算法找出所有簡單迴圈的虛擬碼...28

(10)

1

第一章 簡介

近年來,台灣護理人員不足的問題日益嚴重,護士荒的問題未能獲得改善,

根據 2013 年 7 月 10 日 ETtoday 新聞雲的報導[1]指出,護理人員除了站在第一 線面對病患與病患家屬外,在人力不足的情況下,常常面臨超時加班與無法補休 等問題,使得護理人員身心俱疲。這些問題不僅影響護理人員的身心健康,在工 作的表現上也容易發生錯誤,進而導致護理人員的工作意願降低,許多人因此選 擇轉行出走。

根據 2013 年 6 月 21 日蘋果日報報導[2]指出護理人員因身體不適但擔心請 假而增加同仁負擔,因此吊點滴值大夜班。我們希望提出藉由換班的方式來改善 這樣的問題。透過換班的方式增加班表的彈性,除了可以鼓舞護理人員士氣提升 工作效率外,也讓護理人員因為某些個人原因(例如身體不適)可以向護理長提出 換班的需求。本論文的目的為了解決這個問題,因此發展連續兩日多人換班的換 班系統,這個系統的設計可以找出多種換班方法讓提出換班需求的護理人員做選 擇,提供護理人員更彈性的換班工具。

(11)

1.1 護理人員排班

以在中部某醫學中心的第二呼吸照護中心班表為例 照自己的期望排班填寫下月

部分約班表。

約班時有一些約班的專有名詞 (1)「約 D」為「

(2)「約 E」為「

(3)「約 N」為「

(4)「約 R」為「

(5)「勿 D」,表示護理人員希望在擬定班表時 (6)「勿 E」,表示護理人員希望在擬定班表時 (7)「勿 N」,表示護理人員希望

表 1-1,2008

2

班之概述

以在中部某醫學中心的第二呼吸照護中心班表為例,護理人員在每月中旬依 照自己的期望排班填寫下月約班表,表 1-1 為 2008 年 7 月第二呼吸照護中心的

約班時有一些約班的專有名詞,如下:

「約白班」,上班時間為早上 8 點至下午 4

「約小夜班」,上班時間為下午 4 點至凌晨

「約大夜班」,上班時間為凌晨 12 點至早上

「約休假」。

表示護理人員希望在擬定班表時,這天不要安排 表示護理人員希望在擬定班表時,這天不要安排

表示護理人員希望在擬定班表時,這天不要安排大夜班

2008 年 7 月第二呼吸照護中心的部分約班表

護理人員在每月中旬依 月第二呼吸照護中心的

4 點。

點至凌晨 12 點。

點至早上 8 點。

這天不要安排白班。

這天不要安排小夜班。

這天不要安排大夜班。

月第二呼吸照護中心的部分約班表

(12)

最後,護理長再綜合約班期望並依照人力的排班限制 排班表,表 1-2 為 2008 年

在排班表上,

(1)賴○○在 1 (2)黃○○在 3 (3)薛○○在 6 (4)王○○在 1 (5)張○○在 3 (6)陳○○在 3

表 1-2,2008

3

護理長再綜合約班期望並依照人力的排班限制,擬出次月的護理人員 年 7 月第二呼吸照護中心的部分排班表。

1 日約班時約 D 班,所以護理長在排班時給予 3 日約班時約 E 班,所以護理長在排班時給予 6 日約班時約 N 班,所以護理長在排班時給予 1 日約班時約 R 班,所以護理長在排班時給予 3 日約勿 E 班,護理長排班時便不排 E 班而給予 3 日約勿 N 班,護理長排班時便不排 N 班而給予

2008 年 7 月第二呼吸照護中心的部分排班表

擬出次月的護理人員

所以護理長在排班時給予 D 班。

所以護理長在排班時給予 E 班。

所以護理長在排班時給予 N 班。

所以護理長在排班時給予 R 班。

班而給予 D 班。

班而給予 R 班。

月第二呼吸照護中心的部分排班表

(13)

4

在製作班表時,除了盡量依照護理人員們的需求排班外,還須符合排班的相 關法規與限制。目的在於可以讓護理人員達到充分休息以提高工作效率與品質。

以中部某醫學中心為例,經過與護理長的討論歸納出下列必須遵守的排班規則:

[3-4]

(一) 上班天數不可連續超過 7 天(≦ 7 天)。

為了避免護理人員在安排班表時連續上班過多天數,以致過度勞累 而影響工作品質,所以在排班時護理人員不得連續上班超過 7 天。

(二) 大夜班隔日不得排白班或小夜班。

一個班次上班時間為 8 小時,若大夜班隔日又緊接上白班,則連續 上班 16 小時,為超時上班;若大夜班隔日安排小夜班,則中間休息時 間僅有 8 小時,會影響護理人員的身體健康與工作效率。所以大夜班隔 日不得安排白班或小夜班。

(三) 小夜班隔日不得排白班。

若小夜班隔日安排白班,則護理人員班與班之間的休息時間僅有 8 小時,所以小夜班隔日不可以安排白班,以確保護理人員有充分的休息 時間。

(四) 每天每人只能上一種班。

若護理人員一天上兩種班以上,則一天上班時數則為 16 小時以上,

不僅為超時上班,而且休息的時間也不足,所以規定每天每人只能上一 種班。

(五) 每個班至少安排一名 Level 3 以上的護理人員上班。

(14)

5

在醫院裡,常常會出現需要緊急處裡的病患或其他各種突發狀況發 生。當這些狀況發生時,Level 3 以上的護理人員有豐富的經驗可以處 理。

(六) 必須滿足每日白班、小夜班與大夜班應達到的需求人數。

每個班次都應達到需求人數,否則將會造成人手不足。

(15)

1.2 護理人員換班動機

在次月班表由護理長公布後

因素等,必須向護理長提出換班的要求 髮而動全身,換班的同時不僅要

須要遵守上述的排班規則 最直接的換班方式 須要換班,這時可以找陳

○臻不願意換班時,則必須 換找 13 日陳○萍的 N 班換班

但並非每次換班都能

是不論與誰都無法達成兩兩互換的換班方式 例如表 1-3 的 3)張○雯將

○貞將 R 班換給張○雯,

若以傳統人力的方式在班表上找出可以與哪些同仁換班 對換班後是否違反排班規則

換班方法。有時如果遇到必須尋求三人

6

護理人員換班動機

在次月班表由護理長公布後,護理人員可能因為臨時需求、身體不適或個人 必須向護理長提出換班的要求。但當有護理人員須要換班時

換班的同時不僅要與互換的同事協調並徵得同意,換別互換時 規則,最後再請護理長批准。

最直接的換班方式為兩兩互換,例如表 1-3 的 1),張○雯 這時可以找陳○臻的 R 班互換即可達成班別兩兩互換,

則必須再找出其他可行的換班方式,例如表 1 班換班。

次換班都能順利達成兩兩換班,張○雯 11 日的 E 班想換 是不論與誰都無法達成兩兩互換的換班方式,所以必須尋求三人以上的換班

雯將 E 班換給陳○萍,陳○萍將 D 班換給蕭○

,如此便能達成換班。

表 1-3,兩兩互換與三人以上換班

以傳統人力的方式在班表上找出可以與哪些同仁換班,不僅必須一一去比 排班規則,若一個換班方法未能協調成功換班則必須再找其他 有時如果遇到必須尋求三人以上的換班方法時,往往過於複雜

身體不適或個人 須要換班時,往往牽一

換別互換時也必

雯 13 日的 E 班

,但是如果陳 1-3 的 2),可以

班想換 R 班,但 人以上的換班方式,

○貞,最後蕭

不僅必須一一去比 未能協調成功換班則必須再找其他 往往過於複雜而讓人

(16)

7

眼花撩亂。所以人力的方式尋求換班方法是沒有效率的,不僅非常耗時而且搜尋 的過程中也可能遺漏可行的換班方法。

本論文利用程式去搜尋所有的換班方法,不僅花費的時間短,也能在不違反排班 限制的前提下,找出所有的換班方法供護理人員做選擇。

(17)

8

第二章 文獻回顧

據文獻[10],1976 年 Miller 注意到護理人員在排班上面臨到很大的問題,

因此開始著手進行這項研究。而關於護理排班的問題,在近幾年也陸續有關於護 理人員排班的研究陸續出現。在這些相關的排班研究領域中有提到「爬山法」[5]

以及「禁忌演算法」[6、11],這些研究為排班的問題找出解決方法。

雖然對於排班的問題有貢獻,但是常常可能因為護理人員臨時上的需要而必 須提出換班的要求時,換班的問題便是另一需要解決的問題,不過關於換班問題 的研究目前仍不多。

過去,在洪翊豪的換班研究[7]中運用回溯法提出了單天多人換班法,希望 透過這個方法在不違反任何排班規則的前提下,可以依照護理人員的需求尋求換 班方法,達到更彈性的班表。為了這個目的,不僅希望可以找出換班方法而已,

更希望可以提供多種換班的方法讓需要換班的護理人員做選擇。

2.1 爬山法

爬山法(hill climbing)是屬於一種啟發式的方法,其特點是局部的搜索性能優,

一般來說只能找出局部最佳解,但缺點是這個方法並不能保證找到全域的最佳解。

爬山法是一種「疊代改進演算法」,先定義出一個鄰近解,也就是利用單一解將 解的鄰近所有可能的解集合都列入評估,再讓評估函數評估計所有的鄰近解,並 且在每一次的疊代評估與改進,在目前解的鄰近解集合去選出一個最佳的鄰近解,

(18)

9

若最佳的鄰近解其評估函數值比目前解的評估函數值高時,就以這個最佳鄰近解 取代目前解,不斷重複這個做法直到找不到評估函數值更高的鄰近解為止。

這個方法在林純玉的排班研究[5]中被提到,利用這個方法只能針對一個局 部可行解中做出最佳的排班表,當這個局部的可行解找到一個最佳解時就終止了。

但是產生的這個最佳解,只是在局部中找到最佳解,並不能代表這個最佳解在全 域中就一定是最好的,所以還可以再改進。

2.2 禁忌演算法

禁忌演算法(tabu search)為 Glover 於 1986 年所提出[11]的一種搜尋方法,

是一種全域逐步擇優的演算法這個演算法的特點是具有記憶功能,可以紀錄每次 搜尋的路徑,這個記憶結構稱為禁忌名單(tabu list),利用這個短暫的記憶功能 紀錄先前幾次搜尋過的結果以避免重複搜尋已經蒐尋過的路徑,並搭配期望法則 (aspiration criteria),將禁忌名單中較優的搜尋解釋放出,以確保有效尋找到全域 最佳解。

在張鈺生的排班研究[6]中就是利用這種演算法找出最佳的排班表。其他有 關禁忌演算法的研究還有比利時醫院的護士人員排班問題[12]、醫療機構的商業 系統的工作人員時間表問題[13]、以及歐洲大型綜合性醫院的護理人員名冊問題 [14]。

(19)

2.3 回溯法

回溯法(backtracking 當它通過嘗試後發現現有 退一步或退幾步至上一次

可能步驟。回溯法通常使用遞迴的方 能找到可行解,但也有可

2.4 單天多人換班法

在洪翊豪的換班研究

○融的 E 班可以給蕭○貞

○融,如此便可以在不違反限制的情況下達到換班 短時間內找出兩兩互換的換班法

10

backtracking)為一種試錯的概念,它分步去嘗試每一種可能 它通過嘗試後發現現有的可能步驟無法再繼續往下找尋正確的答案時

上一次仍未嘗試通過的步驟,然後再繼續往下嘗試 回溯法通常使用遞迴的方式不斷重複這樣的搜尋方式找出解

但也有可能經過所有嘗試後宣告無解。

單天多人換班法

洪翊豪的換班研究[7]中提出了單天多人換班法。以表 2-1 的 貞,蕭○貞的 N 班可以給陳○萍,陳○萍的 如此便可以在不違反限制的情況下達到換班。單天多人換班法 短時間內找出兩兩互換的換班法,也可以找出三人以上的換班方法

表 2-1,單天多人換班法

每一種可能的解,

繼續往下找尋正確的答案時,便往上 再繼續往下嘗試未嘗試過的 不斷重複這樣的搜尋方式找出解,最後可

的為例,8 日林 萍的 R 班再給林 單天多人換班法不僅可以在 也可以找出三人以上的換班方法。

(20)

雖然單天多人的換班程式能在短時間內找出很多組換班方式 遵守排班限制,我們發現

如下表 2-2,游○惠 10 日的 1)若 D 班與 D 班間安排 2)若 D 班與 D 班間安排 3)雖然游○惠 10

擁有 R 班的張

則違反不得連續上班超過 4) 葉○鈴 10 日的

班,則會違反 排白班這兩

表 2-2,7/10 日游○

11

雖然單天多人的換班程式能在短時間內找出很多組換班方式,

我們發現在單天多人換班下尚有許多找不到換班方法的狀況 日的 D 班找不到換發方法,說明如下:

班間安排 E 班,則違反小夜班隔天不得安排白班 班間安排 N 班,則違反大夜班隔天不得安排

10 日的 D 班可以直接換成 R 班,但在這個例子裡 張○雯卻不能被更動,因為若張○雯 10 日的班別非 則違反不得連續上班超過 7 天的限制。

日的 R 班也不能被更動,因為不論是換成 D

則會違反大夜班隔日不得排白班或小夜班以及小夜班隔日不 這兩項規則。

○惠的 D 班在單天多人換班下找不到任何換班方法

,由於換班時須 在單天多人換班下尚有許多找不到換班方法的狀況。例

夜班隔天不得安排白班的規則。

大夜班隔天不得安排白班的規則。

但在這個例子裡,10 日 日的班別非 R 班,

D 班、E 班或 N 小夜班隔日不得

班在單天多人換班下找不到任何換班方法

(21)

12

以 2008 年 7 月彰基第二呼吸照護中心護理人員的排班表為例,在單天多人 換班法下,一共有 97 例找不到換班方法。這一點我們希望在這篇論文中能獲的 改善。

(22)

第三章 回溯法

3.1 回溯法簡介

回溯法(backtracking 有可能分步建成樹狀圖(

狀圖的節點(node)。我們將樹根 在所在的位置為第 i 階,

層的最大值為此數的深度

回溯法為一種試錯的

(Depth-First Search)分步去嘗試每一種可能的解 為問題所包含的解,如果是這個問題所包含的解

13

回溯法

backtracking)常用來尋求一個問題的所有解的搜尋法。

(tree),起點為其樹根(root),而向下連接的 我們將樹根在樹狀圖的階層(level)中定義為第一

,那麼向下一層的子節點則為第 i+1 階,而這個樹狀圖 為此數的深度(depth),例如圖 3-1,這個樹狀圖的深度為

圖 3-1,階層為 4 的樹狀圖

為一種試錯的搜尋概念,將所有可能的解利用深先搜尋法 分步去嘗試每一種可能的解,在目前位於的節點

如果是這個問題所包含的解,則繼續往下搜尋

。將問題的所 下連接的可能解為樹 第一階,假設現 而這個樹狀圖階 這個樹狀圖的深度為 4。

利用深先搜尋法

節點先判斷是否 則繼續往下搜尋;若目前位於

(23)

的節點不為問題所包含的解

點然後再繼續往下嘗試未嘗試過的可能 至 B 搜尋至 E,最後發現

往下拜訪未搜尋過的節點 L,如果 L 為問題所包含的解 搜尋的步驟為圖 3-2 的

方式找出解,最後可能找到可行解

回溯法有一個優點在於如果 避免浪費時間做搜尋無效解

14

的節點不為問題所包含的解,便往上退一步或退幾步至上一次仍未嘗試通過的節 往下嘗試未嘗試過的可能節點。例如圖 3-2,以 A 為出發點

發現 E 不為問題所包含的解時則繼續往上退回 節點 F,若節點 F 為問題所包含的解,則從 F 為問題所包含的解,則找到一個這個問題的解集合(A 問

~。回溯法通常使用遞迴的方式不斷重複這樣的搜尋 最後可能找到可行解,但也有可能經過所有嘗試後宣告無解

圖 3-2,回溯法路徑示意圖

回溯法有一個優點在於如果拜訪到無效解時,則不繼續往下拜訪 搜尋無效解的動作。

便往上退一步或退幾步至上一次仍未嘗試通過的節 為出發點,往下 回 B,然後繼續 F 再往下拜訪到 問 B→問題 L),

回溯法通常使用遞迴的方式不斷重複這樣的搜尋 但也有可能經過所有嘗試後宣告無解。

則不繼續往下拜訪,這樣可以

(24)

3.2 回溯法的應用

回溯法的應用中最普遍的 是在一個 N 一個格的棋盤格上

線、橫線與對角線上不能放置其他皇后 位置。根據這個規則這四后

置如下圖 3-3, Q1 在第 Q4 在第 3 列第 2 行,所以

15

回溯法的應用

最普遍的範例是 N 后問題(N Queen Problem)

格的棋盤格上放置 N 個皇后,每個皇后在棋盤格上的位置 橫線與對角線上不能放置其他皇后,玩家必須遵照規則找出正確的皇后擺放

根據這個規則這四后的皇后分別以 Q1、Q2、Q3、Q4 表示 在第 0 列第 1 行,Q2 在第 1 列第 3 行,Q3 在第

所以這四后的位置在陣列的表示為(1, 3, 0, 2

圖 3-3,四后的正確擺放方法

),其遊戲規則 每個皇后在棋盤格上的位置其直 必須遵照規則找出正確的皇后擺放

表示,正確擺放位 第 2 列第 0 行,

, 0, 2)。

(25)

16

利用回溯法找出四后問題答案的步驟如下:

step1:首先在第 0 列第 0 行擺放 Q1,如圖 3-4(a)

step2:將 Q2 擺放在第 1 列第 0 行時,發現 Q2 的位置與 Q1 成直線;再檢 查下一格第 1 列第 1 行,發現 Q2 的位置與 Q1 成對角線;所以繼續 檢查下一格第 1 列第 2 行,這時 Q2 不違反直線或對角線的規 則,所以將 Q2 擺放在第 1 列第 2 行,如圖 3-4(b)。

step3:擺放 Q3 時發現,放在第 2 列第 0 行則與 Q1 成直線;放在第 2 列第 1 行則與 Q2 成對角線;放在第 2 列第 2 行則與 Q2 成直線;若放在 第 2 列第 3 行則與 Q2 成對角線。所以 Q3 在第 2 列找不到任何可 以擺放的位置,如圖 3-4(c)。

step4:這時在回溯法下將退回至 Q2,然後將 Q2 往下一格第 1 列第 3 行檢 查,確定 Q2 不與 Q1 成直線或對角線時再接下去擺放 Q3 的位置。

當 Q3 擺放在第 2 列第 0 行時會與 Q1 成直線,所以繼續往下檢查第 2 列第 1 行,Q3 可以在不違反擺放規則下擺放在這個位置,如圖 3-4(d)。

step5:當擺放 Q4 時發現,不論擺放在第 3 列的第 0、1、2、3 行皆違反皇 后間的位置不能成直線或對角線的規則,如圖 3-4(e)。

step6:當 Q4 找不到解時,在回溯法下將退回 Q3;發現 Q3 在第 2 行沒有其 他可行的擺放位置,所以必須再退回 Q2;這時 Q2 也沒有可行的擺 放位置,所以再退回 Q1,然後將 Q1 往下一格擺放至第 0 列第 1 行,

如圖 3-4(f)。

step7:重新檢查 Q2 的擺放位置,將 Q2 擺放在第 1 列的第 0、1、2 行會違 反擺放規則,所以將 Q2 擺放在第 1 列第 3 行的位置,如圖 3-4(g)。

step8:檢查 Q3 擺放在第 2 列第 0 行不違反擺放規則,所以將 Q3 擺放在這 個位置,如圖 3-4(h),然後往下檢查 Q4。

(26)

17

step9:Q4 擺放在第 3 列的第 0、1 行時,分別與 Q1 和 Q3 成直線,所以往 下一格至第 3 列第 2 行檢查,Q4 可以在不違反擺放規則下擺放在這 個位置。這時我們也找到了四后問題的一組解,如圖 3-4(i)。

圖 3-4,回溯法下四后的擺放過程

(27)

18

以下程式 3-1 為利用回溯法解出 N 后問題的程式碼[15]:

int Place(k,i) {

for(j = 0; j <= k-1; j++)

if(x[j] == i || Abs(x[j]-i) == Abs(j-k)) return(0);

return (0);

}

int NQueens(k,n) {

for( i = 1; i <= n-1; i++) {

if( Place(k,i) {

x[k] = i;

if( k = n-1) write(x[i : n]);

else NQueens(k + 1,n);

} } }

程式 3-1,利用回溯法解出 N 后問題程式碼

(28)

第四章 連續兩天多人換班

上一章我們介紹完回溯法後 式並結合回溯法找出所有的換班方法

為了解決相互換班的問題 合第一章裡敘述的排班限制

成圖形,再依照圖形的關係並通過限制式後找出迴圈 方法。

4.1 連續兩天多人換班概述

連續兩天多人換班法 的動作。

連續兩天多人換班法提供了兩種方式供使用者做選擇 (一)選定日為第一

例如表 4-1,選定張 日與 14 日的 D

19

連續兩天多人換班

上一章我們介紹完回溯法後,本章將一一介紹如何設計連續兩天多人換班程 式並結合回溯法找出所有的換班方法。

為了解決相互換班的問題,我們使用中部某醫學中心提供的班表資訊

合第一章裡敘述的排班限制,根據班表,先將選擇的連續兩天可互換的情況建立 再依照圖形的關係並通過限制式後找出迴圈,這些迴圈即為對應的換班

連續兩天多人換班概述

連續兩天多人換班法,顧名思義也就是選擇「連續兩天的班表

連續兩天多人換班法提供了兩種方式供使用者做選擇:

選定日為第一日。

選定張○雯 13 日的班搭配後一天(14 日)的班 D 班與 D 班一起換班。

表 4-1,選定日為第一日

本章將一一介紹如何設計連續兩天多人換班程

我們使用中部某醫學中心提供的班表資訊,並結 先將選擇的連續兩天可互換的情況建立 這些迴圈即為對應的換班

連續兩天的班表」一併做換班

的班,即選擇 13

(29)

(二) 選定日為第二 例如表 4-2,選定張 日與 13 日的 R

連續兩天多人換班法 要為第一日或者是第二日

不到任何換班方法,還可以選擇選定日為第二日的換班方式尋求其他換班方法 反之亦然。

以第二章表 2-2 單天多人換班法下找不到換班方法 10 月 10 日的 D 班找不到其他換班方法

假設先選擇「選定日為第一 班和葉○鈴 10 日與 11 日的 葉○鈴 10 日的班表後因為葉 能安排白班的限制;這個時候

○惠 9 日與 10 日的 D 班與

換班方法不違反上述的六項排班規則 除了可以找出兩兩互換的換班方法外

20

選定日為第二日。

選定張○雯 13 日的班搭配前一天(12 日)的班 R 班與 D 班一起換班。

表 4-2,選定日為第二日

連續兩天多人換班法有一個優點,除了這個方法可因個人需求而選擇選定日 日,不僅可以提供較多選擇,假設在選定日為第一

還可以選擇選定日為第二日的換班方式尋求其他換班方法

單天多人換班法下找不到換班方法的這個例子為例 找不到其他換班方法。同樣的例子在連續兩天多人換班法下 選定日為第一日」做換班,即游○惠將 10 日與 11 日

日的 R 班與 D 班交換,這時發現游○惠 10

因為葉○鈴 9 日的班別為 N 班,所以違反了大夜班隔天不 這個時候可以換選擇「選定日為第二日」的換

班與 D 班和葉○鈴 9 日與 10 日的 N 班與 R

違反上述的六項排班規則,所以可以達成換班。連續兩天多人換班法 除了可以找出兩兩互換的換班方法外,也可以尋求三人以上的換班方法

的班,即選擇 12

方法可因個人需求而選擇選定日 假設在選定日為第一日時找 還可以選擇選定日為第二日的換班方式尋求其他換班方法,

的這個例子為例,游○惠 同樣的例子在連續兩天多人換班法下,

日的 D 班與 D 10 日的 D 班換到 所以違反了大夜班隔天不 的換班方式,將游 R 班交換,這個 連續兩天多人換班法 三人以上的換班方法。

(30)

21

在這個例子中,透過連續兩天多人換班法不僅提供選定日為第一日或第二日 的功能讓使用者有更多選擇,也讓原本在單天多人換班法下找不到換班法的案例 可以找到換班方法,以下將繼續介紹連續兩天多人換班的演算法。

4.2 直行限制與橫列限制的介紹

以班表的直行與橫列的表單來看,「直行限制」即為直向檢查的限制,例如 檢查每個班是否至少有一名 Level 3 以上的護理人員值班;「橫列限制」即為橫 向檢查的限制,例如檢查是否連續上班 7 天以上。第一章所介紹的的六項限制中,

1-4 為橫列限制,5-6 為直行限制。

這些直行與橫列限制會影響護理人員當天可安排的班別,橫列限制在製作關 係圖形時做檢查,第 5 項的直行限制則在找出換班方法後再做檢查,至於第 6 項限制可以不需要檢查,因為都是在當天裡的班別兩兩互換或多人互換,所以不 會影響到當天上班的總人數。

4.3 建立換班關係圖形

圖形的架構以節點(vertex)與邊線(edge)所組成[8],每個節點再分成兩個欄 位:

(一) 護理人員的編號。

(二) 該護理人員「前一天與選定日」的班別或「選定日與後一天」的班別。

(31)

4.3.1 建立節點

以表 4-1 班表為例,先選定 將林○融等六位護理人員依序編號為 (選定日)的班別依序為 EE

在節點的第一欄與第二欄

圖 4-1,12

4.3.2 建立邊線

班表的可換班關係我們 以宣告一個 6×6 的二維陣列

一開始我們先將這個二維陣列的內容都預設成

22

先選定 13 日需要換班,並選擇搭配與前一天 融等六位護理人員依序編號為 1-6,六位護理人員 12 日(前一天

EE、RD、RR、DD、NR 與 NN,再將這些資料分別放置 在節點的第一欄與第二欄,構成一個由六個節點所組成的圖形如圖

12 日與 13 日六位護理人員班表所建立的節點

班表的可換班關係我們利用一個二維陣列來記錄,因為總共有 的二維陣列,而邊線則是根據班表可換班的關係建立 我們先將這個二維陣列的內容都預設成 0,例如圖 4-1 裡

並選擇搭配與前一天 12 日換班,

前一天)與 13 日 這些資料分別放置 六個節點所組成的圖形如圖 4-1。

日六位護理人員班表所建立的節點

因為總共有 6 個節點,所 是根據班表可換班的關係建立而成的。

裡編號 1 的 EE

(32)

班若可以放到編號 4 的班表裡 如圖 4-2。這時候便產生一條由

圖 4-2

23

的班表裡,則在這個二維陣列第 1 列第 4 行的位置記錄為 便產生一條由節點 1 指向節點 4 的邊線,如圖 4-

2,記錄第 1 列第 4 行為 1 的二維陣列

圖 4-3,節點 1 指向節點 4 的邊線

行的位置記錄為 1,

-3。

(33)

24

將 6 個節點的可換班關係逐一檢查(除了不用檢查自己是否能跟自己換班) 後,產生的二維陣列如圖 4-4。

圖 4-4,6 個節點的可換班關係所產生的二維陣列

依照圖 4-4 的二維陣列,我們可以畫出這 6 個節點的邊線,如圖 4-5。

圖 4-5,根據 6 個節點產生的二維陣列所畫出的邊線

(34)

4.3.3 確保某人選定日的班一定換到班

以表 4-3 舉例說明,

前一天 12 日)以連續兩天多人換班法尋找換 再將薛○鄉的 DD 給張○

○雯後,張○雯選定需換班的 所以在建立邊線時裡必須

發點的選定日班別相同時便不能產生邊線的限制條件

在此限制下,我們發現

點其選定日的班別與出發點的選定日班別相同 日的班同樣為 D 班),所以必須取消連線 形連線。

25

確保某人選定日的班一定換到班

,假設張○雯 13 日為選定日並選擇選定日為第二日 以連續兩天多人換班法尋找換班方法。將張○雯的 RD

○雯,乍看之下可達成換班,但薛○鄉的

雯選定需換班的 13 日仍然為 D 班,這樣的換班方法並非正確答案 必須加入若走回出發點的前一個節點其選定日的班別與出 發點的選定日班別相同時便不能產生邊線的限制條件。

表 4-3,換班後選定日班別仍相同

我們發現圖 4-5 原本 4→2 的邊線因為回到出發點 點其選定日的班別與出發點的選定日班別相同(即張○雯 13 日的班與薛

所以必須取消連線,如下圖 4-6 的圖形連線才是正確的圖 為選定日並選擇選定日為第二日(搭配 RD 給薛○鄉,

鄉的 DD 班換給張 這樣的換班方法並非正確答案,

加入若走回出發點的前一個節點其選定日的班別與出

出發點的前一個節 日的班與薛○鄉 13 的圖形連線才是正確的圖

(35)

26

圖 4-6,取消 4→2 的連線後為正確的圖形連線

4.3.4 簡單迴圈的意義

以在單天多人換班程式找不到任何換班方式的張○雯為例,張○雯 13 日的 班別為 D,若換成 E 班或 N 班,則違反大夜班與小夜班隔日皆不可安排白班的 限制,但若把蕭○貞與王○融的 R 班換給張○雯,兩人便違反不能連續上班超 過 7 天的限制,所以張○雯找不到其他換班的方法。若使用兩天多人換班的方法,

以張○雯對應的節點 2 為出發點,參考圖 4-6 的圖形,依循節點所放射出的邊線,

若經過幾條邊線後且節點不重複,最後走回節點 2,即形成一「簡單迴圈(Simple Cycle)」,代表找出一種兩人或多人換班的方法,再檢查第五項的直行限制,即 可找到符合上述六項限制的換班方法。

(36)

27

根據圖 4-6,以節點 2 為出發點,依照放射出的邊線,且走回出發點的前一 個節點 3 與節點 5 的選定日班別皆與節點 2 的選定日班別不同,最後可找出 2→5→2 或 2→5→3→2 兩個簡單迴圈。

4.4 利用回溯法找出所有簡單迴圈

回溯法(Backtracking)為演算法中的一種設計策略,是利用深先搜尋法 (Depth-first Search)找尋解答,其中加入限制函式(Bounding function)避免繼續走 不可行路徑,以減少搜尋時間[16]。

針對一圖形輸入其中一節點,可以運用回溯法找出該節點為出發點的所有簡 單迴圈。首先,以該節點為出發點,然後對整個圖形做深先搜尋,若重複非起點 時則限制函式將視此分支(branch)為不可解的路徑。若重複通過該起點,便找到 一簡單迴圈。

演算法虛擬碼引用於[15]如以下程式 4-1。

(37)

28

// x 陣列:儲存迴圈的一維陣列,index 從 1 開始 // s:出發節點編號

// 呼叫 DFS(s, s, x, 1),啟動所有簡單迴圈的搜尋

DFS(s, u, x, k) {

for all v such that u→v in the graph

if (v == s and the cycle s→x[1]→x[2]→…→x[k-1]→v satisfy the constrain 5) write s, array x[1…k-1] and v;

// 在找到簡單迴圈後檢查直行限制

else if (v is not in x[1…k-1]) {

// 檢查 v 是否為重複出現的非出發點 x[k] = v;

DFS(s, v, x, k+1);

// 延伸到 v 再深先搜尋簡單迴圈 }

}

程式 4-1:利用回溯演算法找出所有簡單迴圈的虛擬碼

以圖 4-6 的節點 2 為出發點舉例說明,運用程式 1 所說明的虛擬碼,根據所 對應的深先搜尋法建立出樹狀圖,如圖 4-7,能找出 2→5→2 和 2→5→3→2 兩 個換班方法。其他分支如 2→1→4,因為最後未能走回出發點而無法形成簡單迴

(38)

圈;如 2→5→3→5,則因為重複拜訪非出發點節點而被限制

圖 4-7,以圖

本論文引用了此演算法虛擬碼並舉例做簡單的說明如何啟動所有簡單迴圈 的搜尋,為了讓讀者更了解整個程式的架構與運作

結果[9]供讀者參考。

29

則因為重複拜訪非出發點節點而被限制。

以圖 4-6 所對應的深先搜尋法所建立的樹狀圖

文引用了此演算法虛擬碼並舉例做簡單的說明如何啟動所有簡單迴圈 為了讓讀者更了解整個程式的架構與運作,在附錄引用了程式碼與測試

所對應的深先搜尋法所建立的樹狀圖

文引用了此演算法虛擬碼並舉例做簡單的說明如何啟動所有簡單迴圈 在附錄引用了程式碼與測試

(39)

第五章 找出排班表中造成無法換班的規則

在第二章文獻回顧中 理人員的排班表為測試資料

些原本在單天多人換班程式下無法找到任何換班方法的問題 換班法都可以找出換班方法

導致在某些特定狀況下在單天多人換班程式時會發生找不到任何換班的問題 且討論為什麼這些問題在單天多人換班法下找不到換班方法

換班法下能獲得解答。

統計單天多人換班程式

排班表共有 97 例找不到任何換班方法的問題 方法的班別為「R 班」,

則是欲換班的班別「非 R 以下將只能安排 R 班的狀況 (一) 若換掉原本的 R 班

如表 5-1,王○娥 9 在這個例子裡,若將 限制,因此王○娥在 會找不到換班方法。

表 5-1,王○娥 9 日的

30

找出排班表中造成無法換班的規則

在第二章文獻回顧中我們有提到,以 2008 年 7 月彰基第二呼吸照護中心護 測試資料,在單天多人換班法下有 97 例找不到換班方法 些原本在單天多人換班程式下無法找到任何換班方法的問題,透過連續兩天多人

找出換班方法。我們再重新回頭檢視排班表間是否存在著某些規則 導致在某些特定狀況下在單天多人換班程式時會發生找不到任何換班的問題 且討論為什麼這些問題在單天多人換班法下找不到換班方法,而在連續兩天多人

統計單天多人換班程式測試 2008 年 7 月彰基第二呼吸照護中心護理人員的 找不到任何換班方法的問題中,其中有高達 85 個找不到的換班

」,也就是說這 85 個情況只能安排 R 班。另外 R 班」,卻也有無法換班的問題發生,我們 班的狀況,歸納出下列 4 類規則並舉例說明:

班,將違反不得連續上班超過 7 天的限制。

9 日的班表為 R 班。雖然 N 班與 N 班間可以排 若將 R 班換成 N 班則違反了「不可連續上班超過

娥在 13 日的班表只能安排 R 班,所以在單天多人換班法下

日的 R 班換掉會違反不能連續上班超過 7 天的限制

找出排班表中造成無法換班的規則

月彰基第二呼吸照護中心護 例找不到換班方法,這 透過連續兩天多人 我們再重新回頭檢視排班表間是否存在著某些規則,

導致在某些特定狀況下在單天多人換班程式時會發生找不到任何換班的問題,並 而在連續兩天多人

月彰基第二呼吸照護中心護理人員的 個找不到的換班 另外 12 個情況,

我們將一併討論。

班間可以排 N 班,但 不可連續上班超過 7 天」的 所以在單天多人換班法下

天的限制

(40)

同樣這個例子,若透過連續兩天多人換班法尋找換班法 天,同時將王○娥 8 日與

互換,則可在不違反連續上班超過

表 5-2,連續兩天多人換班法

(二) E 班與 D 班間只能安排 如表 5-3,張○雯 6 日的 張○雯 6 日的 R 班換成

班或小夜班」與「小夜班隔日不可以排白班

日的 R 班在單天多人換班法下找不到任何換班方法

承上例,若透過連續兩天多人換班法

○雯 5 日與 6 日的 E 班與 的班別避開夾在 E 班與 D

31

若透過連續兩天多人換班法尋找換班法,選擇選定日為第二 日與 9 日的 N 班與 R 班跟郭○婷 8 日與 9 日的

則可在不違反連續上班超過 7 天的限制下達成換班,如表 5

連續兩天多人換班法下可以不違反連續上班超過 7 天的規則

班間只能安排 R 班。

日的 R 班夾在 5 日的 E 班與 7 日的 D 班之間

班換成 D 班、E 班或 N 班都會違反「大夜班隔日不得排白 小夜班隔日不可以排白班」這兩項規則。所以張

班在單天多人換班法下找不到任何換班方法。

表 5-3,E 班與 D 班間只能安排 R 班

若透過連續兩天多人換班法,然後選擇選定日為第二天 班與 R 班跟游○惠 5 日與 6 日的 R 班與 D 班互換

D 班之間而只能安排 R 班的問題,所以可在不違反限制 選擇選定日為第二

日的 R 班與 N 班 5-2。

天的規則

班之間,所以不論 大夜班隔日不得排白

所以張○雯 6

選擇選定日為第二天,同時將張 班互換,讓 6 日 可在不違反限制

(41)

下達成換班,如表 5-4。

表 5-4,連續兩天多人換班法

(三) N 班與 D 班間只能安排 如表 5-5,林○蓉 22 不論林○蓉 22 日的

排白班或小夜班」這項規則 找不到換班方法。

承上例,若透過連續兩天多人換班法 將林○蓉 22 日與 23 日的

因為連續兩天多人換班法能讓

班的問題,所以可在不違反限制下達成換班

32

連續兩天多人換班法下解決在 E 班與 D 班間只能安排

班間只能安排 R 班。

22 日的 R 班夾在 21 日的 N 班與 23 日的 D

日的 R 班換成 D 班、E 班或 N 班都會違反「大夜班隔日不得 這項規則。所以林○蓉 22 日的 R 班在單天多人換班法下

表 5-5,N 班與 D 班間只能安排 R 班

若透過連續兩天多人換班法,這時選擇選定日為第一天 日的 R 班與 D 班跟葉○鈴 22 日與 23 日的 N 班與

因為連續兩天多人換班法能讓 22 日的班別避開夾在 N 班與 D 班間而只能安排 可在不違反限制下達成換班,如表 5-6。

只能安排 R 班的問題

D 班之間,所以 大夜班隔日不得 班在單天多人換班法下

這時選擇選定日為第一天,然後同時 班與 R 班互換,

班間而只能安排 R

(42)

表 5-6,連續兩天多人換班法

(四) N 班與 E 班間只能安排 如表 5-7,游○惠 12 不論游○惠 12 日的

排白班或小夜班」這項規則 找不到換班方法。

承上例,若透過連續兩天多人換班法 11 日與 12 日的 N 班與 R

續兩天換班法在連續兩天同時換班時 而只能安排 R 班的問題,

表 5-8,連續兩天多人換班法

33

連續兩天多人換班法下解決在 N 班與 D 班間只能安排

班間只能安排 R 班。

12 日的 R 班夾在 11 日的 N 班與 13 日的 E

日的 R 班換成 D 班、E 班或 N 班都會違反「大夜班隔日不得 這項規則。所以游○惠 12 日的 R 班在單天多人換班法下

表 5-7,N 班與 D 班間只能安排 R 班

若透過連續兩天多人換班法,選擇選定日為第二天,

R 班跟林○蓉 11 日與 12 日的 R 班與 D 班互換 在連續兩天同時換班時可避開 12 日的班別因為夾在

,則可在不違反限制下達成換班,如表 5-8

連續兩天多人換班法下解決在 N 班與 E 班間只能安排

班間只能安排 R 班的問題

E 班之間,所以 大夜班隔日不得 班在單天多人換班法下

,同時將游○惠 班互換,因為連 夾在 N 班與 E 班間

8。

班間只能安排 R 班的問題

(43)

在(2)、(3)、(4)這 3 班與 D 班間只能安排 R 班 若在一開始排班時能盡量避開 這樣在單天多人換班法下

安排 R 班而找不到任何換班方法的問題 的彈性。

除了如同上述這些例子 方法外,另外有 12 個是非

況,但是這 12 個非 R 的問題在排班表上就沒有這麼有規則性了

一般來說,當要被換班的班別是 是換成 R 班,但是也會有

例如表 5-9,當王○娥 13 班並不違反限制,但賴○

小夜班」以及「不可連續上班超過

表 5-9,13 日王

所以當 13 日王○娥找不到適合的 生找不到任何換班方法的問題

解答,如表 5-10。選擇選定日為第二

34

3 個例子中發現,「E 班與 D 班間只能安排 班」以及「N 班與 E 班間只能安排 R 班」

盡量避開 ERD、NRD 以及 NRE 這樣連續 3 天的排班方式 在單天多人換班法下,也就能盡量避免因為夾在上述這 3 種班表模式

班而找不到任何換班方法的問題,這樣也可以增加護理人員班表換班

除了如同上述這些例子,這 85 個 R 班在單天多人換班法裡找不到任何換班 個是非 R 班但同樣在單天多人換班法裡找不到換班方法的狀

的問題在排班表上就沒有這麼有規則性了。

當要被換班的班別是 D 班、E 班或 N 班時,最直接的換班法就 是也會有不一定可以順利找到適合的 R 班達成換班

13 日的 N 班與賴○怡 13 日的 R 班互換時,

○怡換成 N 班後,則會違反「大夜班隔日不得排白班或 不可連續上班超過 7 天」這兩項限制。

日王○娥與賴○怡班表互換會違反兩項限制

娥找不到適合的 R 班可以換時,在單天多人換班法下便發 生找不到任何換班方法的問題。但是這個問題亦能在連續兩天多人換班法

選擇選定日為第二日,同時將王○娥 13 日與 14

班間只能安排 R 班」、「N

」有其規律性,

天的排班方式,

種班表模式時只能 這樣也可以增加護理人員班表換班上

班在單天多人換班法裡找不到任何換班 班但同樣在單天多人換班法裡找不到換班方法的狀

最直接的換班法就 班達成換班的情況發生。

,王○娥換成 R 大夜班隔日不得排白班或

怡班表互換會違反兩項限制

在單天多人換班法下便發 亦能在連續兩天多人換班法下獲得 14 日的 N 班與 R

(44)

班跟賴○怡 13 日與 14 日的

表 5-10,連續兩天多人換班法解決找不到換班方法的

35

日的 R 班與 D 班互換,則可在不違反限制下達成換班

連續兩天多人換班法解決找不到換班方法的 N

則可在不違反限制下達成換班。

N 班

(45)

36

第六章 換班程式的使用方法與執行結果

本論文的程式是以 borland C++ builder 6.0 所撰寫,使用的作業系統環境為 Windows 7,電腦硬體規格為 Genuine Intel(R) CPU U7300 @ 1.30GH 與 RAM2.00GB,測試資料為彰化基督教醫院第二呼吸照護中心 2008 年 7 月的班 表。

6.1 操作步驟

本程式以視窗方式呈現,提供使用者簡單操作的介面,透過幾個操作步驟選 擇欲換班的護理人員與換班的日期,在短時間內便可找出所有的換班方法,並且 一一列出這些換班方法以提供使用者參考。本章將逐步介紹連續兩天多人換班程 式的使用說明,程式一開始的介面如下圖,圖 6-1。

圖 6-1,程式開始的畫面

(46)

37

(1) 選擇班表:

點選“選擇班表”鍵後可瀏覽資料夾選擇班表,如圖 6-2。

圖 6-2,選擇班表

(2) 顯示班表資料:

選擇班表後程式會自動將護理人員姓名與班表內容讀出並顯示在程式的表 格上,如圖 6-3。

圖 6-3,將班表資料呈現在視窗的表格上

(47)

(3) 選擇選定日:

初始的選定日選項設定

〝選定日〞選擇以「選定日為第一日 圖 6-4。

(4) 換班:

假設編號 15 的陳□□

在要換班的班別上點一下滑鼠左 可行的換班方法一一列在

38

初始的選定日選項設定在選定日為第一日,使用者可依需求在視窗上方的 選定日為第一日」或「選定日為第二日」找出換班方法

圖 6-4,選擇選定日

□□ 9 日需要換班,先選擇選定日後,根據

在要換班的班別上點一下滑鼠左鍵。程式就會自動搜尋方法並且跳出一個視窗將 一一列在這個視窗上,如圖 6-5。

圖 6-5,印出所有換班方法

在視窗上方的 找出換班方法,如

根據表格上的班表 跳出一個視窗將

(48)

(5) 換班方法:

視窗上所列出的換班方法 護理人員的編號,所以根據編號 的 D 班與 D 班給編號 19

10 的程□□;然後再將編號 此便達成換班,如圖 6-6

(6) 換班方法數:

搜尋完所有換班方法後 個換班方法,其中有多少的

39

的換班方法中例如其中的 15→19→10→15,其數字為表格上 所以根據編號對應的護理人員換班方法為,編號

19 的陳□□;編號 19 的陳□□的 N 班與 N 編號 10 程□□的 N 班與 R 班換給編號 15 6。

圖 6-6,換班方法

搜尋完所有換班方法後,在主視窗右下角的欄位中會計算出總共找出了多少 其中有多少的迴圈長度為 2(兩兩互換)的換班方法數以及

其數字為表格上 編號 15 的陳□□

N 班班再給編號 15 的陳□□,如

會計算出總共找出了多少 數以及迴圈長度

(49)

40

為 3~5(透過 3 人~5 人換班)的換班方法數,如圖 6-7。

圖 6-7,視窗上顯示的換班方法數

6.2 結果

程式可以根據想換班的護理人員所選定的換班日找到換班方法,搜尋換班方 法的總花費時間(包括印出換班方法的時間)會因為方法數而異,找到的換班方法 數越多執行的時間就越長。

以圖 5-8 的為例,圖 6-8 的,所有換班方法數共 84 個(迴圈長度 2 的方法 數+迴圈長度 3~5 的方法數= 2 個+ 82 個)總共花費的執行時間為 842 毫秒,也就 是 0.8 秒;圖 6-8 的,所有換班方法數共 1137 個(迴圈長度 2 的方法數+迴圈長

(50)

41

度 3~5 的方法數= 1 個+ 1136 個)總共花費的執行時間為 10639 毫秒,也就是約 11 秒。以程式搜尋換班方法,不僅可以找出所有可行的換班方法,所花費的時 間比起人力搜尋也是相當有效率的

圖 6-8,找到的換班方法數及總花費時間

以同樣的 2008 年 7 月彰基第二呼吸照護中心護理人員排班表為測試資料,

在單天多人換班法下原本找不到任何換班方法的 97 例,在連續兩天多人換班法 下皆可以找到換班方法。

(51)

42

第七章 結論

連續兩天多人換班法可以依照個人需求選擇「選定日為第一日」或「選定日 為第二日」,讓使用者可以有更多選擇。若選擇選定日為第一日時找不到換班方 法,在同樣的選定日下還可以選擇選定日為第二日來搜尋換班方法,反之亦然。

在實務上,換班往往牽一髮而動全身,所以在換班時應盡量避免為了一位護 理人員的換班要求而同時牽動到多位護理人員的班表。在換班時為了避免換班過 於複雜,幾乎不會同時涉及 6 人以上換班,所以程式的迴圈長度限制在 5 以內。

最直接的換班方法為「兩兩互換」,所以一般來說都是先考慮兩兩互換的換班方 法,因此程式另外再統計迴圈長度為 2 的換班方法數提供使用者參考,若找不到 任何兩兩互換的換班方法再尋求 3 人以上的換班方法。

回顧第二章文獻中,單天多人換班法下以 2008 年 7 月彰基第二呼吸照護中 心護理人員排班表為測試資料共有 97 例找不到任何換班方法,同樣的測試資料 在連續兩天多人換班法下都可以獲得解答。

第五章中,回顧整個排班表發現在單天多人換班法下無法找到換班方法的問 題有其規律性。我們將其規則歸納出後,發現在連續兩天多人換班法下可以破壞 這個問題的規則而可以找到換班方法。

程式搜尋換班方法至列出所有換班方法所花費的時間相較於人力搜尋,可節 省大量的時間,且執行程式所占的記憶體約 12KB,所以連續兩天多人換班法在 實務上不僅是有效率的,也可以為換班問題提供更多的選擇。

(52)

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.

(53)

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.

(54)

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);

(55)

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

(56)

47

1->0->4->3->2->1 1->2->0->1 1->2->0->4->3->1 1->2->1

1->2->3->1 1->2->3->4->0->1 1->3->1

1->3->2->0->1 1->3->2->1 1->3->4->0->1 1->3->4->0->2->1

參考文獻

Outline

相關文件

In Case 1, we first deflate the zero eigenvalues to infinity and then apply the JD method to the deflated system to locate a small group of positive eigenvalues (15-20

Then, we recast the signal recovery problem as a smoothing penalized least squares optimization problem, and apply the nonlinear conjugate gradient method to solve the smoothing

Then, we recast the signal recovery problem as a smoothing penalized least squares optimization problem, and apply the nonlinear conjugate gradient method to solve the smoothing

Then, we tested the influence of θ for the rate of convergence of Algorithm 4.1, by using this algorithm with α = 15 and four different θ to solve a test ex- ample generated as

In this paper, we build a new class of neural networks based on the smoothing method for NCP introduced by Haddou and Maheux [18] using some family F of smoothing functions.

For the proposed algorithm, we establish its convergence properties, and also present a dual application to the SCLP, leading to an exponential multiplier method which is shown

/** Class invariant: A Person always has a date of birth, and if the Person has a date of death, then the date of death is equal to or later than the date of birth. To be

• If we know how to generate a solution, we can solve the corresponding decision problem. – If you can find a satisfying truth assignment efficiently, then sat is