Python 根据得分找出变量的组合

Python 根据得分找出变量的组合,python,combinations,combinatorics,puzzle,traveling-salesman,Python,Combinations,Combinatorics,Puzzle,Traveling Salesman,我想用Python解决一个问题(比如编程之谜)。这不是一个练习或任何与此相关的东西,但我想找到一个解决方案 问题描述: 比如说,我有一家拥有10个不同工作岗位的公司 每个位置都有几个不同的子位置。例如(积极、放松、正常)。但是,并非每个位置的子位置都相同。其他有1个,其他有2个,其他3个 我有20个人,每个职位和子职位都有他们的绩效分数 业务生产的最终得分将是每个职位的每个得分之和。我想找到得分最高的组合 一些想法: 并非所有人都能得到这份工作,因为职位少于人数 我不能让两个人处于同一个位

我想用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

然而,这类似于旅行推销员问题,它最终不会得到最高的组合。

如果我读对了,每个人在每个职位上都有不同的分数,你想在所有的人和职位组合中找到最高的分数,也就是说,你必须计算每个人在每个职位上的分数

我想不出一种与旅行推销员问题不同的表达方式——尽管这是相反的——有效地找到最高分数的组合,而不是最低分数的组合

如果是这样的话,那么在合理的时间内(对于任何大型数据集),您将能够可靠地得到一个次优分数,该分数接近并且可能完全是最优的,但不可能证明它是次优或最优的

一种简化的方法是,对你想填补的职位进行优先级排序,并按优先级顺序为每个职位获得最高分数-然而,与无优先级的职位列表相比,这甚至可能不是一个接近最优的解决方案。

这个问题称为二部图或二部图中的最大值。这件事是由我来做的

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