Добавление агента из разных агентов в

Моя модель представляет собой сеть агентов, соединенных между собой ссылками. Я пытаюсь создать набор агентов из соседей агента и их соседей и т. Д. (Мне нужно это, чтобы назначить ему разные значения).

Однако, когда я создаю let с agentset в нем. агенты попросили сделать этот набор агентов своим, это пока хорошо. Но когда я хочу, чтобы оригинальный агент спросил его о своих соседях по второй линии, он просто возвращает набор агентов от одного из этих соседей, а не объединенные наборы агентов всех его соседей по второй линии, и я хочу, чтобы соседи сохранили своих собственных соседей в наборе агентов со всеми соседи из разных агентов в этом наборе.

Я не могу попросить позволить агенту просто сделать turtleset current-agentset new-agentset так как в let Вы не можете попросить переменную let. Так что код, который обычно set second-neighbors (turtle-set second-neighbors other-nieghbors не работает, так как я не могу спросить вторых соседей уже в

Я также не могу сделать это глобальным или чем-то, так как это зависит от агента.

код у меня до сих пор выглядит так

    ask companies [
      let this-company self
      let b link-neighbors
        ask b [ let c link-neighbors with [self != this-company]

          ask c [ let d  link-neighbors with [not member? self b]
            ask this-company [
              set iburen b
              set iiburen c
              set iiiburen d
        ]
      ]
    ]
  ]

так что я хочу, чтобы все агенты в наборе агентов c сообщали о своих соседях по ссылкам, как они делают сейчас. Но также сохраните этих соседей по ссылкам в новом наборе агентов, который имеет всех соседей по ссылкам всех агентов в c. как простой II + 1, но чем с turtle-set (what I have) (what is new from the next agent asked)

то же самое относится и к

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

1 ответ

Решение

Вот то, что я думаю, вам нужно:

extensions [ nw ]
breed [ companies company ]
companies-own [
  buren ; a list of agentsets, with one item for each "level" of neighbors
]

to setup
  clear-all
  ; create a random network and lay it out:
  create-companies 20 [ create-links-with n-of 3 other companies ]
  repeat 30 [ layout-spring turtles links 0.2 5 1 ]

  let num-levels 3

  ask companies [
    let all-neighbors other nw:turtles-in-radius num-levels    
    set buren (list) ; initialize to empty list
    foreach range num-levels [ i ->
      let neighbors-at-this-level all-neighbors with [
        nw:distance-to myself = i + 1
      ]
      set buren lput neighbors-at-this-level buren
    ]
  ]

  ; demonstrate how to access the levels (sorted only for display purposes)
  ask one-of companies [
    show sort item 0 buren ; first level neighbors
    show sort item 1 buren ; second level neighbors
    show sort item 2 buren ; third level neighbors
  ]

end

Возможно, это не самый эффективный код, поскольку он проходит список всех соседей один раз для каждого уровня, но если у вас нет огромной сети, вы не должны это замечать.

Если вы действительно хотите использовать такие переменные, как iburen, iiburen а также iiiburenВы всегда можете использовать псевдонимы элементов списка:

set iburen   item 0 buren
set iiburen  item 1 buren
set iiiburen item 2 buren

... но я не рекомендую это Наличие ваших наборов агентов в списке должно побудить вас думать о своих уровнях в более общем виде.

Другие вопросы по тегам