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

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

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

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

何謂公平?

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

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

很顯然,由於咱們想將方案調整到對全部人都是平等,第2個定義更正確。此外,若是爲了讓幾乎全部人都高興,咱們把全部任務都分配給一我的(例如都分給阿Ann),那麼她極可能立刻就走人了。所以,這種想法不可行。以下表:微信

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

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

以上是將7個方案的公平程度,從高到低排列。也許這些方案有些是不可行的,由於有些任務是有特定的技術要求。從上表能夠看出,全部方案中,阿Ann都知足"分到最多任務"的條件。那麼,咱們如何對比阿Ann具備相同任務數的兩個不一樣方案呢?負載均衡

咱們截取阿Ann的任務數相同的兩個方案(C和D)以下表:工具

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

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

衡量公平的方式

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

離均差

由於在完美公平的分配方案中,全部的員工分得的任務數是平均的,若是咱們簡單地加總每一個員工的任務數,再與均值對比,會怎麼樣?

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

絕對離均差:

平均離均差:

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

上表的測量結果至關糟糕。在表中:

  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的應用,請發電郵致:kentbill@gmail.com
或到討論組發表你的意見:https://groups.google.com/forum/#!forum/optaplanner-cn
如有須要可添加本人微信(13631823503)或QQ(12977379)實時溝通,但因本人平常工做繁忙,經過微信,QQ等工具可能沒法深刻溝通,較複雜的問題,建議以郵件或討論組方式提出。(討論組屬於google郵件列表,國內網絡可能較難訪問,需自行解決)
相關文章
相關標籤/搜索