我对优化问题知之甚少,所以希望这对我来说很有说服力:
rotors = [1, 2, 3, 4...]
widgets = ['a', 'b', 'c', 'd' ...]
assert len(rotors) == len(widgets)
part_values = [
(1, 'a', 34),
(1, 'b', 26),
(1, 'c', 11),
(1, 'd', 8),
(2, 'a', 5),
(2, 'b', 17),
....
]
给定固定数量的小部件和固定数量的转子,如何获得一系列小部件 - 转子对,以最大化每个小部件和转子只能使用一次的总价值?
答案 0 :(得分:4)
你所拥有的是最大加权二分匹配问题:在左边,你有小部件,右边是转子,连接的权重是点值。这个Wikipedia article涉及如何解决它。
答案 1 :(得分:0)
贪婪的算法会让你多远?您可以按分数对所有小部件 - 转子对进行排序,只需沿着列表向下走,跳过包含已经使用的小部件或转子的任何内容。例如:
2-b = 40 # yes
2-c = 30 # no, already used rotor 2
1-a = 20 # yes
4-a = 10 # no, already used widget a
3-c = 5 # yes
...