陸雨薇,袁 彪
(1.廣西科技大學 機械與交通工程學院,廣西 柳州 545006;2.上汽集團人工智能實驗室,上海 200038;3.賽可智能科技(上海)有限公司,上海 200038)
家庭護理是指以醫(yī)院、社區(qū)和社會護理企業(yè)為主體,由其指定護理人員上門為客戶提供醫(yī)療、輔助醫(yī)療和生活照料等服務.與傳統(tǒng)的住院醫(yī)療相比,家庭護理服務有如下幾個優(yōu)勢[1-2]:1)顧客足不出戶就能享受到個性化的醫(yī)療服務;2)減少住院等所需費用;3)提高醫(yī)療資源(如醫(yī)院的病床等)利用率.目前家庭護理這一服務模式已經得到了大家的認可,且發(fā)展迅速.在此背景下,如何為家庭護理服務模式提供更科學的運作管理理論,使這一服務模式得到更好地推廣與應用,值得我們考慮.
家庭護理中的人員計劃與安排是決定服務質量的重要決策活動之一.客戶通常需要若干周的服務,并指定一周內的服務次數(shù)以及允許服務日期,也稱作服務模式(Service pattern).對于新客戶,需要確定為其服務的護理人員以及具體的護理計劃.而這一決策過程目前是由有經驗的護理人員提前一周靠手工完成,需消耗大量時間和精力.本文正是為解決這一問題而提出的,問題具體描述如下:給定一個計劃期(通常一周),一個客戶集合以及護理人員集合,需為客戶指定護理人員,確定護理人員的服務模式以及每個護理人員每天的訪問路徑.這一問題類似于經典的周期性車輛路徑問題(Periodic Vehicle Routing Problem,PVRP)[3].與PVRP相比,考慮如下約束:1)多類型護理人員約束,不同的客戶需要不同類型的服務,如家庭保潔、注射和物理治療等,這些服務需要不同醫(yī)療護理技能.管理者會按照服務所需技能難度以及護理人員所擁有技能,將客戶和護理人員分類,構成層次化多類型護理人員結構,即最高層次護理人員能服務所有類型客戶,而最低層次護理人員只能服務僅需簡單技能類型的客戶;2)護理連續(xù)性約束,對客戶而言,應盡量避免他們接觸不同的護理人員.在客戶的角度,他們不用在每次服務時都和不同護理人員建立新關系,可減少陌生和不適感,而在護理人員的角度,他們對客戶的身體狀態(tài)十分熟悉,可提供更專業(yè)的服務.護理連續(xù)性約束可用客戶在護理公司接受服務時訪問他的不同護理人員數(shù)量小于或等于某一設定值表示;3)隨機路途時間和服務時間,在實際服務過程中,路途時間與具體的交通狀況相關,服務時間與客戶的身體狀態(tài)相關[4],因此,需考慮隨機的路途時間和服務時間.
本文所提出的問題包含護理人員分配以及路徑優(yōu)化兩個子問題,可使用兩階段算法或集成式算法求解.本文選擇兩階段算法對問題求解,原因如下:1)盡管集成式算法可以求得問題的近優(yōu)或最優(yōu)解,但它只能求解規(guī)模很小的問題,并且所得的解可能會因為取消或增加某一客戶的服務而變得很差或不可行;2)家庭護理人員日調度中的一些約束很難在集成式算法中考慮,如服務優(yōu)先次序約束[5].在所提出的兩階段算法中,使用啟發(fā)式算法估計護理人員的路途時間(即路徑優(yōu)化子問題),設計基于禁忌搜索和整數(shù)規(guī)劃的混合算法求解護理人員分配子問題.在求解護理人員分配子問題后,可以得到兩類信息:一是每個客戶由哪些護理人員服務;二是每個客戶選擇何種服務模式.以這兩類信息作為輸入構建護理人員日路徑優(yōu)化問題,采用已有的一些算法對此問題求解,即可得到護理人員每天的訪問路徑.
在現(xiàn)有研究中,一些學者也提出兩階段算法對周期性護理人員分配問題求解.Begur等[6]研究了護理人員周調度問題,將問題分解為一系列獨立的日調度問題,然后使用簡單的啟發(fā)式算法求解,但并未考慮護理連續(xù)性約束.Borsani等[7]將問題表示為一個護理人員分配模型和調度模型,分配模型為新客戶確定護理人員,調度模型以分配模型的解為輸入,構建護理人員一周的訪問計劃,值得注意的是他們假設路途時間與訪問順序無關.Yal?inda?等[8]首先以均衡化護理人員負荷為目標,確定最好的護理人員分配方案,然后通過求解一個帶服務模式的旅行商問題為每個護理人員確定一周的訪問路徑,同樣值得注意的是第一階段中護理人員工作負荷與訪問順序無關,后來,他們又提出了基于Kernel Regression的方法估計護理人員的路途時間[9].從以上文獻可以看出,目前提出的兩階段算法假設護理人員路途時間與訪問順序無關,只能適用于客戶分布在一個較小區(qū)域內的情況.
本文所研究的問題可概括為:在計劃期H={1,…,h,…}內,為每個客戶i?N選擇和確定滿足技能要求的護理人員k?K,K為護理人數(shù)最大數(shù).每個護理人員k?K擁有的技能或所屬類別為sk(sk=1,…,m),每天正常工作時間長度為D.每個客戶i?N有技能要求si和服務模式集合Pi.客戶i的服務模式p?Pi定義了計劃期內的訪問次數(shù)fi以及可訪問日期bph,如果在服務模式p中第h天需服務,則bph=1,反之,則為0.客戶i? N的服務時間tsi服從正態(tài)分布,即tsi~ N(μi,σi2).客戶i與j間的路途時間ttij也服從正態(tài)分布,即ttij~N(μij,σij2).每個客戶i?N只能被技能等于或高于其技能需求的護理人員k?K服務,即sk≥si.為滿足護理連續(xù)性要求,訪問同一客戶的護理人員數(shù)量不能超過設定值Q,即在客戶接受服務時,最多只有Q個護理人員-客戶對,同時需保證以前周期確定的護理人員-客戶對(i,k)?PNK在本周計劃時仍然滿足.為了構造所提出的混合算法,建立基于集分割的數(shù)學模型,其中,Rhk表示護理人員k在第h天的路徑集合,chkr表示路徑r?Rhk的總成本,ahkri表示客戶i是否在路徑r?Rhk中,若在則為1,反之為0.決策變量定義如下:xhkr為0~1變量,表示最優(yōu)解中是否選擇路徑r?Rhk;yik為0~1變量,表示護理人員k是否服務客戶i;zip為0~1變量,表示客戶i是否選擇服務模式p?Pi.基于以上描述,定義的數(shù)學模型如下:
目標函數(shù)(1)最小化總成本.約束(2)保證每個護理人員選擇一條路徑,注意Rhk中可能包含空路徑(即路徑上不包含任何服務人員);當從Rhk中選擇空路徑時,表示護理人員k在第h天不需工作.約束(3)和約束(4)表示護理人員在周期內按照服務模式訪問客戶.約束(5)和約束(6)滿足客戶的護理連續(xù)性約束.約束(7)確保滿足以前周期所確定的護理人員與客戶關系.約束(8)預先將部分yik因為技能約束設定為0.約束(9)—約束(11)定義決策變量為0~1變量.
路徑r總成本包含3個部分:路途成本T(r)、服務成本S(r)以及加班懲罰成本O(r).以類型為l的護理人員路徑r={n0=0,n1,n2,…,ni,…,nr,nr+1=0}為例,ni表示路徑r上的第i個客戶,nr表示路徑r訪問客戶的數(shù)量,Ct表示單位時間路途成本,Csl表示類型為l的護理人員的單位時間服務成本,pc表示加班懲罰系數(shù).由于客戶間的路途時間以及客戶的服務時間服從正態(tài)分布并且相互獨立,護理人員訪問路徑r的總時間Tr仍然滿足正態(tài)分布,即,按期望值的定義,3種期望成本計算公式如下:
從式(12)—式(14)可看出,對包含相同客戶的路徑而言,路徑總成本只與期望路途時間相關,因此,計算一條路徑的總成本,只需確定該路徑的期望路途時間即可,而這一問題是一個旅行商問題,故采用最遠插入法來求得期望路途時間,這部分將會在數(shù)值實驗中討論.
針對所研究的問題,設計以禁忌搜索和整數(shù)規(guī)劃為基礎的混合算法.
本文所提出混合算法的主要思想為:收集和存儲禁忌搜索算法在迭代過程中產生的中間解或局部最優(yōu)解,使用它們構建整數(shù)規(guī)劃模型(1)—模型(11),利用優(yōu)化軟件求解模型,一方面可以得到禁忌搜索算法在迭代過程中可能遺漏的較好解,另一方面,可以評價禁忌搜索算法最近搜索的效果,如果若干次迭代后,禁忌搜索算法或整數(shù)規(guī)劃模型無法得到更好的解,則說明要引入新解作為搜索的起點.設nTS表示禁忌搜索算法連續(xù)nTS×1 000次迭代未改善當前最好解,nIP表示Cplex連續(xù)nIP次未能改善當前最好解,n1和n2是算法的基本參數(shù).混合算法步驟如下:
Step 1構建初始解s0,并令當前解s=s0;
Step 2以當前解s為起點,使用禁忌搜索算法進行搜索,并按照護理人員k和日期h將每次迭代中鄰域的最好解分解,保存在Rhk中;
Step 3判斷禁忌搜索算法當前1 000次迭代與前1 000次迭代中得到的最好可行解是否變小,如果變小,則說明目前的搜索是有效的,令nTS=0,繼續(xù)當前搜索;反之,令nTS=nTS+1;
Step 4當nTS≥n1時,構建整數(shù)規(guī)劃模型,并使用Cplex求解模型;
Step 5判斷Cplex得到的解與當前最好可行解的大小,如果Cplex的解小于當前最好解,則令nIP=0,將Cplex得到的解作為當前解和最好解,繼續(xù)搜索;反之,令nIP=nIP+1;
Step 6當nIP≥n2時,使用擾動機制對當前最好可行解擾動,擾動后的解作為當前解進行搜索;
Step 7判斷計算時間是否超過設定值,若超過,則算法停止;反之,則繼續(xù)搜索.
禁忌搜索算法(Tabu Search,TS)由Glover于1986年提出,算法主要思想為:首先產生一個初始解s0作為當前解s,然后在當前解的鄰域NH(s)中使用移動評價函數(shù)g(s)選擇最好解作為新的當前解.同時,使用禁忌表記錄已搜索解的歷史信息以避免陷入循環(huán)和局部最優(yōu).目前,禁忌搜索算法已廣泛應用于求解優(yōu)化問題,如定位——路徑優(yōu)化[10]和車輛路徑優(yōu)化[11]等.
本文使用的禁忌搜索算法與Cordeau等[12]在求解周期性車輛路徑問題時提出的相似,但有如下幾點區(qū)別:1)設置約束懲罰系數(shù)α在某一區(qū)間,避免搜索過程中深陷到不可行區(qū)域,而Cordeau等則沒有這一設置;2)使用最遠插入法評價路途時間,而Cordeau等使用GENI(GENeralized Insertion)完成客戶的刪除、插入以及路途時間計算.本文主要介紹禁忌搜索算法中的重要組成部分:初始解構造、禁忌表、特赦準則、鄰域結構以及移動評價函數(shù).
2.2.1 初始解構造
由于在禁忌搜索算法中我們只松弛了護理連續(xù)性約束,故構造初始解時需滿足多類型護理人員約束,步驟如下:
Step 1按客戶位置與護理中心所成角度的升序排列客戶;
Step 2為每個客戶i隨機選擇一種服務模式p?Pi;
Step 3重復Step 4—Step 6,確定第h(h=1,2,…,|H|)天的訪問安排;
Step 4重復Step 5和Step 6,確定類型為l(l=m,m-1,…,1)的護理人員的訪問安排;
Step 5選擇距離護理中心最近的類型為l的客戶i?Nl={j|sj=l,j?N};
Step 6按照Step 1中確定的客戶順序,將類型為l的客戶i?Nl分配給能服務他的護理人員,使目標函數(shù)值增加最小.
2.2.2 禁忌表和特赦準則
禁忌表的目的是為了避免重復搜索并引導算法搜索解空間的其他區(qū)域,這是區(qū)別于其他局部搜索算法的重要特征之一.禁忌表中保存了已搜索過解的信息.本文定義每個解s對應一個屬性集B(s)={(i,k,h):客戶i在第h天由護理人員k服務},這些屬性(即禁忌對象)被保存在禁忌表中.因此,禁忌表可以使用一個|N|×|K|×|H|的三維數(shù)組表示.解s的鄰居s'? NH(s)通過鄰域結構刪除和添加B(s)中的部分屬性后得到.當從護理人員k在第h天的訪問客戶列表中刪除客戶i時,屬性(i,k,h)被標記為禁忌狀態(tài),令禁忌長度為θ,表示在后面θ次迭代中不能在第h天將客戶i重新分配給護理人員k.當包含某一禁忌屬性的可行解優(yōu)于當前最優(yōu)解時,可使用特赦準則對這一屬性解禁.特赦準則是基于每個屬性的特赦水平(Aspiration level),特赦水平定義為搜索過程中包含這一屬性的最好可行解的目標函數(shù)值.
2.2.3 鄰域結構
禁忌搜索算法通過鄰域結構產生新解,采用的鄰域結構如下:1)在第h天,從護理人員k的客戶列表中刪除客戶i,并重新將客戶i分配給同一天能夠服務他的護理人員k'(k'≠k);2)在第h天,如果護理人員k和k'(k'≠k)都能服務客戶i和j(j≠i),交換服務客戶i的護理人員k和服務客戶j的護理人員k';3)從客戶i的服務模式集合Pi中重新選擇一種新服務模式p'代替當前解中的服務模式p,如果第h天在服務模式p中卻不在服務模式p'中(即bph=1和bp'h=0),則將客戶i從這一天刪除,如果第h天不在服務模式p中卻在服務模式p'中(即bph=0和bp'h=1),則將客戶i分配給能服務他的護理人員使目標函數(shù)值增加最小.以上各鄰域的大小分別為 O(|N||H|)、O(|N|2|H|)和.
2.2.4 移動評價函數(shù)
移動評價函數(shù)是為選取鄰域中的解而設計的一個評價公式,與遺傳算法中的適應度函數(shù)相似.本文使用的移動評價函數(shù)g(s')包含3個部分:目標函數(shù)值c(s')、護理連續(xù)性約束違反懲罰值q(s')和多樣性函數(shù)值d(s'),即g(s')=c(s')+αq(s')+d(s').c(s')定義為目標函數(shù)值,包括路途成本、服務成本以及加班懲罰成本.q(s')定義為護理連續(xù)性約束違反懲罰值,具體計算如下:對客戶i,如果解中分配給i的護理人員數(shù)量(包含以前周期確定的)小于或等于Q時,表示客戶i的護理連續(xù)性滿足,無需懲罰;如果分配給i的護理人員數(shù)量(包含以前周期確定的)大于Q,若以前確定的護理人員數(shù)量已等于Q,計算解中實際分配的護理人員(不包含以前周期確定的)訪問客戶i的總次數(shù),并以此作為懲罰,若以前確定的護理人員數(shù)量小于Q,從解中選擇訪問i次數(shù)最多的護理人員作為虛擬的以前確定的護理人員,直到這一數(shù)量等于Q時,計算解中分配的其他護理人員訪問客戶i的總次數(shù),并以此作為懲罰.d(s')定義為多樣性函數(shù)值,只有當鄰域中的解s'的目標函數(shù)值c(s')與護理連續(xù)性約束違反懲罰值q(s')之和大于當前解s時才使用,與c(s)、ρikh和的乘積相關,計算公式如下:其中,ρikh表示搜索過程中屬性(i,k,h)?B(s')B(s)被添加到解中的次數(shù),λ表示當前的迭代次數(shù),γ表示多樣性系數(shù).
當整數(shù)規(guī)劃模型無法得到更好解時,說明當前搜索已陷入局部最優(yōu),因此,使用擾動機制[13]對當前最優(yōu)解擾動,以產生多樣性的解.具體過程如下:首先隨機選擇一個客戶i以及離客戶i最近的w個客戶,w為之間的隨機整數(shù);然后將這w+1個客戶從當前最優(yōu)解中的分配關系刪除,重新為他們分配新的服務模式;最后,按照隨機的順序為他們分配新的護理人員使目標函數(shù)值增加最小.
首先介紹期望路途時間估計算法,然后描述算例的生成過程,接著驗證所提出算法的有效性,最后比較和分析多類型護理人員與護理連續(xù)性約束對總成本的影響.本文所提出的算法使用C++編程,整數(shù)規(guī)劃模型采用IBM ILOG Cplex 12.5求解,在Intel E5-2670 2.6 GHz CPU和10 GB內存的電腦上測試,操作系統(tǒng)為Linux.
為選擇合適的期望路途時間估計算法,比較了最遠插入法[14]、不同鄰居個數(shù)np值下的GENI和GENIUS(Unstring and String)[15].在[0,100]2的平面上,出發(fā)點為(50,50),生成服從均勻分布的100個點,從中分別選擇5、8和10個點作為要訪問的客戶,隨機生成1 000個實例,使用以上算法構建從出發(fā)點開始,訪問指定客戶點后,返回出發(fā)點的路徑并計算路途時間,np值設置在2~6.實例最優(yōu)解使用Cplex求解.表1列出了3種算法1 000個實例的平均路途時間和總計算時間、3種算法得到的最好解與最優(yōu)解之間的Gap(G-Gap、GU-Gap和FI-Gap).
表1 不同啟發(fā)式算法求解1 000個實例的結果Tab.1 Result summary of 1 000 cases under different heuristics
表1 (續(xù))Tab.1 (Continued)
表1表明:G-Gap、GU-Gap和FI-Gap分別小于0.43%、等于0和小于0.84%,GENIUS和np等于6時,GENI所得的解優(yōu)于最遠插入法.但要取得如此好的解,需要比最遠插入法消耗更多的時間,這將會大大增加混合算法的計算時間.而最遠插入法的Gap相對較小,是可以接受的,因此,綜合解的質量和計算時間,選擇最遠插入法作為最終的路途時間估計算法.
為了測試算法的性能,生成包含100和200個客戶的算例各5個.具體過程如下:在二維平面[0,100]2隨機產生|N|個點,護理中心的坐標為(50,50).令兩點間的路途時間均值μij等于其歐幾里德距離,標準差σij=0.25μij,單位時間路途成本ct為1.0.客戶和護理人員分為3類,類型為1、2和3的客戶比例分別為50%、30%和20%,對應的護理人員數(shù)量與客戶總數(shù)量的比值分別為4%、2%和2%,單位時間服務成本cs1、cs2和cs3分別為0.6、0.8和1.0.客戶服務時間的均值μi從均勻分布[15,30]中隨機產生,標準差σi=0.25μi.護理人員正常工作時間長度D為300,加班懲罰系數(shù)pc為5.0.一個計劃周期包含5天,客戶服務模式分為4類,包含訪問次數(shù)、組合數(shù)、可能組合以及每種模式所占百分比,如表2所示,“可能組合”中的值表示了客戶允許服務的日期,以服務模式3中的“21”為例,將它轉化為二進制數(shù)“10101”,表示客戶只在周一、周三和周五接受服務.對于護理連續(xù)性約束以及以前確定的護理人員-客戶對,設Q=2,40%的客戶已經分配了2個護理人員,20%的客戶已分配了1個護理人員.
表2 4種服務模式介紹Tab.2 Introduction of four service mode
通過一系列測試,本文所提出混合算法的參數(shù)取值如下:禁忌搜索算法中的禁忌長度θ為[7.5lg|N|],多樣性系數(shù)γ為0.015,護理連續(xù)性約束懲罰系數(shù)α的初始值、最小值和最大值分別為200、0.000 1和1 000,懲罰系數(shù)α的更新系數(shù)為0.5,混合算法中Cplex每次最長求解時間為1 000 s,n1和n2均等于2,預定計算時間為0.2|N|min.
為了驗證所提出混合策略的有效性,比較使用和未使用這一策略的禁忌搜索算法,分別用TSIP和TS表示,兩種算法的計算結果見表3.表3中列出了TS得到目標函數(shù)的最小值和平均值,TSIP得到目標函數(shù)的最小值和平均值,兩種方法最小值之間的相對偏差(Gap%),構成最大整數(shù)規(guī)劃模型的平均列數(shù)以及搜索過程中多次求解整數(shù)規(guī)劃模型總時間的平均值(IP CPU).
表3 計算結果比較Tab.3 Results comparison
表3所示結果表明,對所有實例而言,TSIP得到目標函數(shù)的最小值都要比TS小,兩者之間Gap的均值為1.24%,最大的Gap為2.51%(R203);同時,TSIP計算目標函數(shù)的平均值也優(yōu)于TS.綜合以上結果可以看出,所提出的混合策略確實改善了禁忌搜索算法的性能.在整數(shù)規(guī)劃模型方面,構成最大整數(shù)規(guī)劃模型(即搜索過程中最后一次構成的整數(shù)規(guī)劃模型)的平均列數(shù)為17 991.33,搜索過程中所有整數(shù)規(guī)劃模型的平均求解時間為245.03 s(約4.08 min),相對于算法的總計算時間(20 min和40 min),這一求解時間還是比較合理的,即在合理的時間內整數(shù)規(guī)劃模型能為禁忌搜索算法提供新解或評估搜索效果.
本文所研究的問題主要考慮了多類型護理人員和護理連續(xù)性兩個約束,前者是為了合理地利用人力資源及節(jié)約運營成本,而后者是為了提高服務質量以及客戶滿意度.以R201為例,分別對原問題中的這兩個約束松弛,討論它們對服務成本、路途成本、加班懲罰成本以及總成本的影響.仍然使用本文所提出的算法對松弛約束后的兩個問題求解,選擇10次計算中最好的解比較,具體成本見圖1.
圖1 不同約束間的成本比較Fig.1 Cost comparison under different constraints
從圖1中可以看出,只使用一種類型護理人員時,服務成本增加了32.50%,路途成本和加班懲罰成本分別下降了0.91%和34.56%,總成本增加了12.73%.服務成本增加的原因在于:使用一種類型護理人員時只能使用最高層次護理人員,而最高層次護理人員的單位時間服務成本cs3是最大的(為1.0).路途成本和加班懲罰成本減小是因為:最高層次護理人員可以服務任何類型的客戶,因此,護理人員可以按最優(yōu)路徑(忽略類型)服務客戶,而不用因為技能不足只能服務更遠的客戶.從總成本來看,雖然單一類型護理人員減小了路途成本和加班懲罰成本,卻大大提高了服務成本,從而增加了總成本,故使用多類型護理人員確實能夠減少公司總運營成本.
從圖1中也可看出,無護理連續(xù)性約束時,服務成本增加了1.43%,路途成本和加班懲罰成本分別下降了11.05%和15.35%,總成本減小了5.76%.服務成本增加可能是因為:某些高層次護理人員在他們的服務路徑上訪問了一些低層次的客戶,而這些低層次客戶如果被對應層次的護理人員服務,雖然服務成本有所下降,但路途成本會增加更多,因此,應用這些高層次護理人員可使總成本增加最小.而路途成本和加班懲罰成本下降的原因在于:松弛護理連續(xù)性約束后,護理人員可以選擇服務的客戶集變大,即客戶不再因為已分配的不同護理人員數(shù)量達到設定值而拒絕某一護理人員服務.從總成本來看,松弛護理連續(xù)性約束的確減少了總成本,但成本減少是以降低客戶服務質量以及滿意度為代價的,故公司管理者在決策時需考慮總成本和客戶滿意度間的平衡.
研究了考慮多類型護理人員、護理連續(xù)性和隨機時間約束的周期性護理人員分配問題,針對問題的分配和路徑優(yōu)化部分,分別采用基于禁忌搜索和整數(shù)規(guī)劃的混合算法以及最遠插入算法進行求解.取得了如下成果:1)在周期性家庭護理人員分配問題中首次同時考慮了多類型護理人員、護理連續(xù)性和隨機時間3個約束;2)將問題分解為一個分配子問題和若干個路徑優(yōu)化子問題,分別使用基于禁忌搜索和整數(shù)規(guī)劃的混合算法以及最遠插入算法求解;3)定量地比較和分析多類型護理人員以及護理連續(xù)性約束對總運營成本的影響,為管理者提供了明確的決策依據(jù).
以本文研究的問題為基礎,以后的研究可從以下兩個方面展開:1)以本問題的解為輸入構建每天的護理人員調度與路徑優(yōu)化問題,并設計相應的優(yōu)化算法;2)尋找更有效的路途時間估計算法;3)設計更多的元啟發(fā)式算法求解所提出的問題,如蟻群算法[16]、遺傳算法[17]或粒子群算法[18]等.