在分数的基础上找到变量的组合

时间:2014-05-11 12:58:26

标签: python combinations combinatorics puzzle traveling-salesman

我想解决Python的问题(就像编程谜语)。这不是一个练习或与此相关的任何事情,而是我想的东西,我想找到一个解决方案。

问题描述:

  • 假设我的公司有10个不同的工作岗位。
  • 每个职位都有几个不同的子职位。例如(积极,放松,正常)。但是,每个职位的子职位都不一样。其他有1,其他有2,其他3。
  • 我有20个人,他们的表现得分分别位于每个位置和子位置。

业务生产的最终得分将是每个职位中每个得分的总和。我想找到得分最高的组合。

一些想法:

  • 并非所有人都能得到这份工作,因为这些职位的人数少于人数。
  • 我不能让两个人处于同一个位置。
  • 我的第一次尝试是取得每个人的最高分,并试图逐个填补所有职位。但最终出现了问题。类似于旅行推销员的问题。

那么,我的下一个选择应该是什么?任何Python实现的想法?

编辑:更接近Python的更多细节

positionslist = [pos1, pos2, pos3, pos4, pos5, pos6, pos7, pos8, pos9, pos10]
subpositions = {"pos1":["A","B"], "pos2":["B","C"],"pos3":["A","B","C"],"pos4":["A"],"pos5":["A","B"],"pos6":["A","B","C"],"pos7":["B"],"pos8":["C"],"pos9":["A","C"],"pos10":["A"]

peoplelist = [{"pos1 A":15,"pos1 B": 8, "pos2 B": 2, "pos2 C": 4, "po3 A": 2, "pos3 B":5...}, {"pos1 A":1, "pos1 B":23,"pos2 B":11,.....},.........]

#run the code

print "best combination:" result

best combination:
pos1 B, person 3, score 23
pos2 C, person 5, score 11
pos3 A, person 18, score  ..
pos4 
pos5
pos6
pos7
pos8
pos9
pos10
Total Score: ....

正如我所说,我在伪代码中的实现是:

for position in positionlist:
    for every sub-position:
        find the highest score from every person
    find the highest sub-position from the previous step
    remove that person from the peoplelist
    store the position with the sub-position and the person

然而,这与旅行商问题类似,最终不是最高组合。

2 个答案:

答案 0 :(得分:0)

如果我已经读过这个权利,每个人对每个职位都有不同的分数,并且你想在所有人和职位组合中找到最高分 - 即你必须计算每个职位的每个人得分。

我无法想出表达这种与旅行商问题相同的方式 - 虽然这是相反的 - 有效地找到最高分组合而不是最低组合。 / p>

如果是这种情况,那么你能够在合理的时间内(对于任何大型数据集)可靠地做到的是获得一个接近并且可能完全是最佳的次优分数,但是不可能证明它是次优的或最优的。

尝试使这个更简单的一种方法是优先考虑您想要填补的位置,并按优先顺序获得每个位置的最高分 - 但是与非相比,这甚至可能不是最接近的最佳解决方案-prioritised position list。

答案 1 :(得分:0)

问题在二分图或matching中称为最大assignment problem。它由Hungarian algorithm完成。

在维基百科页面上implementations是不同语言的。有一个带有实现的python库munkres

相关问题