一旦我选择了一只乌龟并检查了它的品种,就创建了一个具有要添加到所选乌龟列表和其邻居列表中的属性的物品。 为此,我编写了以下代码:
to add-items
;; (1) EMPTY list
let creator nobody
let my-neighb nobody
set creator one-of turtles with [breed = breed1 or breed = breed2]
ifelse empty? [my-list] of creator [
ifelse [breed = breed1] of creator[
;; Breed1
ask creator [
set attribute1 random-float 1
set attribute2 random-float 1
]
create-items 1[
hide-turtle
set new_item self
set attribute1 [attribute1] of creator
set attribute2 [attribute2] of creator
]
]
;; Breed2
[ ask creator [
set attribute1 0
set attribute2 random-float 1
]
create-items 1[
hide-turtle
set new_item self
set attribute1 [attribute1] of creator
set attribute2 [attribute2] of creator
]
]
;;;; Add new item to the list ;;;;
ask creator [
set my-list fput (list attribute1 attribute2) my-list
set my-neighb link-neighbors
ask my-neighb [set newsfeed fput (list quality fitness) newsfeed]
show newsfeed
]
]
;; (2) NOT EMPTY LIST
[ ... ]
其中的品种和变量定义如下:
breed[breed1 breed_1]
breed[breed2 breed_2]
breed[items item_1]
breed1-own [
my-list
attribute1
attribute2
]
breed2-own [
my-list
attribute1
attribute2
]
items-own[
attribute1
attribute2
]
我应该期望可以将创建的项目添加到所选乌龟的列表及其邻居的列表中:
(breed1 1): [[0.35 0.54] [0.64 0.43]] ;; if breed 1 is linked with breed1 43
(breed1 43): [[0.64 0.43] [0.35 0.54]] ;; same above
(breed1 4): [[]] ;; no items as it was not selected
(breed 1 43): [[0.32 0.31]] ;; only one item created by itself
(breed2 7): [[0 0.23]]
但是,我仅获得以下值:
(breed1 1): [[0.35 0.54]]
(breed1 43): [[0.64 0.43]]
(breed1 4): [[]]
(breed 1 43): [[0.32 0.31]]
(breed2 7): [[0 0.23]]
...
即每只乌龟一件。
当然,我的代码没有很好地实现。由于我在每个步骤都创建一个项目,因此所选乌龟的列表仅显示该项目。并且这不允许我检查列表的长度是否大于阈值以从中删除项目。
我想要的是列出选定乌龟创建的所有项目并将其添加到其自己的列表和其邻居列表中的东西。
毫无疑问,查看每只选定的海龟有多少个(和哪个)邻居,以检查所创建的物品是否有效地添加到其网络列表中,将很有用。
希望您能帮助我解决这个问题。
谢谢
答案 0 :(得分:0)
我认为,如果您使用许多打印语句并对视图进行颜色编码以观察代码的实际作用,您可能会发现问题。
请参阅我对最近一个问题的回答:从列表中拉出元素时如何评分?