體現公平性公式在規劃問題中的應用

本文是在Optaplanner創始人 Geoffrey De Smet先生的一篇文章《Formula for measuring unfairness》的基礎上進行翻譯而成。因爲其博文發表在Optaplanner的官網上,因此,其行文過程中存在一定的上下文默認情況,如果直譯原文,將會大大降低其可讀性。因此,本文是在原文的基礎上添加一些本人修飾的表達而成。

負載均衡在Optapalnner的應用案例中是一種極爲常見的約束,特別是做一些人員排班等場景,各人的工作量需要儘可能公平分配。但是,說起來容易做起來難。本篇讓我們來研究一下這個具挑戰性的問題。

本文中,我們使用以下案例:有15個煩人的任務,需要分配給5個員工,每個任務需時1天來完成,且每個任務都有不同的人員技能要求。

何謂公平?

我們先來看看兩個關於公平,但又對立的定義:

  1. 如果大多數員工都認爲對自己公平的,那這個方案就是公平的。
  2. 對於分得最多任務的員工而言,其所分的任務越少,則這個安排就越公平。(即越平均越公平)

很顯然,因爲我們想將方案調整到對所有人都是平等,第2個定義更正確。此外,如果爲了讓幾乎所有人都高興,我們把所有任務都分配給一個人(例如都分給阿Ann),那麼她很可能馬上就走人了。因此,這種想法不可行。如下表:

按公平性對各個方案進行排序

我們來看看同一問題下的若干任務分配方案,都是15個煩人的任務:

以上是將7個方案的公平程度,從高到低排列。也許這些方案有些是不可行的,因爲有些任務是有特定的技術要求。從上表可以看出,所有方案中,阿Ann都滿足"分到最多任務"的條件。那麼,我們如何對比阿Ann具有相同任務數的兩個不同方案呢?

我們截取阿Ann的任務數相同的兩個方案(C和D)如下表:

在這種情況下,我們看看除最不公平的Ann以外,正處於第二不公平的員工Beth的任務分配情況, 在此基礎上,我們最小化她的任務,按照公平定義的第2條,因阿Ann的任務任務數在兩個方案中不變,這兩個方案中,對於分得第二多任務的Beth,若分得的任務越少,則越公平。

綜上,我們找到了公平性的定義 - 儘可能平均,那麼我們應該如何實現它呢?

衡量公平的方式

理想情況下,我們想通過計算出一個懲罰性分值,用於衡量一個方案的公平性。分值越低越公平。我們應該如何計算這個分值呢?我們先來看看一些公式。

離均差

因爲在完美公平的分配方案中,所有的員工分得的任務數是平均的,如果我們簡單地加總每個員工的任務數,再與均值對比,會怎麼樣?

我們先看看絕對離均差與平均離均差兩個公式,並對上表的各個方案進行,使用這兩個公式進行計算:

絕對離均差:

平均離均差:

兩個衡量公式計算出來的結果如下:

上表的測量結果相當糟糕。在表中:

  1. 對比方案B與方案C(兩個方案的公式計算結果值一樣),它們公平性一樣嗎?不是的,因爲兩個方案中,各人的任務數不同。
  2. 再對比方案D與方案E,前者兩公式的計算結果都比後者高,那麼方案D真的比方案E差嗎?也不是的,問一下阿Ann就知道了,方案E中她竟然分得6個任務。

方差與標準差

在統計學上,方差與標準差用於計算數據的離散程度。聽起來好像正滿足我們需求,我們來看看相關公式:

方差:

標準差:

離均差的平方:

方差乘以n

離均差的平方根:

四種公式的計算結果:

上表可見,這四個公式對於公平性衡量結果已經不錯,但仍未夠理想。例如按4個公式計算結果一致的方案D和E,理論上應該是具有相同的公平程度的,但事實上這兩個方案公平性並不一致。

最大值

如果我們對每個方案中,取最大任務數,作爲公平性的衡量標準會怎麼樣呢?

其公式應該是:

那麼應用於7個方案,其結果是:

這種衡量方式比方差還糟,它只關注一個員工(任務數最大那個)。因此,這種方式完全拋棄了員工之間的公平性。如果只是針對一個員工衡量其公平性還可行,但當對數據衆多的員工一起衡量時就不行了。

任務數列

如果我們不使用任何公式作爲公平性衡量標準,我們把所每個方案中,每個員工的任務數都列出來,形成一個任務數的數列,並從小到大把這數列排序,會怎麼樣?

從上表可以看,可以完美地對比各方案的公平性!那麼在Optaplanner裏要實現這種衡量方式,我們需要針對每個員工定一個分數級別,Optaplanner會按分數級別進行排序,來找最佳方案。但是,如果我們需要排的員工數量非常大呢?要實現這種衡量方式,除了在運行過程要消耗大量的內存外,如此大數量的評價級別,會與其它約束產生衝突,也難以實現。

不存在單獨的約束

在規劃問題中,公平性是一種典型的軟約束。但在同一個規劃問題中,同時存在其它軟約束,這些約束也是需要進行優化考慮的。因此,我們需要爲這些約束添加相應的權重,令它們互相制衡。

舉例

例如同樣是上述的任務分配規劃問題,存在一個稱爲優先級約束,它的重要性是10倍於公平性約束。我們再往這個問題中添加1500個任務,我們看看其分配方案開來是怎樣的:

計算軟約束分數時,我們把公平性約束分數乘以5倍並加總,再取負。

接下來我們開始處理:

用單一數值表示

每個方案的任務數列並不代表一個單獨的數值,因爲這個數列中的每個數,對應於不同的評分級別。因此,任務數列無法跟優先級約束進行綜合評價。如下表:

懲罰分數隨着違反次數的增長而增長

如何我們將問題擴展到1500個員工,我們會發現,若取最大任務數作爲約束,則該約束會被優先級約束矮化。

類似地,平均離均差、方差及標準差等衡量方式,其公平性,也會隨着數量(即問題規模,通過任務與員工的數量體現)增大,而被矮化。如下表:

因此,隨着公平性約束違反量的增多,衡量公平性的比重也應該隨之增大。

公平性違反比重,不能隨着違反量的增大而逞指數式增長

另一方面,當數據量增大時,公平性的違反比重不能對其它的約束起到矮化作用。如果使用方差作爲衡量方式則會出現此情況,見下表。

結論

對於上述討論到的公平性衡量方式:

  • 絕對離均差作爲公平性衡量方式時效果最差。
  • 離均差的平方根作爲公平性衡量方式,未盡完美但夠用。

因此,推薦的方法是離均差的平方根::

其效果見下表:

補充說明

處理的問題中,若存在非均等員工時。例如,有些員工的工作時候只有其它員工的一半,在將其代入公式計前,需要將他們可分配的任務數乘上他們FTP(full time equivalent,全職時間等價值)的倒數。其它需要考慮非均待員工的因素(例如殘疾或人才保留對象),也可以使用類似的方法,或使用一些單獨的約束進行區分,具體辦法需視現實的業務需求而定。

 

原文地址:

Formula for measuring unfairness​www.optaplanner.org

 

如需瞭解更多關於Optaplanner的應用,請發電郵致:[email protected]
或到討論組發表你的意見:https://groups.google.com/forum/#!forum/optaplanner-cn
若有需要可添加本人微信(13631823503)或QQ(12977379)實時溝通,但因本人日常工作繁忙,通過微信,QQ等工具可能無法深入溝通,較複雜的問題,建議以郵件或討論組方式提出。(討論組屬於google郵件列表,國內網絡可能較難訪問,需自行解決)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章