2012-08-04 35 views
1

我想實現一個團隊選擇算法 - 比如我們有n個人都有基於他們的優點排序的技能:P1 {ruby,python,java}這意味着他比ruby更精通ruby,同樣P2 ..等等。我有項目Proj1,需要具備一定技能的人(比如說ruby,python等),Proj2等。我如何在項目之間分配人員進行公平分配(讓我們假設一個人只能在一個項目上工作)?基於技能的建築團隊

+0

請說明您認爲什麼「公平」?你沒有考慮到程序員之間的區別:P1的Java比P2更好,他們都有最大的經驗 - P1更適合需要Java的項目嗎? – 2012-08-04 08:42:33

+0

公平地爲所有團隊中的每個技能分配「最好的技能」程序員 – Hari 2012-08-04 11:22:25

回答

1

Linear programming可以在這裏應用。您需要根據可以最大化或最小化的目標來定義公平分配。然後根據項目添加約束。您可以使用任何LP解算器解決此問題,例如lpsolve。從維基百科引用LP的歷史記錄

Dantzig最初的例子是找到70 人的最佳作業爲70個工作。

希望這會有所幫助。

+0

+1線性規劃很適合,只是問題的定義很差 – 2012-08-04 09:35:17

1

這裏是我的建議,其中填補了我的假設問題定義差距。這類似於

您在程序員的佔有分配重量每一個技能線性在Ankush的回答編程方法:

P1{java,ruby,python} -- P1{1, 0.5, 0.25} 
P2{ruby,python} -- P2{1, 0.5} 
P3{python,ruby,java} -- P3{1, 0.5, 0.25} 

現在你的項目的要求是:

項目{使用Java,Python}

所以,你採取每個程序員的權重,乘以1(技能要求)或0(技能不要求):

P1_suitability = 1*1 + 0.5*0 + 0.25*1 = 1.25 
P2_suitability = 1*0 + 0.5*1 = 1 
P3_suitability = 1*1 + 0.5*0 + 0.25*1 = 1.25 

您選擇P1和P3到項目

另一個項目要求:

項目{紅寶石,蟒蛇}

計算適用性:

P1_suitability = 1*0 + 0.5*1 + 0.25*1 = 0.75 
P2_suitability = 1*1 + 0.5*1 = 1.5 
P3_suitability = 1*1 + 0.5*1 + 0.25*0 = 1.5 

您爭取P2和P3爲您其他項目

同樣,這是非常推測性的解決方案,因爲prob lem的定義不完整。 無論如何,這不是一個壞的練習..

+0

不錯的解決方案..但是我想添加一個程序員可以工作的約束一次只有一個項目。我們如何擴展這些以便團隊「均勻」熟練? – Hari 2012-08-04 11:24:39

+0

我預計下一個約束是「我想要一定數量的程序員在一個項目上」:) – 2012-08-04 11:48:45

+0

我在想那個:) – Hari 2012-08-04 14:20:04

0

這是另一種線性規劃的方法,基於理論,沒有人注意到,如果你早點結束,但如果你遲到完成你很大麻煩。

對於每個項目,估計每個技能所需的標準程序員小時數。

對於每個程序員和每種技能,估計他們必須工作多長時間(因爲他們的特定技能水平)才能產生一個標準程序員小時的價值。

然後你需要解決一個線性程序,其中大部分未知數的形式爲Pijk,其中Pijk是程序員我花費在項目k的技能j上的時間。

您立即有約束SUM_j,k Pijk < = Qi,其中Qi是程序員我必須在所有項目上剩餘的總時間。

在項目k的技能j上完成的工作總量是SUM_i Pijk * Eij,其中Eij取決於程序員我在技能j上的優秀程度。給定Pijk,特定活動的鬆弛量爲Sjk = SUM_i Pijk * Eij - Wjk,其中Wjk是該技能和項目的總工作量。如果任何項目的任何技能的最小松弛量是S,那麼我們有約束S < = Sjk。由於缺少最後期限是昂貴的,我聲稱一個好的目標函數是最大化S,任何項目的任何技能的最小松弛量。所有這些都是作爲一組線性不等式給出的,因此您應該能夠找到導致最大可能S的Pijk作爲線性規劃問題。