NetLogo: nw: сохранение матрицы упорядочения узлов

Я генерирую различные виды сетей в NetLogo 5.1 с расширением сети.

Я использую nw:save-matrix для хранения невзвешенной матрицы связности сети, которую затем загружаю в R для выполнения более сложных вычислений.

В этой матрице я хотел бы знать, какая строка / столбец соответствует какой черепахе. Я сначала, хотя, что порядок будет просто возрастающим порядком [кто] (т.е. строка / столбец 1 матрицы будет просто соответствовать черепахе с самым низким ID). К сожалению, это не так.

Я пробовал разные спецификации для nw: set-context, чтобы отсортировать черепах в сетевом контексте. Например:

nw: set-context (черепахи с сортировкой черепах)) (ссылки с сортировкой ссылок)

nw: set-context (карта набора черепах [turtle?] (sort [who] of turtle))) (ссылки сортировки set-set)

Я даже явно указал каждую черепаху по их [кто]:

nw: set-context (набор черепах (черепаха 80) (черепаха 117) (черепаха 140) (черепаха 153) ......

Но эти попытки оказались безуспешными... Я также заметил, что порядок не случайный. Например, я знаю, что узлом с наивысшей степенью является черепаха 80, но матрица, полученная из nw:save-matrix, всегда соответствует 766-й строке / столбцу.

Это также вопрос заказа ссылок? Есть идеи о том, как на самом деле работает nw:save-matrix? Должен ли я использовать другую стратегию, чтобы получить эту "упорядоченную" матрицу связности в R?

Лучший,

1 ответ

Решение

В настоящее время нет последовательного заказа. Однако это не было преднамеренным. Я создал для него ошибку: https://github.com/NetLogo/NW-Extension/issues/151

Как обходной путь, вы можете легко сгенерировать матричные файлы самостоятельно. Нечто подобное сделает это, хотя оно включает в себя все ссылки и черепахи, а не только в контексте. Не должно быть слишком сложно настроить, если вы используете ограниченный контекст:

to save-matrix [ filename ]
  if file-exists? filename [ file-delete filename ]
  file-open filename
  let turtle-list sort turtles
  foreach turtle-list [
    let source ?
    foreach turtle-list [
       let target ?
       ifelse [ link-neighbor? target ] of source [
         file-type "1 "
       ] [
         file-type "0 "
       ]
    ]
    file-print ""
  ]
  file-close
end

У меня не было возможности проверить это, но это должно сработать.

Протестировано и обновлено с исправленным кодом.

Другие вопросы по тегам