我是一个网络徽标新手,通过做来学习,并希望有人能帮我解决看上去很简单的操作:
对于每一只甲鱼X,我想创建或加强一个无定向链接,该链接位于半径createlinkprob. radius 范围内。如果在X和Y之间已经存在一个链接,我希望增加该链接的多重性。(由于Net徽标只允许一个链接存在,所以我需要将多重性存储在链接变量中,以表示更强的链接。)我好像想不出该怎么做。
下面的代码大致说明了我想要的内容,但不起作用。(在的内部“请求”中,向半径内的所有海龟生成事件,我的理解是“我自己”指的是呼唤的海龟X,而“自我”指的是Y。这部分似乎有效。我正在尝试使用who numbers来识别链接,但这个部分没有)。
谢谢你能提供的任何帮助!
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/发布于 2021-06-27 13:49:45
在编辑之后,提供了一个工作示例.
您的代码结构已经适合于执行您希望它做的事情。它不能工作的唯一原因是两个语法问题。
link需要两位记者,即链接末端的两只海龟(请看这里)。你写的link who (show [who] of myself)。虽然who是报道海龟的记者,但show [who] of myself不是记者:show打印一个值,所以您必须删除show并编写link (who) ([who] of myself) (请注意这里的圆括号是可选的,它们的设置只是可读性的风格选择)。ask需要包含命令(请看这里)的方括号,因此必须在set multiplicity (multiplicity + 1)周围加上方括号。这导致了对这个问题本身的反思。当您用NetLogo编写您提供的代码时,NetLogo非常精确地将您带到问题所在:它突出显示了世界show,并给出了以下错误消息
预期记者
您应该已经意识到这一点,并且应该为您的问题量身定做,以解决这个问题;或者,考虑到问题的基本性质,或者更好地查找NetLogo - 请看这里编程指南中的记者。ask也是如此:在您修复了第一个语法问题之后,NetLogo非常直接地将您带到第二个问题所在的地方,它突出显示ask,并给出以下错误消息
询问预期的2个输入,一个代理或代理集和一个命令块
因此,要检查ask是如何工作的,并看到它要求命令块放在方括号中,就特别容易了。
请注意,这正是您应该对创建一个最小的、可重复的示例所做的事情(特别是最小和可重复的部分--消除与问题无关的任何问题);通过遵循本指南,您几乎可以肯定自己解决了这两个语法问题。
因此,在未来,请确保您检查您正在收到的错误信息,并提出一个问题,是与这些错误相关的,并遵循网站的指导。
https://stackoverflow.com/questions/68144805
复制相似问题