gpt4 book ai didi

matlab - 这个 MATLAB 代码是如何工作的? (概率和随机序列)

转载 作者:太空宇宙 更新时间:2023-11-03 19:49:48 27 4
gpt4 key购买 nike

我在 a comment 中看到了这段代码对于文章“Never-ending Shuffled Sequence”。我了解基本前提,但我不知道它是如何工作的。 我最需要的解释是 while 循环的前两行。

(因为它是用 MATLAB 编写的,所以我只能猜测这段代码的功能。)

probabilities = [1 1 1 1 1 1];
unrandomness = 1;
while true
cumprob = cumsum(probabilities) ./ sum(probabilities);
roll = find(cumprob >= rand, 1)
probabilities = probabilities + unrandomness;
probabilities(roll) = probabilities(roll) - 6*unrandomness;
if min(probabilities) < 0
probabilities = probabilities - min(probabilities);
end
end

最佳答案

概率 向量表示选择数字 1 到 6 的可能性的相对权重。一开始,他们都有平等的机会被选中。我将遍历 while 循环的每一行来解释它的作用:

  • while 循环中的第一行根据 probabilities 向量创建一个累积概率。 CUMSUM函数用于返回沿向量长度的累积和,并将其除以向量的总和(使用 SUM 函数找到)。在第一次通过循环时,cumprob 将具有以下值:

    0.1667    0.3333    0.5000    0.6667    0.8333    1.0000

    请注意,这些创建了一个从 0 到 1 的随机数可以落入的“箱子”。一个数字落入给定箱子的概率等于该箱子的宽度,因此 6 分之 1 (0.1667 ) 随机抽取的数字落入第一个 bin(从 0 到 0.1667)或第二个 bin(从 0.1667 到 0.3333)等的机会。

  • while 循环中的第二行选择一个随机数(使用 RAND 函数)并找到 cumprob 中大于该值的第一个元素的索引(使用FIND 函数)。因此,roll 值是一个从 1 到 6 的数字。

  • while 循环中的第三行通过向上移动所有相对权重来增加“非随机性”,使所有数字的概率更接近于相等。考虑以下示例,其中 probabilities 具有以下形式:

    [x x x 1 x x]

    其中 x 是某个大于 1 的值。此时,选择值 4 的概率为 1/(5*x+1)。通过将所有元素加 1,该概率变为 2/(5*x+7)。对于 x = 3,4 出现的概率增加从 0.0625 到 0.0909,而任何其他数字出现的概率减少从 0.1875 到 0.1818 .这种“非随机性”因此起到了标准化概率的作用。

  • while 循环中的第四行基本上与前一行相反,它显着降低了刚刚发生的任何数字的相对权重,使其不太可能在后续循环中发生。由于前一行不断尝试使所有数字的发生概率恢复相等的影响,这种发生可能性的降低将是短暂的。

    请注意,从 probabilities 的一个元素中减去的数量等于添加到上一行中所有元素的总量,导致总和的净变化为零概率向量。这使概率中的值保持有界,这样它们就不会不断增长。

  • while 循环末尾的 if 语句只是为了确保 probabilities 中的所有数字都是正数。如果向量的最小值(使用 MIN 函数找到)小于零,则从向量的每个元素中减去该值。这将确保 cumprob 向量的值始终介于 0 和 1 之间。

如果将 while true 语句替换为 for i = 1:6,则显示probabilities 向量和roll code> value 在每次迭代结束时运行代码几次,您可以看到代码是如何完成它的工作的。这是一组这样的 6 卷,从数字 1 到 6 中的每一个都画一次:

roll             probabilities

5 | 6 6 6 6 0 6
|
4 | 7 7 7 1 1 7
|
2 | 8 2 8 2 2 8
|
1 | 3 3 9 3 3 9
|
3 | 4 4 4 4 4 10
|
6 | 5 5 5 5 5 5

请注意 probabilities 中的最终值是如何相等的,这意味着在这一点上,数字 1 到 6 再次被选中的可能性相同。

关于matlab - 这个 MATLAB 代码是如何工作的? (概率和随机序列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1566150/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com