我对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(概率攻击;攻击?= true)。此后,每次打勾时,性工作者再次受到攻击的可能性为0.01。
然后,在攻击的子集中?= true,则有可能报告攻击(概率报告,0.5。这由信任表示?= true / false。在报告者的子集中,存在那么最终有可能在警察身上有好/坏经历(概率保护),这里就是保护?= true / false。
这三个属性应根据概率随机分布,并且还需要组合概率来将来信任警察,即概率信任。 (概率信任=概率攻击+概率报告+概率保护)。
我做了什么(到目前为止,没有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
目前发生的事情是属性没有变化,所有性工作者似乎都没有攻击和信任/不信任同时变化。我不确定发生了什么。
答案 0 :(得分:3)
(1)您不需要rnd
扩展名即可在此处尝试执行任何操作。如果您只是想以某种可能性采取某种行动,那么您的if random-float 1 < <probablility value>
方法就是正确的方法。 rnd
扩展名是您要加权的概率,例如,根据其收入选择代理商。
(2)NetLogo将true
和false
(大小写无关紧要)识别为特定的真值。您不应将1和0用作true和false的代理。直接使用真值有几个优点。最明显的是可读性,您可以使用set trust? true
和if trust? = true [do something]
之类的语句。更紧凑的说,您只需说if trust? [do something]
即可。其他优点包括根据您的条件访问not
和and
之类的逻辑运算符。
关于每个代理具有相同行为的实际问题,您已经嵌套了ask turtles
类型的语句。例如,您有:
to file
ask sexworkers with [ assault? = 1 ] [
ifelse random-float 1 <= 0.5
[ cooperate ]
[ avoid ]
]
end
如果将合作和避免过程替换为该代码,则会得到:
to file
ask sexworkers with [ assault? = 1 ] [
ifelse random-float 1 <= 0.5
[ ask sexworkers [ set trust? 1 ] ]
[ ask sexworkers [ set trust? 0 ] ]
]
end
因此,如果您的随机数是0.4,那么您所有的性工作者的信任度都将设置为1,而不仅仅是“掷骰子”的特定性工作者。
您要么需要:
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
如果没有其他事情要做,请使用第一个选项。如果设置信任,请使用第二个选项?价值只是乌龟在合作或避免时应采取的许多行动之一。