对概率和百分比的解释



非常感谢您为我的模型编写代码,

如果你不介意的话,我想问一下你关于编码中的一些解释很抱歉,我不是数学专家

to move
ask turtles with [gender = "male" ]
[ if ( random-float 1) <= 0.025]

为什么是<=以及这段代码的解释是什么,

和百分比

 ask turtles
  [ if random 100 <= 50
       [become-fat]]

同样的问题为什么<=如果我们总是说50%的人是肥胖的为什么我们要放这个符号??

和随机浮点数

有什么区别?

抱歉打扰了

两个原语的区别是:

  • random只给出整数,例如:0、1、2、3等。
  • random-float提供浮点数,例如:0.0,0.125,0.528476587245,3.66等。

都可以用来在NetLogo中使事情以概率的方式发生。我将从random的使用开始,它更容易理解。

使用random

如文档中所述,如果您向random传递一个正数,它将给您一个大于或等于0的数字,但严格小于该数字。

例如,random 2总是给你0或1。你可以用它来模拟抛硬币:

ifelse random 2 = 0 [ print "heads" ] [ print "tail" ].

这将打印"heads" 50%的时间(当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面骰子。

如果你想让你的乌龟50%的时间"变胖",你可以这样做:

ask turtles [ if random 100 < 50 [become-fat] ]

请注意,我使用了<(严格小于)符号而不是<=(小于或等于)符号。这是因为我只希望当"骰子"落在前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就派上了用场。同样,正如文档中所述,random-float将为您提供一个介于0(包含)和传递给它的数字(排他性)之间的数字。因此,random-float 1给出了一个介于0.0和1.0之间的数字(但不完全是1.0)。

这个表达式:

random-float 1 < 0.025

在2.5%的情况下为真。

骰子的比喻并不适用于random-float,但你可以想象一个轮盘赌(或幸运之轮)。询问random-float 1 < 0.025是否像画一个"馅饼切片",即车轮周长的2.5%,旋转车轮,并检查球(或箭头,或其他任何东西)是否落在该切片中。

现在如果你使用<=而不是<random-float是否重要?不是很多。只有当车轮正好落在饼形切片与车轮其余部分的分隔线上时,才会产生影响,而且发生这种情况的概率非常非常小。

最新更新