首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅在网络徽标中不存在链接时才创建链接

如何仅在网络徽标中不存在链接时才创建链接
EN

Stack Overflow用户
提问于 2021-06-26 17:29:20
回答 1查看 137关注 0票数 0

我是一个网络徽标新手,通过做来学习,并希望有人能帮我解决看上去很简单的操作:

对于每一只甲鱼X,我想创建或加强一个无定向链接,该链接位于半径createlinkprob. radius 范围内。如果在X和Y之间已经存在一个链接,我希望增加该链接的多重性。(由于Net徽标只允许一个链接存在,所以我需要将多重性存储在链接变量中,以表示更强的链接。)我好像想不出该怎么做。

下面的代码大致说明了我想要的内容,但不起作用。(在的内部“请求”中,向半径内的所有海龟生成事件,我的理解是“我自己”指的是呼唤的海龟X,而“自我”指的是Y。这部分似乎有效。我正在尝试使用who numbers来识别链接,但这个部分没有)。

谢谢你能提供的任何帮助!

代码语言:javascript
复制
links-own
[
  multiplicity
]


to setup
  clear-all
  make-turtles
  reset-ticks
end

to make-turtles
  create-turtles num-nodes [ set size 3 ]
  ;; layout-circle turtles max-pxcor - 1
  ask turtles [
  ;; move each turtle to a random point
  setxy random-xcor random-ycor
]
end


to go
  generate-event
  ask turtles
  [
   fd random 2
   rt -5 + random 10
  ]
  ask links
  [
    if random 100 < removelinkprob 
    [ifelse multiplicity = 1 [die] [set multiplicity multiplicity - 1]]
  ]
  tick
end


to generate-event 
  ;; at every event - one per tick - each turtle may connect to others in radius R with probability createlinkprob/100. 
  ;; If already connected, the multiplicity value is incremented.
  ;; Otherwise, the multiplicity value is set to 1 and a link is created.
  ask turtles
  [
  ask other turtles in-radius radius
    [if random 100 < createlinkprob [
      ifelse in-link-neighbor? myself 
      [
        ask link who (show [who] of myself) set multiplicity (multiplicity + 1)
      ]
      [create-link-with myself [set multiplicity 1]]]
    ]
  ]
end


; based on  http://ccl.northwestern.edu/netlogo/models/GiantComponent
; Copyright 2005 Uri Wilensky.
; Modified by Michael Frishkopf
; under Creative Commons license: https://creativecommons.org/licenses/by-nc-sa/3.0/
EN

回答 1

Stack Overflow用户

发布于 2021-06-27 13:49:45

在编辑之后,提供了一个工作示例.

您的代码结构已经适合于执行您希望它做的事情。它不能工作的唯一原因是两个语法问题。

  1. link需要两位记者,即链接末端的两只海龟(请看这里)。你写的link who (show [who] of myself)。虽然who是报道海龟的记者,但show [who] of myself不是记者:show打印一个值,所以您必须删除show并编写link (who) ([who] of myself) (请注意这里的圆括号是可选的,它们的设置只是可读性的风格选择)。
  2. ask需要包含命令(请看这里)的方括号,因此必须在set multiplicity (multiplicity + 1)周围加上方括号。

这导致了对这个问题本身的反思。当您用NetLogo编写您提供的代码时,NetLogo非常精确地将您带到问题所在:它突出显示了世界show,并给出了以下错误消息

预期记者

您应该已经意识到这一点,并且应该为您的问题量身定做,以解决这个问题;或者,考虑到问题的基本性质,或者更好地查找NetLogo - 请看这里编程指南中的记者。ask也是如此:在您修复了第一个语法问题之后,NetLogo非常直接地将您带到第二个问题所在的地方,它突出显示ask,并给出以下错误消息

询问预期的2个输入,一个代理或代理集和一个命令块

因此,要检查ask是如何工作的,并看到它要求命令块放在方括号中,就特别容易了。

请注意,这正是您应该对创建一个最小的、可重复的示例所做的事情(特别是最小和可重复的部分--消除与问题无关的任何问题);通过遵循本指南,您几乎可以肯定自己解决了这两个语法问题。

因此,在未来,请确保您检查您正在收到的错误信息,并提出一个问题,是与这些错误相关的,并遵循网站的指导。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68144805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档