<p>还可以使用Gustavo Niemeyer的<a href="http://niemeyer.net/python-constraint" rel="nofollow">Python Constraint</a>模块来解决这个问题。</p>
<pre><code>import constraint
Device1=[8,8,4,4,200]
Device2=[16,0,16,0,250]
Device3=[8,0,4,4,300]
Device4=[16,8,4,4,300]
Device5=[8,8,2,2,150]
Target=[24,12,16,8]
devices = [Device1, Device2, Device3, Device4, Device5]
vars_number_of_devices = range(len(devices))
max_number_of_devices = 5
problem = constraint.Problem()
problem.addVariables(vars_number_of_devices, range(max_number_of_devices + 1))
problem.addConstraint(constraint.MaxSumConstraint(max_number_of_devices), vars_number_of_devices)
for io_index, minimum_sum in enumerate(Target):
problem.addConstraint(constraint.MinSumConstraint(minimum_sum, [device[io_index] for device in devices]), vars_number_of_devices)
print min(problem.getSolutions(), key=lambda distribution: sum([how_many * devices[device][-1] for device, how_many in distribution.iteritems()]))
</code></pre>
<p>这将产生以下输出:</p>
<pre><code>{0: 2, 1: 1, 2: 0, 3: 0, 4: 0}
</code></pre>
<p>因此,最优解是2 x设备1,1 x设备2,0 x设备3,0 x设备4,0 x设备5。</p>
<p>(注意,变量是使用基于零的索引命名的。设备1对应于0,设备2对应于1,依此类推。)</p>