Ich bin neu bei NetLogo. Ich bin nicht neu in der agentenbasierten Modellierung. Hin und wieder sehe ich Leute sagen NetLogo ist so lustig und einfach, dass ich es versuche.Netlogo: Nachricht an alle außer einem Agenten senden
Ich bin auf Platz 1 stecken, kann nicht herausfinden, Code für die Nachrichtenübermittlung zwischen Agenten, die Planung von Aktionen für Teilmengen von Agenten, andere grundlegende ABM Dinge.
Ich arbeite an einem Mehrheitswahlmodell, in dem die Schildkröten Wähler mit zufällig angeordneten x, y Koordinaten sind. Kandidaten (eine neue Rasse) machen Versprechungen in x, y-Ebene, der Gewinnerkandidat ist derjenige, der von (mehr) Agenten bevorzugt wird. in der Aktualisierung der Kandidatenpositionen
Die Patches spielen überhaupt keine Rolle, es sei denn die räumliche Diagramm Verwendung eines Gitters
Ich habe Probleme zu erfordern scheint. Ich habe das wie folgt konzipiert: Entferne einen "Gewinner" -Agenten aus dem Kandidaten-Agentensatz, sage den anderen Kandidaten, dass er sich anpassen soll, lege dann den Gewinner zurück in die Agentenliste und schaue, wer in der nächsten Zeit gewinnt.
Ich glaube, das Folgende ist in der Nähe von minimalen reproduzierbaren Beispiel. Sehen Sie sich adjustOfferings an. (Sorry, verließ ich in vielen Show-Anweisungen können sonst nicht sagen, was los ist.)
; Paul Johnson
; 20160801
breed [candidates candidate]
globals[
N
D
]
; turtles are voters, Euclidean-based preferences. Use
; built-in 2d coordinates for ideal points for now,
; need to learn how to create weighted multi-dimensional
; preferences later
turtles-own
[
name
]
to setup
ca ; clear all
reset-ticks ; time start 0
set N 100
; N voters with random x,y ideal points
create-turtles N
[
setxy random-xcor random-ycor
]
set D 2
create-candidates D
[
setxy random-xcor random-ycor
set shape "square"
set size 2
]
end
; collect up the votes. Don't worry about invading agent
; privacy, just measure for them
to-report election2 [choices]
let fave [min-one-of choices [distance myself]] of turtles
report fave
end
; Ask all non winners to adjust their offering
to adjustOfferings [winner]
show (word "in adjustOfferings, winner was: " winner)
let losers candidates with [self != winner]
show (word "adjustOfferings losers are: " losers)
ask losers
[
setxy random-xcor random-ycor
]
end
; ask each voter for its favorite,
; use modes to calculate the winner
to electionCycle
let theVotes election2 candidates
show (word "electionCycle: " theVotes)
let winner modes theVotes
show (word "electionCycle Winner: " winner)
adjustOfferings winner
end
to go
tick
if ticks > 1000
[
stop
]
electionCycle
end
Das Setup funktioniert gut, ich sehe Agenten und Kandidaten. Wenn ich den "Step-Button" drücke, kann ich sehen, dass die Wahl funktioniert, ein Gewinner wird ausgewählt, aber alle Kandidaten passen sich an (nicht nur Verlierer). Hier ist die Konsole:
observer: "electionCycle: [(candidate 100) (candidate 101)
(candidate 101) (candidate 101) (candidate 100) (candidate 101)
[snip]
(candidate 100) (candidate 101)]"
observer: "electionCycle Winner: [(candidate 100)]"
observer: "in adjustOfferings, winner was: [(candidate 100)]"
observer: "adjustOfferings losers are: (agentset, 2 turtles)"
mir scheint dies ist die Fehlerquelle:
let losers candidates with [self != winner]
Der Gewinner ist immer noch in Verlierer danach.
Ich weiß, jetzt können Sie das tatsächlich nicht ohne den Rest der NetLogo-Datei ausführen. Was ist Ihr Brauch, um das vollständig lauffähige Beispiel bereitzustellen? Kann ich Sie auf eine Datei auf einer Website hinweisen? http://pj.freefaculty.org/scraps/majority.nlogo. Ich könnte dies in GitHub oder sonst wo einfügen, wenn Sie bevorzugen.
Ich schätze Ihren Rat.
In den meisten Fällen können erfahrenere NetLogo-Programmierer sehen, was das Problem ist, ohne Ihren Code auszuführen. Wir haben nicht wirklich ein Verfahren, um voll funktionsfähige Modelle zu teilen, also würde ich es ehrlich sagen, wenn jemand nicht ausdrücklich darum bittet - sie werden wahrscheinlich einen Platz vorschlagen. Ich habe GH, GIS oder Leute gesehen, die sie auf ihre eigenen Webserver gestellt haben. –