非常感谢您对我的模型进行编码的帮助,
如果您不介意,我想问一下编码中的一些解释 对不起,我不是数学方面的专家
to move
ask turtles with [gender = "male" ]
[ if ( random-float 1) <= 0.025]
为什么它是&lt; =这个代码的解释是什么,
和百分比
ask turtles
[ if random 100 <= 50
[become-fat]]
同样的问题为什么&lt; =如果我们总是说50%的人会胖,为什么我们把这个标志???
随机和随机浮点数之间有什么不同
对不起骚扰
答案 0 :(得分:3)
两个原语之间的区别在于:
random
仅为您提供integer个数字,例如:0,1,2,3等。random-float
为您提供floating point个数字,例如:0.0,0.125,0.528476587245,3.66等。两者都可以用来在NetLogo中以概率方式发生事情。我将首先使用random
,这稍微容易理解。
random
正如the documentation中所述,如果您将正数传递给random
,它会给您一个大于或等于0的数字,但严格地小于该数字。
例如,random 2
将始终为您提供0或1.您可以使用它来模拟硬币的翻转:
ifelse random 2 = 0 [ print "heads" ] [ print "tail" ].
这将在50%的时间内打印"heads"
(random 2
给你0),"tail"
50%的时间打印{当random 2
给你1时)
现在,通过使用random 100
代替random 2
,可以很容易地将其概括为以百分比表示的概率。我将使用50%的例子,但很可能是25%,80%甚至1%或100%。
现在random 100
给你一个0到99之间的数字,这意味着它可以给你的前50个数字是:0,1,2,3 ......一直到49.接下来的50个是:50,51,52,53 ......一直到99.如果你愿意的话,你可以想象一个标记为0到99的100面骰子。
如果你想让你的海龟变得肥胖&#34;有50%的时间,你可以这样做:
ask turtles [ if random 100 < 50 [become-fat] ]
请注意,我使用<
(严格减少)符号而不是<=
(小于或等于)符号。这是因为我只希望海龟变胖,如果骰子&#34;登陆前50个面孔之一,从0到49。
(如果您使用random 100 <= 50
,就像上面发布的代码一样,他们实际上有51%的可能性变胖,而不的概率为49%。现在也应该能够弄清楚为什么像if random 100 = 50
这样的东西没有意义:只有当骰子准确地落在50上时才会出现这种情况,这只会发生在1%的情况下时间。)
如果你希望你的海龟只有20%的时间变胖,你想要使用骰子的前20个面,从0到19:
ask turtles [ if random 100 < 20 [become-fat] ]
在处理NetLogo中的概率时,通常使用random 100
。
random-float
然而,有时你需要更高的精确度。数学导向的工作通常将概率表示为0.0(0%)和1.0(100%)之间的数字。在这些情况下,random-float 1
会派上用场。同样,如in the documentation所述,random-float
将为您提供一个介于0(包含)和您传递给它的数字(仅限于)之间的数字。因此,random-float 1
为您提供介于0.0和1.0之间的数字(但绝不会恰好为1.0)。
这个表达式:
random-float 1 < 0.025
在2.5%的时间都是如此。
骰子隐喻不适用于random-float
,但您可以设想roulette wheel(或wheel of fortune)。询问random-float 1 < 0.025
是否就像画一个&#34;馅饼切片&#34;这是车轮周长的2.5%,旋转车轮,检查球(或箭头,或其他什么)是否落入该切片。
现在,如果您使用<=
而非<
使用random-float
,这是否重要?不是很多。如果车轮在将您的饼形切片与车轮其余部分分开的线上完全,则只会产生差异,并且发生这种情况的可能性非常小。