gpt4 book ai didi

random - 网络标志 : How to make sure a variable stays in a defined range?

转载 作者:行者123 更新时间:2023-12-02 10:18:59 24 4
gpt4 key购买 nike

我有一些变量可以通过 + 0.1 和 -0.1 的变化继承给子代理,或者不进行任何更改,或者再次随机,我所做的是这样的:(代码只是一个示例)

to reproduce
ask turtle 1
[
let X-Of-Mother X

hatch 1
[

set X one-of (list (X-Of-Mother) (X-Of-Mother + 0.1) (X-Of-Mother - 0.1) (random-float 1))

]

]

end

目前我必须检查子海龟的 X 是否始终在范围内,如下所示:

if X > 1 [set X X - 0.2]
if X < 0 [set X X + 0.2]

什么是更好的方法?

如果我必须使用随机正态 0.5 0.1 ,我怎样才能将其限制为 0 和 1 之间的值,我已经多次重复生成这样的随机数,我认为随机正态的质量很好,并且有我需要检查是否超出范围的次数并不多。

例如:

  to test 
Let c 0
let b 0
repeat 100000000
[Set b random-normal 0.5 0.1
if b > 1 [set C C + 1]
If b < 0 [set C C + 1]

]
print c

end

输出为 *67 次(共 100000000 次)*67 是我得到的最大的,我得到了 58 、 51 、...

最佳答案

正如您所发现的,随机正态可能会出现问题,因为您返回的结果实际上可以是任何数字。

一种可能的解决方案是将随机法线的输出限制在边界内,如马特的回答所示。请注意,这种方法会在范围的边界处产生尖峰:

observer> clear-plot set-plot-pen-interval 0.01 set-plot-x-range -0.1 1.1
observer> histogram n-values 1000000 [ median (list 0 (random-normal 0.5 0.2) 1) ]

enter image description here

另一种可能的解决方案,正如 Marzy 在问题本身中所描述的那样,是丢弃随机正常给您的任何越界结果,然后继续尝试,直到获得界内结果。这避免了边界处的尖峰:

to-report random-normal-in-bounds [mid dev mmin mmax]
let result random-normal mid dev
if result < mmin or result > mmax
[ report random-normal-in-bounds mid dev mmin mmax ]
report result
end

observer> clear-plot set-plot-pen-interval 0.01 set-plot-x-range -0.1 1.1
observer> histogram n-values 1000000 [ random-normal-in-bounds 0.5 0.2 0 1 ]

enter image description here

另一个解决方案是问问自己是否真的需要钟形曲线,或者三角形分布是否就可以。只需将两次调用 random-float 相加即可非常简单地获得三角形分布的结果:

observer> clear-plot set-plot-pen-interval 0.01 set-plot-x-range 0 1
observer> histogram n-values 10000000 [ 0.5 + random-float 0.5 - random-float 0.5 ]

histogram

关于random - 网络标志 : How to make sure a variable stays in a defined range?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230685/

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