假设我有多个不相等的值 a、b、c、d、e。是否可以仅通过随机数生成将这些不相等的值变成相等的值?
示例:a=100、b=140、c=200、d=2、e=1000。我希望算法随机定位这些集合,以便最常定位最大值,而大多数情况下只保留最小值。
我遇到问题的地方:如果我只使用非唯一的随机数生成,那么值 e 最终将低于其他值。如果我使用唯一数字生成,那么即使它们的绝对值发生变化,值之间的比率也不会改变。我尝试过使用集合,其中一定范围的数字必须在值更改之前被击中一定次数。我还没有尝试过使用唯一/非唯一随机数的混合。
我希望随着算法的运行,值之间的比率逐渐接近 1。
另一种思考问题的方式:假设这些值 a、b、c、d、e 都相等。如果我们随机选择一个,则每个都被选择的可能性与其他任何一个一样。选择一个后,我们将该值加 1。然后我们再次运行这个过程。这次,上次选取的值比任何其他值大 1,因此它比任何其他值更有可能被选取。这会产生滚雪球效应,首先选择的价值可能会继续被选择并实现失控的增长。我正在寻找与该算法相反的算法,我们在这些最初相等的值发散之后开始,并将它们恢复到最初相等的状态。
我认为这一过程是不可能的,因为熵和存在固有的单向本质。
嗯,有一种称为“逆权重”的技术,您可以对项目进行与其先前外观成反比的采样。每次我们对 a、b、c、d 或 e 进行采样时,我们都会更新它们的出现次数并重新计算概率。简单的 python 代码,我将数字 [0...4] 采样为 a、b、c、d、e,并从您列出的外观开始。经过 100,000 个样本后,它们看起来是均匀分布的
import numpy as np
n = np.array([100, 140, 200, 2, 1000])
for k in range(1, 100000):
p = (1.0 / n) # make probabilities inverse to weights
p /= np.sum(p) # normalization
a = np.random.choice(5, p = p) # sampling numbers in the range [0...5)
n[a] += 1 # update weights
print(n)
Output
[20260 20194 20290 20305 20392]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)