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

标签 random netlogo

我有一些变量可以通过 + 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/

相关文章:

mysql - 用第二个随机行连接 MySQL 中的两个表

c - 自行播种 rand()

java - 一旦我生成了一个范围内的随机 Int,我如何将该整数分配给字母表中的每个字母?

c# - 如何制作从不在数组中重复的随机数?

netlogo - 如何改变NetLogo中随机海龟的颜色

netlogo - 有没有办法在NetLogo中用一行代码设置多个补丁的补丁颜色?

java - 随机输出,无法正常工作

java - Maven 项目中的 netlogo headless

netlogo - 在netlogo中模拟结婚

NetLogo - NetLogo 中的 1 距离单位是什么?