问题描述
我正在尝试在netlogo中实现YOYO领导者选举算法 该算法的第一步是将链接(直接链接)从最小值定向到最大值,但仅在邻居之间定向! 我尝试了命令
[`ask turtles with [ [ who ] of self < [who] of one-of link-neighbors ]
create-direct-to turtle [who] of one-of link-neighbors ]`
这会创建从min到max(邻居)的直接链接,但也会创建从max到min(邻居)的直接链接 而且我不知道怎么了:( 这是一个屏幕截图,如果您注意到direct link从0到2以及从2到0,我的目标是只有0到2
解决方法
您的问题是,每次执行one-of
时,它都会随机选择。因此,您需要在第一行中对随机链接邻居进行测试,找到它的真实性,然后随机选择要连接的链接邻居。
[ ask turtles with [ [ who ] of self < [who] of one-of link-neighbors ]
create-direct-to turtle [who] of one-of link-neighbors
]
更一般而言,这似乎是实现目标的一种奇怪方法。首先,链接邻居是乌龟已经链接到的乌龟。 link
是所有链接品种的通用名称(我认为您已经创建了一个称为直接链接的品种)。
由于您的代码只是从较小的who
值到较大的who
值,因此我并不完全清楚最小值和最大值的含义。如果要创建从每个乌龟到每个具有较高who
值的乌龟的链接,请执行以下代码:
ask turtles
[ let targets turtles with [who > [who] of myself]
create-links-to targets
]
通常,在NetLogo代码中使用who
是不好的做法。 who
是一个完全任意的标识符,它仅跟踪乌龟的创建顺序。如果您的乌龟死了,那么您的代码可能会崩溃,因为它所指的是不再存在的乌龟。也许在某个时候,您将有两种乌龟-who
不在乎您的乌龟是人还是狗,工厂还是...
这可能是极少数例外之一,但您可能想考虑一下who
的含义。例如,由于这是一个领导模型,也许您可以使用一个名为“魅力”的变量,并且所有链接都是从具有较低魅力值的海龟到具有较高魅力值的海龟。