Как составить список / массив патчей-черепах здесь? - PullRequest
0 голосов
/ 18 октября 2018

У меня нет опыта работы с netlogo, поэтому я спрашиваю, знает ли кто-нибудь, как установить наибольшую энергию черепахи на патч-здесь.Если у меня на патче есть агент y и 3, 2 или 4 x, я хочу, чтобы агент y остался с самой большой энергией из этих 3, я знаю, что должен сделать цикл, но как мне сделать цикл, не зная, сколькоагенты типа х в этом патче?

breed [ y ys]
breed [ x ys]
x-own[ energy]
y-own [ energy ]

    to move-y
    ask y[
      if count x-on patch-here > 2
      [
       set breed x
       ;anyone can help ?
       let energy one-of x-on patch-here ; this is wrong because i dont want a random 
      ]
    ]
    end

надеюсь, вы мне поможете =)

1 Ответ

0 голосов
/ 19 октября 2018

Прежде всего, вы, вероятно, не должны думать с точки зрения циклов.NetLogo имеет множество примитивов, которые работают с наборами агентов (например, ask и of) и со списками (например, foreach и map), но вам почти никогда не нужно писать явный цикл с индексом, который вы увеличиваете.

Еще одно замечание о вашем коде: вы перевернули множественное число и имя единственного числа при объявлении своих пород.Множественное число должно стоять на первом месте, поэтому оно должно быть breed [ xs x ] вместо breed [ x xs ].

Теперь, что касается вашей конкретной проблемы: вам не нужен patch-here, поскольку NetLogo также предоставляет <breeds>-here примитив, который делает то, что вам нужно, немного более напрямую.

Что касается получения максимальной энергии всех xs на пути, вы можете просто использовать max примитив:

breed [ xs x ]
breed [ ys y ]
xs-own [ energy]
ys-own [ energy ]

to move-y
  ask ys [
    if count xs-here > 2 [
      set energy max [ energy ] of xs-here
      set breed xs
    ]
  ]
end

Обратите внимание, что результаты могут отличаться в зависимости от того, изменяете ли вы породу текущего y на xs до или после установки energy.Я дам вам попытаться выяснить, почему.

...