2017-07-05 7 views
0

Lange Zeit Leser zum ersten Mal Poster. Ich brauche etwas Hilfe in Bezug auf ein NetLogo-Problem, das ich selbst nicht reparieren kann:NetLogo: Nachbarn und Eigenvektor

Ich möchte die Nachbarn und die Nachbarn Nachbarn einer Schildkröte zählen, um herauszufinden, wie man die Eigenvektor-Zentralität berechnen kann . Da ich den NW nicht bekomme: Erweiterungen zur Arbeit und mein Prof weder. Ich dachte daran, selbst eine Methode zu entwickeln. Da ich bis zur ersten Präsentationsrunde nicht viel Zeit habe, versuche ich mein Bestes, um nur die Nachbarn und Nachbarn einer Schildkröte zu zählen. Ich beschloss, eine Schildkröte zu besitzen, die alle Nachbarn zählt und dann alle Nachbarn und Nachbarn zusammenzählt. Aber ich stecke fest in meinem Kopf und kann es nicht zur Arbeit bringen. set Neighborcount count (Link-Nachbarn)

Wer hat noch Ideen? Auch ein letzter Weg, um die Eigenvektorzentralität zum Funktionieren zu bringen, wäre sehr willkommen.

Thx Tizian

+2

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? –

Antwort

3

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.