我正在尝试编写一段代码,其中协作成功的概率越高,代理越相似。在每次运行时,局部变量计算代理之间的差异,并在差异未超过阈值的情况下创建代理之间的链接。随后,根据是否创建了链接,将代理存储在两个单独的列表中。现在,我想创建另一个列表,其中包含创建链接的每个代理的成功与失败值。该值“成功”的概率越大,相似的代理越多(它们的差异值越接近0)。
我最接近于实现这一点的是rnd扩展。然而,在我看来,rnd:weighted-one-of只接受智能体集合或列表作为输入,我没有预定义的智能体相似性列表。它是0(完全相似)和1(相异)的整个范围,我希望将局部变量与之进行比较。这有没有可能像我现在想的那样?
let difference 0
let initiator one-of turtles
ask initiator [
let potential one-of other turtles
if random-float 1.0 <= [my-activation] of self [ ;; different probability
set difference [my-profile] of self - [my-profile] of potential] ;; of initiating
;; collab
ifelse difference <= threshold [ ;; if threshold is met
create-link-with potential ;; link is initiated
set collaborators fput potential collaborators][ ;; the initiator adds the
set failures fput potential failures] ;; potential to their list of
;; either collaborators 发布于 2020-03-20 01:58:55
我建议考虑将逻辑函数作为一种将相似性与概率联系起来的方法。逻辑函数是一个范围从0到1的"s"-shaped函数,因为某个X值(例如,相似度)在很大范围内变化。例如,您可以通过假设相似度的值产生10%和90%的概率来定义逻辑函数。
在Railsback和Grimm 2019,“基于代理和基于个体的建模”的第16章中,有一个关于在NetLogo模型中使用和编程逻辑函数的完整讨论。
https://stackoverflow.com/questions/60757561
复制相似问题