Zuerst meine wichtigste Empfehlung ist NW Arbeit zu bekommen. Ich würde glücklich sein, dabei zu helfen.
In diesem Fall wird davon ausgegangen, dass Sie mit ungerichteten Netzwerken arbeiten. Wenn das nicht die Besetzung ist, lass es mich wissen.
Das Problem mit der Methode, die Sie beschreiben, ist, dass es Nachbarn Nachbarn mehrere Male zählt. Stattdessen können Sie den Agenten-Satz von Nachbarn von Nachbarn bekommen, und dann ist es nur zählen:
to-report neighbors-of-neighbors
report turtle-set [ link-neighbors ] of link-neighbors
end
Dann [ count neighbors-of-neighbors ] of turtle 0
wird die Anzahl der Nachbarn von Nachbarn von turtle 0
geben. Jetzt
, ein paar Punkte:
Dazu gehören die Schildkröte selbst, da eine Schildkröte immer eine Verbindung Nachbar seiner Verbindung Nachbarn ist. Wenn Sie die Schildkröte nicht selbst aufnehmen möchten, können Sie einfach eine other
dort hineinwerfen: [ count other neighbors-of-neighbors ] of turtle 0
.
Diese nicht gehören Schildkröten, die Link Nachbarn der Schildkröte 0 sind, sind aber nicht auf andere Nachbarn der Schildkröte verknüpft 0. denen hinzuzufügen, könnte man ein Verfahren wie folgt betrachten:
to-report turtles-in-link-radius [ n ]
let result turtle-set self
repeat n [
set result (turtle-set result [ link-neighbors ] of result)
]
report result
end
Dies kann dann zum Beispiel so verwendet werden: [ count turtle-in-link-radius 2 ] of turtle 0
, um alle Schildkröten höchstens 2 Hopfen von Schildkröte 0 zu zählen. Dieser Reporter hat das gleiche Verhalten wie nw:turtles-in-radius
, obwohl es deutlich langsamer sein wird.
Jetzt bemerkte ich zuerst, dass Ihre Idee einige Schildkröten mehrere Male zählen würde. Wenn Sie sich für Eigenvektorenzentralität interessieren, ist es vielleicht das, was Sie wollen. In diesem Fall können Sie dies tun: [ sum [ count link-neighbors ] of link-neighbors ] of turtle 0
, um es zu bekommen, ohne sich mit einem Schildkröten-eigenen zu beschäftigen. Das heißt, wenn Sie ein Schildkröten-eigenen nutzen, können Sie tatsächlich die Eigenvektor Zentralität berechnen sich:
turtles-own [
...
next-ec ;; helper variable for iteratively computing eigenvector-centrality
eigenvector-centrality
...
]
to calculate-eigenvector-centralities
ask turtles [
set eigenvector-centrality 1
]
repeat 100 [ ;; the higher this number, the more accurate the value. NW uses 100
ask turtles [
set next-ec sum [ eigenvector-centrality ] of link-neighbors
]
let max-ec max [ next-ec ] of turtles
ask turtles [
set eigenvector-centrality next-ec/max-ec ;; normalize
]
]
end
Anruf calculate-eigenvector-centralities
alle Schildkröten berechnen Eigenvektor Zentralitäten. Die Eigenvektor-Zentralitäten der Schildkröten werden dann in eigenvector-centrality
gespeichert. Beachten Sie, dass dieser Code nicht funktioniert für getrennte Netzwerke: Jede Komponente muss unabhängig normalisiert werden, was ist, was NW tut, aber es gibt keinen einfachen Weg, das in NetLogo zu tun, ohne NW zu verwenden.
Ich bin der aktuelle Betreuer der NW-Erweiterung. Welche Probleme hast du damit? 'nw: eigenvector-centrality' funktioniert nicht in getrennten Netzwerken, sollte aber in der neuesten Version funktionieren. Was sind die Probleme, die Sie sehen? Welche Version von NetLogo verwenden Sie? –