基本优化 - 配对小部件和转子

时间:2010-05-05 17:30:28

标签: algorithm mathematical-optimization

我对优化问题知之甚少,所以希望这对我来说很有说服力:

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),
....
]

给定固定数量的小部件和固定数量的转子,如何获得一系列小部件 - 转子对,以最大化每个小部件和转子只能使用一次的总价值?

2 个答案:

答案 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
...