Как найти среднее расстояние от черепах, которые удовлетворяют определенному условию? - PullRequest
0 голосов
/ 31 марта 2019

Я хочу переместить текущую черепаху на один шаг ближе к другим, которые удовлетворяют определенному условию (например, имеют цвет = зеленый).

Я делаю это трудным путем (потому что я не знаю ничего лучше), пытаясь вычислить среднее расстояние текущей черепахи от всех остальных, которые удовлетворяют условию, и вычислить среднее значение из x + 1, х-1, у + 1, у-1. Тогда тот, который наименьший, будет указывать направление движения. Не очень элегантно, я знаю, и ограничивает движения горизонтальными и вертикальными, но я не мог придумать ничего лучшего (единственная другая идея, которая меня поразила, - это вычислить средние координаты x и y всех черепах, которые удовлетворяют условию, и двигаться текущая черепаха к этому, но это показалось мне еще более смешным)

Проблема в том, что даже с моим неуклюжим решением я никуда не доберусь, так как я пытаюсь вычислить среднее расстояние от «зеленых» черепах.

1 Ответ

1 голос
/ 31 марта 2019

Если вы хотите рассчитать среднее расстояние, вы можете попросить черепаху позвонить mean и [distance myself].

При такой настройке:

to setup
  ca 
  crt 10 [
    set color green
    move-to one-of patches with [ pxcor < 0 ]
  ]
  crt 1 [
    set color red
    move-to one-of patches with [ pxcor > 10 ]
  ]
  reset-ticks
end

При вызове функции ниже красная черепаха распечатает сначала все расстояния между собой и всеми зелеными черепахами, а затем среднее из этих расстояний:

to calc-mean-distance
  ask turtles with [ color = red ] [
    print [ distance myself ] of turtles with [ color = green ]
    print mean [ distance myself ] of turtles with [ color = green ]
  ]
end

Кроме того, я не уверен на 100%, что вы пытаетесь сделать - надеетесь ли вы переместить запрашивающую черепаху к ближайшей черепахе, которая удовлетворяет некоторому условию?Если это так, это может сработать для вас:

to go 
  ask turtles with [ color = red ] [
    let target min-one-of ( turtles with [ color = green ] ) [ distance myself ] 
    face target
    ifelse distance target > 1 [
      fd 1
    ] [
      move-to target
    ]
  ]
  tick
end

Если вы хотите, чтобы запрашивающая черепаха двигалась вместо этого к географическому центру тех черепах, которые удовлетворяют условию, вы действительно могли бы получить средние координаты x и yтех черепах, которых вы описываете, затем попросите черепашку двигаться к этой точке:

to go
  let central-x mean [ xcor ] of turtles with [ color = green ]
  let central-y mean [ ycor ] of turtles with [ color = green ]
  ask turtles with [ color = red ] [
    facexy central-x central-y
    ifelse distancexy central-x central-y > 1 [
      fd 1 
    ] [
      setxy central-x central-y
    ]
  ]
  tick
end

Если это не совсем то, чего вы пытаетесь достичь, не стесняйтесь оставлять комментарии для разъяснения!

...