2016-01-18 4 views
1

У меня есть от 2 до 10 черепах, помня о пути домой. Координаты черепах сохраняются каждый тик в списке путь.Netlogo: вычислить средний список у черепах

to path-tracker 
    let x xcor      ;; gets the current coordinates 
    let y ycor 
    facexy x y 
    setxy x y 
    set path lput (list x y) path  ;; adds the coordinate pair (x,y) to the end of the path 
end 

Когда все черепахи достигли цели, процедура останавливается и возвращается в место, где они были начаты. Теперь начинается другая процедура, и они не должны следовать своему собственному пути, но должны следовать среднему пути всех путей.

Итак, как рассчитать средний список всех списков черепах?

+0

Имеет ли средний список, что итоговый список имеет средние координаты от каждой черепахи? – mattsap

+0

Извините за то, что вы не так поняли, но да, я имел в виду так. Например. если есть 5 черепах, то новая координата x и y должна быть каждой черепахой x координата/5 и каждой координаты черепах y/5 – Lukschn

+0

Логотип? : D like ye olde times – Rafael

ответ

1

Это очень простое решение, которое создает список длины пути размера, где? -ый элемент является списком (координатой) среднего значения всего 0-го элемента черепахи (xcordinate) i-го элемента (координата ?) и среднее из 1-го пункта всех черепах (ycoordinate) в го элемента (координата):

let path-length (length [path] of one-of turtles) 
let average n-values path-length [ 
    (list (mean [(item 0 (item ? path)) ] of turtles) 
      (mean [(item 1 (item ? path)) ] of turtles))] 

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

let average-path (list) 
    foreach (n-values path-length [?]) 
    [ 
    let meanx (mean [(item 0 (item ? path)]] of turtles) 
    let meany (mean [(item 1 (item ? path)]] of turtles) 
    set average-path lput (list meanx meany) average-path 
    ] 
+0

Было бы неплохо, если бы это было просто «mapthread mean [путь] черепах» ... – Alan

+0

Что такое mapthread? – mattsap

+1

Это полезная конструкция функционального программирования, которая отсутствует в NetLogo. (Извините, комментарий действительно был для Сета.) – Alan