Во-первых, нет необходимости использовать глобальные переменные, просто используйте let
для создания временной локальной переменной.
Это удивительно сложная проблема, потому что вы не можете использовать ни один из встроенных примитивов, которые находят максимум в наборе агентов, и примитивы списка не имеют такой возможности.
Я написал автономную модель, которая демонстрирует, что вы хотите. Он использует pcolor
в качестве значения вместо взвешенного индекса, и я выбрал цвета, которые становятся темнее при увеличении числа.
to testme
clear-all
ask patches [ set pcolor one-of [ 28 54 110 ] ]
create-turtles 3
[ setxy random-xcor random-ycor
set color white
]
ask turtles
[ set heading 0
let n-patches patches in-cone 16 60
rt 60
let ne-patches patches in-cone 16 60
rt 60
let se-patches patches in-cone 16 60
rt 60
let s-patches patches in-cone 16 60
rt 60
let sw-patches patches in-cone 16 60
rt 60
let nw-patches patches in-cone 16 60
let directions-list shuffle (list n-patches ne-patches se-patches s-patches sw-patches nw-patches)
print directions-list
let sums-list map [ thisDir -> sum [pcolor] of thisDir ] directions-list
print sums-list
let max-sums max sums-list
print max-sums
let chosen position max-sums sums-list
print chosen
face one-of item chosen directions-list
]
end
Вы могли бы использовать to-report
процедуры, чтобы упростить вычисление шести наборов агентов, но я этого не сделал, так как хотел использовать ваш код, чтобы обеспечить его читабельность
Это распечатывает вещи, чтобы вы могли видеть, что они делают. Обратите внимание, что shuffle
предназначен для обеспечения случайного выбора, если 2 или более имеют одинаковые итоги. Помните, что списки NetLogo индексируются 0, поэтому position
будет возвращать от 0 до 5, а не от 1 до 6.
Он помещает наборы агентов в список, вычисляет значение сумм (используя map
) для каждого элемента в списке и помещает эти суммы в новый список в том же порядке. Затем он ищет максимум этого нового списка, находит позицию этого максимума, использует эту позицию для извлечения правильного набора агентов из первого списка, а затем сталкивается со случайным патчем в этом наборе агентов.