我想用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: ....
如前所述,我在伪代码中的实现是:
^{pr2}$然而,这类似于旅行商问题,最终得到的组合不是最高的。在
这个问题称为二部图中的最大值matching,或assignment problem。由Hungarian algorithm完成。在
在维基百科页面上,implementations有不同的语言。有一个实现的python库munkres。在
如果我读对了,每个人在每个职位上都有一个不同的分数,你想找到所有人和职位的最高分数,也就是说,你必须计算每个职位的每个人的分数。在
我想不出一种表达这一点的方法,它与旅行推销员问题不同——尽管这是相反的——有效地找到最高得分的组合,而不是最低的组合。在
如果是这样的话,那么在合理的时间内(对于任何大的数据集),你所能做的就是得到一个次优的分数,这个分数很接近,也许确实是最优的,但不可能证明它是次优的或最优的。在
一种简化方法是对你想填补的职位进行优先排序,并按优先顺序为每个职位获得最高分数-然而,与非优先职位列表相比,这甚至可能不是一个接近最佳的解决方案。在
相关问题 更多 >
编程相关推荐