我想解决Python的问题(就像编程谜语)。这不是一个练习或与此相关的任何事情,而是我想的东西,我想找到一个解决方案。
问题描述:
业务生产的最终得分将是每个职位中每个得分的总和。我想找到得分最高的组合。
一些想法:
那么,我的下一个选择应该是什么?任何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
然而,这与旅行商问题类似,最终不是最高组合。
答案 0 :(得分:0)
如果我已经读过这个权利,每个人对每个职位都有不同的分数,并且你想在所有人和职位组合中找到最高分 - 即你必须计算每个职位的每个人得分。
我无法想出表达这种与旅行商问题相同的方式 - 虽然这是相反的 - 有效地找到最高分组合而不是最低组合。 / p>
如果是这种情况,那么你能够在合理的时间内(对于任何大型数据集)可靠地做到的是获得一个接近并且可能完全是最佳的次优分数,但是不可能证明它是次优的或最优的。
尝试使这个更简单的一种方法是优先考虑您想要填补的位置,并按优先顺序获得每个位置的最高分 - 但是与非相比,这甚至可能不是最接近的最佳解决方案-prioritised position list。
答案 1 :(得分:0)
问题在二分图或matching中称为最大assignment problem。它由Hungarian algorithm完成。
在维基百科页面上implementations是不同语言的。有一个带有实现的python库munkres。