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
У меня не было возможности проверить это, но это должно сработать.
Протестировано и обновлено с исправленным кодом.