使用权重分配整数?如何计算?

我需要根据一些权重分配一个值。例如,如果我的权重是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

上面的代码显示了很多情况,其中分配一个值会导致分配的总和不同于原始值。例如,分配3的权重为(1,2,3)的结果为(1,1,2),总计为4。

解决此分布算法的最简单方法是什么?

更新:

我希望分布值是整数值。只要整数合计为正确的值,整数就如何分布并不重要,并且它们“尽可能接近”正确的分布。

(通过正确的分布,我指的是非整数分布,并且我还没有完全定义“越近越好”的意思。也许有几个有效的输出,只要它们合计原始值即可。)

回答:

按预期分配第一份份额。现在,您有了一个更简单的问题,参与者减少了,分配的数量也减少了。重复直到没有更多参与者。

>>> def distribute2(available, weights):

... distributed_amounts = []

... total_weights = sum(weights)

... for weight in weights:

... weight = float(weight)

... p = weight / total_weights

... distributed_amount = round(p * available)

... distributed_amounts.append(distributed_amount)

... total_weights -= weight

... available -= distributed_amount

... return distributed_amounts

...

>>> for x in xrange(100):

... d = distribute2(x, (1,2,3))

... if x != sum(d):

... print x, sum(d), d

...

>>>

以上是 使用权重分配整数?如何计算? 的全部内容, 来源链接: utcz.com/qa/425527.html

回到顶部