我需要根据一些权重来分配值。例如,如果我的权重是1和2,则我希望以2为权重的列具有与以权重1加权的列相比两倍的值。
我有一些Python代码来演示我想要做的事情,以及问题:
def distribute(total, distribution):
distributed_total = []
for weight in distribution:
weight = float(weight)
p = weight/sum(distribution)
weighted_value = round(p*total)
distributed_total.append(weighted_value)
return distributed_total
for x in xrange(100):
d = distribute(x, (1,2,3))
if x != sum(d):
print x, sum(d), d
上面的代码展示了许多情况,其中分配一个值导致分配的总和与原始值不同。例如,使用权重为(1,2,3)分配3会得到(1,1,2),总计为4。
最简单的修复分配算法的方法是什么?
更新:
我希望分配的值是整数值。它们分配成整数并不重要,只要它们总和正确,并且它们“尽可能接近”正确的分配即可。
(通过正确的分配,我指的是非整数分配,并且我还没有完全定义“尽可能接近”的含义。也许有几个有效的输出,只要它们总和原始值即可。)