Как создать сеть соседей? - PullRequest
0 голосов
/ 06 мая 2020

Привет, я новичок в netlo go и не имею опыта программирования. Я пытаюсь создать сеть «соседей», используя расширение ГИС, пока я использую функцию in-radius, но не уверен, что это тот, который подходит. поскольку я не понимаю единицы измерения radius в Netlo go

, вот код:

to setup
  clear-drawing
  clear-all
  reset-ticks

  ; zoom to study area
  resize-world 00 45 0 20
  set-patch-size 20

  ; upload city boundries
  set mosul-data gis:load-dataset"data/MosulBoundries.shp"
  gis:set-world-envelope gis:envelope-of mosul-data
  gis:apply-coverage mosul-data "Q_NAME_E" neighbor


to Neighbour-network
  ;; set 7 neighbour agents inside the city  
  ask turtles [ 
    let target other turtles in-radius 1 
    if any? target
    [ask one-of target [create-link-with myself]]
  ]
  print count links

Я хочу, чтобы для каждого района neighbor каждый агент был связан с 7 ближайших соседей. предполагаю, что в строке if any? target что-то нужно изменить, но все мои попытки пока бесполезны.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 08 мая 2020

Мне неясно, как ГИС относится к этому вопросу, и вы не предоставили код для создания агентов, поэтому я не могу дать полный ответ. NetLo go имеет автоматически встроенную систему координат. У каждого агента есть позиция в этой системе координат, и каждый патч занимает пространство 1 на 1 квадрат (с центром в целочисленных координатах). Примитивы in-radius и distance указаны в единицах расстояния.

Однако, если все, что вы хотите сделать, это подключиться к 7 ближайшим черепахам, вам ничего из этого не нужно, потому что NetLo go можно просто найти этих черепах напрямую, найдя черепах, находящихся на минимальном расстоянии от запрашиваемой черепахи. Здесь используется min-n-of, чтобы найти заданное количество черепах с соответствующим минимумом, и distance [myself] для вещи, которую нужно минимизировать. Все это, включая создание ссылок на сгенерированный набор черепах, может быть выполнено в одной строке кода.

Вот полная модель, чтобы показать вам, как это выглядит:

to testme
  clear-all
  create-turtles 100 [setxy random-xcor random-ycor]
  ask n-of 5 turtles
  [ create-links-with min-n-of 7 other turtles [distance myself]
  ]
end
0 голосов
/ 07 мая 2020

Сара:

1) Это помогло мне понять использование in-radius в NetLo go (или единицы радиуса): когда вы используете in-radius 1 в патче. -context, будут выбраны 5 патчей (патч, в котором находится запрашиваемая черепаха и четыре соседа, не все 8 соседних патчей ).

enter image description here

2) Рассмотрите возможность использования «min-one-of target [distance self]» вместо «one-of-target».

min-one-of: http://ccl.northwestern.edu/netlogo/docs/dict/min-one-of.html

расстояние: http://ccl.northwestern.edu/netlogo/docs/dict/distance.html

to Neighbour-network
; set 7 neighbour agents inside the city
ask turtles [
    let target other turtles in-radius 1
    let counter 0
    while [ count target > 0 and counter < 8 ]
    [ ask min-one-of target [ distance myself ] [
        create-link-with myself
        set counter counter + 1
      ]
    ]
    show my-links
  ]

3) Рассмотрите возможность изучения расширения Nw: https://ccl.northwestern.edu/netlogo/docs/nw.html

...