Network programming Netlogo中基于概率的网络

Network programming Netlogo中基于概率的网络,network-programming,netlogo,Network Programming,Netlogo,我正在Netlogo中构建一个网络,以便在接近的参与者和共享一种语言的参与者之间以更高的概率出现链接。如果random float 1+0.3*same.lang>0.1*exp(链接长度),则会显示链接,其中same.lang为0,如果参与者共享一种语言,则为1 我已经有了非常缓慢的工作代码,它首先构建了绝对密集的网络,并基于概率要求链接消亡。这是: ask turtles [ let fellows other turtles with [not member? self my-in-lin

我正在Netlogo中构建一个网络,以便在接近的参与者和共享一种语言的参与者之间以更高的概率出现链接。如果
random float 1+0.3*same.lang>0.1*exp(链接长度)
,则会显示链接,其中
same.lang
为0,如果参与者共享一种语言,则为1

我已经有了非常缓慢的工作代码,它首先构建了绝对密集的网络,并基于概率要求链接消亡。这是:

ask turtles [ let fellows other turtles with [not member? self my-in-links ]
    create-links-with fellows
  ]
  ask links [ ifelse
  [lang1 ] of end1 =  [ lang1 ] of end2 or [ lang2 ] of end1 =  [ lang2 ] of end2 
    [set same.lang 1]
    [set same.lang 0]]
  ask links [
   if random-float 1 + 0.3 * same.lang < 0.1 * exp(link-length)
    [die]  
此代码不适用于错误消息

预期命令


如何改进此代码或给我建议如何从海龟身上建立基于概率的网络。

您没有提供有关生成错误的特定行的信息(NetLogo为您突出显示)。但是有一种可能是
ifelse[lang1]of If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If If I

您还询问了对代码的评论。如果您正在使用
foreach
在NetLogo中的代理集进行循环,那么您应该问自己的第一个问题是“为什么我要使用列表?”使用列表的主要原因是为了保持顺序或允许重复,例如,如果您希望每只海龟跟踪它遇到的海龟,则可以使用列表e不适用于您的情况,因此代理集是一种更为网络化的方式。即使您使用的是列表,您也会使用海龟列表,而不是
who
数字,因此您不必在数字和海龟之间移动
使用
who
数字

还有一些逻辑上的潜在问题:

  • 您只为每个海龟绘制一次随机数,因此所有对(与给定海龟)将要么有边,要么没有边,您不会只得到一些边
  • 通常最好使用“”来表示概率,以便在比较中用更高的数字表示更高的概率,这样可以减少错误
  • 如果你在所有海龟中循环,并且每只海龟也在所有海龟中循环,那么你将测试每对海龟两次
这是未经测试的,但解决了这些问题。我认为这是错误的,嵌套的
ask
将丢失对
我自己的引用
,因此您可能需要添加一行,如
let origin my
,这将允许您引用存储为“origin”的海龟

询问海龟
[问其他海龟我自己的[谁>[谁]
[ifelse([lang1]我自己=lang1)或([lang2]我自己=lang2])

[如果随机浮动1感谢您强调我的方法!您向我建议的代码编译时没有bug。现在我可能对您有用:
我自己
引用了海龟、补丁或链接,他们让我做我现在正在做的事情。因此,我自己很适合。
ask turtles[
  let test-num random-float 1
  let turtle.num  [ who ] of other turtles

  foreach turtle.num
    ifelse [ [ lang1 ] of myself  =  [ lang1 ] of turtle turtle.num or [ lang2 ] of myself =  [ lang2 ] of turtle turtle.num ]
    [
    if ( test-num ) >= (0.1 * exp(distance [turtle turtle.num]) - 0.3)
    [ create-link-with turtle turtle.num ]
    
    ]
    [
    if ( test-num ) >= (0.1 * exp(distance [turtle turtle.num]))
    [ create-link-with turtle turtle.num ]
    ]  
ask turtles
[ ask other turtles with [who > [who] of myself]
  [ ifelse ([lang1] of myself  =  lang1) or ([lang2] of myself = [lang2])
    [ if random-float 1 <= (0.1 * exp(distance myself) - 0.3)
      [ create-link-with myself ]
    ]
    [ if random-float 1 <= (0.1 * exp(distance myself))
      [ create-link-with myself ]
    ]
  ]