Random 如何分发代理';根据Netlogo中的特定概率随机设置属性?

Random 如何分发代理';根据Netlogo中的特定概率随机设置属性?,random,attributes,netlogo,probability,agent-based-modeling,Random,Attributes,Netlogo,Probability,Agent Based Modeling,我对Netlogo比较陌生,只完成了少数几个型号。目前正在为我的论文做一个工作,我需要根据特定的概率随机分配代理的属性,一些在模拟开始时,其他属性将在整个过程中分布。对于那些熟悉它的人来说,这与信任游戏的扩展有关。我和一个不使用Netlogo的同事完成了概念模型,所以我现在有点卡住了 我认为rnd扩展可能有用,但我不太明白如何使用它。如果这对你们任何人来说都是多余的,我很抱歉,但我真的希望在这里得到一些帮助 extensions [ rnd] ;; divides agents into tw

我对Netlogo比较陌生,只完成了少数几个型号。目前正在为我的论文做一个工作,我需要根据特定的概率随机分配代理的属性,一些在模拟开始时,其他属性将在整个过程中分布。对于那些熟悉它的人来说,这与信任游戏的扩展有关。我和一个不使用Netlogo的同事完成了概念模型,所以我现在有点卡住了

我认为rnd扩展可能有用,但我不太明白如何使用它。如果这对你们任何人来说都是多余的,我很抱歉,但我真的希望在这里得到一些帮助

extensions [ rnd]

;; divides agents into two types
breed [ sexworkers sexworker ]
breed [ officers officer ]

;; determines attributes of agents
sexworkers-own
[ assault?       ;; is assaulted
  trust?         ;; probability to trust police to report assault
  protection?    ;; probability of good experience with police during report
  prob-trust ]   ;; probability to trust overall

officers-own
[ behavior   ] ;; probability of treating sex workers well/badly during report
这是模型的开始,然后我想根据特定的概率分布属性。老实说,我还没有找到一个方法来做到这一点,因为我打算这样做。 我想要的是,对于每一个性工作者来说,被攻击的概率为0.01(prob-attack;attack?=true)。之后,每打一个勾,性工作者再次遭受袭击的几率为0.01

之后,在攻击?=真的子集中,有一个报告攻击的概率(概率报告,0.5。这用信任?=真/假表示。在报告的子集中,有一个与警察有良好/不良经验的最终概率(概率保护),这里的保护?=真/假

这三个属性应该根据概率随机分布,然后也会产生未来信任警察的组合概率,即概率信任(概率信任=概率攻击+概率报告+概率保护)

我所做的(到目前为止没有rnd扩展)是:

      ;; determines sex workers' behavior
      ask sexworkers [ move ]
      ask sexworkers [ victimize ]
      ask sexworkers [ file ]

    to victimize
 ask sexworkers [
    ifelse random-float 1 <= 0.0001 
    [ set assault? 1 ]
    [ set assault? 0 ]
  ]
end

to file 
  ask sexworkers with [ assault? = 1 ] [
   ifelse random-float 1 <= 0.5 
    [ cooperate ]
    [ avoid ] 
  ]
end

to cooperate
  ask sexworkers [ set trust? 1  ]
end

to avoid
  ask sexworkers [ set trust? 0 ]
end
决定性工作者的行为 询问性工作者[行动] 询问性工作者[受害] 询问性工作者[档案] 害 询问性工作者[ ifelse随机浮动1(1)您在这里尝试做的任何事情都不需要
rnd
扩展。如果您只是想以某种概率采取一些行动,那么您的
If random float 1
方法是正确的方法。当您想要进入加权概率时,
rnd
扩展就是,例如,根据国际关系收入

(2) NetLogo可识别
true
false
(大写不重要)作为特定的真值。您不应该使用1和0作为真值和假值的代理。直接使用真值有几个优点。最明显的是可读性,您可以使用诸如
set trust?true
if trust?=true[做某事]
之类的语句。更简洁地说,您可以简单地说
if trust?[做点什么]
。其他优势包括可以访问逻辑运算符,例如针对您的情况使用
not

关于每个代理都有相同行为的实际问题,您已经嵌套了
ask-turtles
type语句。例如,您有:

to file 
  ask sexworkers with [ assault? = 1 ] [
   ifelse random-float 1 <= 0.5 
    [ cooperate ]
    [ avoid ] 
  ]
end

如果没有其他事情要做,请使用第一个选项。如果设置信任?值只是海龟在合作或回避时应采取的众多行动之一,请使用第二个选项。

非常感谢,看到我离目标不远,这非常有帮助,也让人松一口气。我可能会提出一个新问题关于如何将每只海龟的这些概率相加,以获得基于这些方面的信任的总体概率,并以此为基础挑选海龟。如果我没有错的话,这将被加权?对不起,我来自一个定性背景,这是基于长期的实地调查,有时我对这些术语感到非常困惑。Tha非常感谢你的帮助!
to file 
  ask sexworkers with [ assault? = 1 ] [
   ifelse random-float 1 <= 0.5 
    [ ask sexworkers [ set trust? 1  ] ]
    [ ask sexworkers [ set trust? 0 ] ] 
  ]
end
to file 
  ask sexworkers with [ assault? = 1 ] [
   ifelse random-float 1 <= 0.5 
    [ set trust? true ]
    [ set trust? false ] 
  ]
end
to cooperate
  set trust? true
end

to avoid
  set trust? false
end