集合覆蓋問題、最大覆蓋問題、呼叫中心排班問題閒談

 

一、集合覆蓋問題

    集合覆蓋問題(Set Covering Problem,簡稱SCP)是運籌學研究中典型的組合優化問題之一,工業領域裏的許多實際問題都可建模爲集合覆蓋問題,如資源選擇問題、設施選址問題(移動基站的選址、物流中心的選址)等。

    SCP的一個典型應用描述如下:要在一個城市建造若干個消防隊駐紮地,使得全城的每一個建築物都能在某個消防隊的5分鐘車程內。在不同的地方建造駐紮地都有相應的代價,那麼在哪些地方建造駐紮地能滿足上述條件且花費的總代價最低就成爲待解決的問題。

    集合覆蓋問題已被證明是一個NP完全問題,沒有多項式時間精確算法,因此實際應用中,往往採用一些近似算法,如貪婪算法,或元啓發式算法,如蟻羣算法、禁忌搜索算法、遺傳算法來求得近似最優解。

    集合覆蓋問題也可從設施選址的角度描述如下:待建的設施點集合爲N,需要滿足服務的需求點的集合爲M,每個設施點都能覆蓋一定範圍內的需求點。集合覆蓋問題就是從設施點集合N中找出數量最少的子集去覆蓋全部的需求點。當每個設施點都有一定的代價(建造費用、地價)等,這個時候集合覆蓋問題就是選擇代價最低的一組設施點去建造設施,使其覆蓋全部的需求點。這個叫帶有權重的集合覆蓋問題。

二、最大覆蓋問題

    最大覆蓋問題:但現實情況是,我能提供的錢(代價)有一個上限。我必須限定的錢去建造足夠多的設施,使其儘可能的滿足需求。那麼這個問題就叫最大覆蓋問題。最大覆蓋問題就是在代價被限定的條件下,去選擇設施點建造設施,使其最大限度的覆蓋需求點。它的目標變成了覆蓋範圍最大,而總代價變成了約束條件。

三、部分覆蓋問題

    部分覆蓋問題(也叫廣義最大覆蓋問題):主要是針對最大覆蓋問題的一個補充,即把是否覆蓋的二元(要麼覆蓋,要麼不覆蓋)變成了覆蓋程度的一個衡量,每個需求點都有其各自的覆蓋程序。部分覆蓋問題的目標就是使覆蓋需求點的總權重達到最大。

四、排班問題

    其實呼叫中心排班問題就可以歸結爲部分覆蓋問題,準確的說是M/G/P排隊系統的部分覆蓋問題。因爲顧客有多個,每天每個時間點的顧客數量是隨機的,那麼排班問題就是這一整天我如何安排話務員數量,能儘可能的覆蓋顧客的話務,並且這一整天可供安排的話務員(提供服務的設施)數量是一定的。

 

    以上各問題,當規模較小時,可以用整數規劃的分支定界法(先求解原問題的線性鬆弛問題,對解向量中的非整數部分再進行分支定界)、拉格朗日鬆弛算法(利用拉格朗日算子鬆弛掉原問題中難以處理的約束,從而將問題變爲較易解決的拉格朗日問題,並通過求取拉格朗日對偶問題而逐步逼近獲取原問題的最優解),當規模比較大時,可以採用元啓發式算法來求得近似最優解。如蟻羣算法、禁忌搜索算法、遺傳算法等。

    目前,國內對於這些問題已經有所研究,特別是集合覆蓋問題,相關文獻較多。但多數是給出近似算法後,進行理論驗證,而缺少數據實驗驗證。個別有數據實驗的文獻,又因爲實例規模較小,而沒有什麼說服力。實例數據可見:

    OR-Library:http://people.brunel.ac.uk/~mastjjb/jeb/orlib/files/ (SCP開頭的實例爲集合覆蓋問題),共有數十個實例。

    其中各實例規模一般較大,如scp41,爲200×1000的規模。即待選設施點爲200個,需求點爲1000個。scpcyc06(240×192)、scpcy07(672×448)等爲不帶權重的集合覆蓋問題,規模較小。文獻《一種遺傳算法在集合覆蓋問題中的應用研究》(陳亮)中針對四個實例進行了數值實驗,但均未能得到最優解。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章