Добавление элементов в списки соседей: почему все списки содержат только один элемент? - PullRequest
0 голосов
/ 10 ноября 2019

Как только я выбрал одну черепаху и проверил ее породу, я создаю один элемент с атрибутами, которые я хочу добавить в список выбранной черепахи и в списки ее соседей. Чтобы добиться этого, я написал следующий код:

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]]

...

т.е. один предмет для каждой черепахи.

Конечно, что-то не очень хорошо реализовано в моем коде. Поскольку я создаю один элемент на каждом шаге, в списке выбранных черепах отображается только этот элемент. И это не позволяет мне проверить, превышает ли длина списка пороговое значение, чтобы удалить из него элементы.

То, что я хотел бы, это что-то, что перечисляет все элементы, созданные выбранной черепахой, и добавляет их как в свой собственный список, так и в список его соседей.

Несомненно, было бы полезно узнать, сколько (и каких) соседей у ​​каждой выбранной черепахи, чтобы проверить, был ли созданный предмет эффективно добавлен в списки своей сети.

Надеюсь, вы сможетепомогите мне разобраться с этим.

Спасибо

1 Ответ

0 голосов
/ 14 ноября 2019

Я думаю, что вы можете найти проблему, если вы используете много операторов печати и цветовой код представления, чтобы посмотреть, что на самом деле делает ваш код.

См. Мой ответ на недавний вопрос: Какчтобы получить оценку, когда элемент извлекается из списка?

...