Если вы должны сделать это таким образом, вот один из вариантов.При такой настройке:
turtles-own [
knowledgeValue
receiver?
sender?
]
to setup
ca
resize-world -3 3 -3 3
set-patch-size 70
ask patches [
sprout 1 [
set receiver? false
set sender? false
ifelse random-float 1 > 0.5 [
set receiver? true
set color green
set knowledgeValue [0 0 0]
] [
set sender? true
set color red
set knowledgeValue []
repeat 3 [
set knowledgeValue lput random-float 1 knowledgeValue
]
]
]
]
reset-ticks
end
Создается мир, в котором все receivers
начинаются с [0 0 0]
в качестве списка knowledgeValue
(чтобы доказать, что senders
- это те, которые добавляют значение).Теперь пусть все получатели получат своих соседей с sender?
до ask
запрашивающим получателем обновить список этого получателя.Мне не очень нравится это решение, но оно в некотором роде подходит к проблеме из той же схемы, которую вы обрисовали.
to option-1
ask turtles with [ receiver? ] [
; ask senders to ask 'myself' (receiver)
ask ( turtles-on neighbors ) with [sender?] [
ask myself [
; note that the second myself (below) actually refers to the 'sender'
set knowledgeValue replace-item 0 knowledgeValue ( item 0 knowledgeValue + item 0 [knowledgeValue] of myself)
]
]
]
end
Одна альтернатива - просто сложить необходимые значения и добавить их напрямую:
to option-2
ask turtles with [ receiver? ] [
let my-senders ( turtles-on neighbors ) with [ sender? ]
if any? my-senders [
; get the sum of their item 0 knowledgeValue
let to-add sum [ item 0 knowledgeValue ] of my-senders
; add it to the knowledgeValue
set knowledgeValue replace-item 0 knowledgeValue ( item 0 knowledgeValue + to-add )
]
]
end