我正在尝试实施一个团队选择算法 - 比如说我们每个人都有基于他们的卓越性订购的技能:P1 {ruby,python,java}意味着他比java更精通ruby,类似P2 ..所以上。我有项目Proj1,需要人们有一些技能{比如ruby,python等},Proj2等。我如何在项目中分配人员以进行公平分配(假设一个人只能在一个项目上工作)? / p>
答案 0 :(得分:1)
Linear programming可以在此处应用。您需要根据可以最大化或最小化的目标来定义公平分配。然后根据项目添加约束。您可以使用任何LP解算器解决此问题,例如: lpsolve。从维基百科引用LP的历史
Dantzig最初的例子是找到70的最佳作业 人到70个工作岗位。
希望这有帮助。
答案 1 :(得分: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
同样,这是非常推测的解决方案,因为问题定义并不完整。 无论如何,这不是一个糟糕的运动..
答案 2 :(得分: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。