Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我在文章“ 永无休止的随机播放序列 ” 的注释中看到了此代码。我了解基本前提,但我不知道它是如何工作的。 我需要的最大解释是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 回答: probabilities向量表示将选择数字1到6的可能性的相对权重。一开始,他们都有同等的机会被选中。我将逐步通过while循环的每一行来说明其作用:
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再次被选择的可能性相同。 更多&回答... |
![]() |
![]() |