0

我正在尝试在 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(邻居)的直接链接,我不知道出了什么问题 :( 这是一个屏幕截图,如果您注意到从 0 到 2的直接链接还有从 2 到 0,我的目标是只有从 0 到 2

4

1 回答 1

1

您的问题是,每次您这样做时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
]

一般来说,who在 NetLogo 代码中使用是不好的做法。who是一个完全任意的标识符,它只是跟踪海龟的创建顺序。如果你的海龟死了,那么你的代码可能会崩溃,因为它指的是不再存在的海龟。或者也许在某个时候你会有两种乌龟——who不管你的乌龟是人、狗、工厂还是……

这可能是极少数例外之一,但您可能需要考虑一下您的who意思。例如,由于这是一个领导模型,也许您可​​以有一个名为“魅力”的变量,并且所有链接都是从魅力值较低的海龟到魅力值较高的乌龟。

于 2020-08-22T10:30:19.787 回答