首页 > 解决方案 > 当x数量的补丁离开时与其他乌龟断开链接?

问题描述

当乌龟与与之链接的乌龟偏离大量补丁时,如何让乌龟断开链接?我已经尝试了这行我认为可以工作的代码to break-link if cooperator link in-radius linking-radius > max-link-radius [ ask one-of links [ die ] ] end,但我收到错误“链接预期的 2 个输入,一个数字和一个数字”。任何帮助将不胜感激,谢谢。代码贴在下面

turtles-own [ energy ] 

breed [ cooperators cooperator ] 
breed [ uncooperators uncooperator ]




to setup 
  ca
  ask patches [
    set pcolor green
  ]
  create-uncooperators num-uncooperators [
    setxy random-xcor random-ycor
    set color red
    set energy random 100
  ]set-default-shape turtles "person"
  create-cooperators num-cooperators [
    setxy random-xcor random-ycor
    set color yellow
    set energy random 100
  ]
  reset-ticks
end

to go 
  if not any? turtles [ stop ] 
  ask cooperators [
    set energy energy - 1
    move
    communicate
    cooperate
    break-link
  ]
  ask uncooperators [
    set energy energy - 1
    move 
  ]
  tick
end

to move
  lt 50
  rt 50
  fd 1
end



to communicate
  if count my-links < 1 [
   create-link-to one-of uncooperators in-radius linking-radius
  ]
end

to break-link
  if cooperator link in-radius linking-radius > max-link-radius [ ask one-of links [ die ] ]
end

标签: netlogo

解决方案


请只发布相关代码,通常用于 NetLogo,即给您错误的过程和调用它的过程。所以这是给出错误消息的行:

to break-link
  if cooperator link in-radius linking-radius > max-link-radius
  [ ask one-of links [ die ]
  ]
end

NetLogo 告诉您它不知道link您的意思,因为链接由两个数字标识 - 每端的海龟。如果您查看您的代码,您会看到该单词link后跟两个数字(变量 in-radius 和 linking-radius),但它们不是海龟标识符。我认为您想做一些事情,例如要求断开长链接,在这种情况下,您将物理/空间距离与网络距离(要传递多少个链接)混合在一起。你想要这样的东西吗?

to break-link
  ask cooperators
  [ if distance one-of link-neighbors > max-link-radius
    [ ask one-of links [ die ]
    ]
  ]
end

link-neigbors用于查找与进行询问的海龟相关的海龟。但这不会实现您的目标,因为随机链接死亡,而不是满足距离条件的链接。也许这个(未测试):

to break-link         ; called by a cooperator turtle
  let furthest-friend max-one-of link-neighbors [distance myself]
  if distance furthest-friend > max-link-radius
  [ ask link-with furthest-friend [ die ]
  ]
end

推荐阅读