Я не знаю простого способа сделать это с уникальными переменными, такими как opinion1
и т. Д., Но, возможно, будет иметь список мнений вместо отдельных переменных для каждого мнения.Например, с этой настройкой:
extensions [ nw ]
turtles-own [
opinions
]
to setup
ca
resize-world -5 5 -5 5
set-patch-size 30
crt 30 [
set shape "dot"
set opinions n-values 3 [ precision random-float 10 2]
set color scale-color blue sum opinions -5 35
while [ any? other turtles-here ] [
move-to one-of neighbors4
]
]
ask turtles [
create-links-with turtles-on neighbors4
]
reset-ticks
end
Вы получите что-то вроде этого:
![enter image description here](https://i.stack.imgur.com/oagal.png)
Где у каждой черепахи есть opinions
Переменная списка длиной три элемента.Теперь вы можете сделать так, чтобы каждая черепаха определяла свое наибольшее значение мнения, используя max
, получая положение индекса максимального значения в списке, используя position
, а затем запрашивала соседей этой черепахи, чтобы увидеть, имеют ли какие-либо из них более высокое значение в том же самомпозиция индекса.Если они это сделают, измените список запрашиваемых черепах opinions
, используя replace-item
, чтобы получить среднее значение для двух значений:
to go
ask turtles [
; Get adjacent turtles
let my-nearby-turtles nw:turtles-in-radius 1
; Identify the highest highest value variable of
; the current turtle, and get its list position
let my-opinion max opinions
let my-op-ind position my-opinion opinions
; Pick one of the turtles whose value in the same indexed
; position is higher than my-opinion
let influence one-of my-nearby-turtles with [
item my-op-ind opinions > my-opinion
]
; If that turtle exists, update my own opinions list as appropriate
if influence != nobody [
let new-opinion precision (
( [ item my-op-ind opinions ] of influence + my-opinion ) / 2
) 2
set opinions replace-item my-op-ind opinions new-opinion
]
set color scale-color blue sum opinions -5 35
]
tick
end
Надеюсь, что это на правильном пути, но не уверен, что список будетработать на то, что вам нужно.Если вы должны иметь переменные в качестве отдельных значений на каждом тике, я полагаю, что вы можете преобразовать их в список, а затем выполнить процедуру, описанную выше.Если они нужны только для вывода, вы можете просто обновить свои уникальные переменные по мере необходимости на основе значений в списке (если вы соответствуете порядку).