Ok, nun werden wir die Prozedur für
"konkurrieren für Lebensraum"
("compete for space") veranlagen.
Zuerst, dies involviert ein paar Bedingungen.
Wir wollen sagen:
Wenn beliebig (if any)...
Wir müssen die Schildkröten fragen.
Wenn es hier irgend welche andere Schildkröten gibt
- Das sind spezielle Begriffe mit denen
Sie vertrauter nach dieses Übungen werden.-
... aber wenn hier irgendwelche andere
Schildkröten hier sind, dann: sterben.
Schildkröten bedeuten in diesem Zusammenhang...
Wenn Sie im Raum sind,
welches eine andere Schildkröte beinhaltet,
Sie sollen nur sterben!
...dies ist die extreme Form
von überfüllt, richtig?
Ok, nun müssen wir eine Prozedur schreiben
für die Umstände in denen
unsere Schildkröten sterben werden,
wegen Überfüllung.
Wir brauchen einen Parameter der sagt -
der im Zusammenhang zur Überfüllung steht.
Lasst uns diese Parameter Raum (room) nennen.
Ich werde hinzufügen...
...Ich werde es Raum (space) nennen.
Wir haben hier den Schieber, genannt Raum (space).
Wir wissen, dass um jede Schildkröte herum
gibt es eine Nachbarschaft
von 8 Räumen.
In den Norden, Süden, Osten, Westen,
Nord-Westen, Süd-Westen und so weiter.
Für diese 8 Räume haben wir einen Schieber gemacht
der von 1 bis 8 geht.
Und ich werde fragen...
...Wir können einfach zählen
die Nachbar Schildkröten.
Also, wenn wir sagen
Wenn (if) die Zählung (count)
von Schildkröten (turtles) auf (on)
Nachbarn (neighbour) ist (is) minus...
Lasst uns sagen 8 -
Zählung der Schildkröten.
Das gibt uns...
Denk darüber nach für eine Sekunde...
Dass sollte uns geben wie viele lehre Räume...
Da sind 8 Räume, nimm weg viele Schildkröten
auf dieses Räumen sind.
Und wir wissen wie viele lehre Räume
übrig sind. Wenn diese Nummer...
Wenn die lehren Räume weniger sind als
als die Menge an Raum die die Schildkröte
zum Leben braucht
dann fragen wir die Schildkröte zu sterben.
Ok, wir haben nun eine Kondition kreiert,
die die Schildkröten fragt zu sterben
wenn der lehre Raum, minus die Zählung von
der Nachbar Schildkröten, weniger ist als der Raum
den sie zum leben brauchen.
Und wir können den Raum festlegen...
...von einem Raum zu 8 Räumen.
So, offensichtlich,
die Schildkröten brauchen 8 Plätze
um zu leben, sie müssen daher sehr dünn
besiedelt sein. Das ist eine Ressource
die den Wachstum der Population einschränkt.
So, ich werde hier eine Notiz machen.
...eingeschränkt zu wachsen...
Nur um zu illustrieren dass wir durchgehend
Kommentare hinzufügen sollten,
damit andere Leute unseren Code verstehen können.
Und damit wir später darauf zurück kommen können.
Wir können verstehen was die Teile des Codes tun können.
Nun müssen wir unsere
Zerstreuungs- (disperse) Prozedur schreiben.
Das wird die letzte Prozedur sein.
Ok, um zu zerstreuen,
müssen wir die Schildkröten fragen
sich zu bewegen zu (move to)
einer der Stellen (one-of patches)
mit keinen Schildkröten hier (with no turtles here).
Nun diese Sprache ist
ganz und gar nicht selbstverständlich.
Dies verlangt viel Zeit damit zu verbringen
ins Lexikon/Wörterbuch zu schauen.
Es liest sich relativ gut auf Englisch,
wenn Sie es sehen.
Aber es ist nicht so einfach sich das auszudenken,
wenn man anfängt zu programmieren.
Es ist gut sich Beispiel Codes anzusehen.
Und das wird einer der Beispiel Codes sein,
dass Sie sich zum merken ansehen können.
All diese speziellen Wörter
und wie sie funktionieren.
Was wir im Grunde machen ist,
wir reden zu einem Set von Agenten, Stellen,
Teilmengen von allen Stellen,
jene mit dieser Eigenschaft, konditionellen Mathematik.
Keine Schildkröten hier.
Wir schauen uns jede Stelle an und
wenn es keine Schildkröten auf sich hat dann
werden wir uns zu einer dieser Stellen bewegen.
Nun...wir müssen... dies nur machen...
da ist eine kleine knifflige Sache hier.
Falls wir die Schildkröten fragen dies zu tun
und keiner dieser Stellen wäre frei,
diese Schildkröten könnten
fortlaufend versuchen eine Stelle zu finden,
in dieses kleinen Code denn wir nie beenden.
Daher müssen wir sicherstellen die Kondition
hinzuzufügen, dass wir dies nur tun, wenn
dort [freie] Stellen sind.
Es ist wichtig diese Sache nur laufen zu lassen,
falls (if) die Zählung (count) von
Schildkröten (turtles)... die Anzahl
von Schildkröten, die auf den Bildschirm sind
ist weniger als oder gleich wie (to)
die Anzahl (count) von Stellen (patches).
Es ist möglich die Situation zu haben,
dass es mehr Schildkröten als Stellen gibt.
Und dann wäre es hoffnungslos,
weil gebe Schildkröten die niemals
ein Zuhause finden könnten.
Der Code würde nur weiterlaufen
und wir wundern uns was passiert.
Ich rede hier aus Erfahrung.
Ok, ich denke das sollte funktionieren.
Lasst uns sehen ob diese gesamte Sache
jetzt laufen kann.
Da sind noch Fragen
Wir richten es ein (setup).
Lasst uns eine größere
Initial Population festlegen.
Wir noch immer diesen Farbeinwechsel.
Lasst uns die Sachen loswerden, die ich
hinzugefügt habe um einen künstliche
Zerstreuung zu haben.
So, wir löschen das.
Es sollte möglich sein zu behalten...
Ok, es sieht so aus als ob
etwas passiert ist.
Ich bin mir nicht sicher was.
Lasst uns das laufen lassen sodass wir
eine höhere Dichte erreichen können.
Ok, wenn wir "step" drücken, sollten wir haben...
ok, und wenn wir verlangen,
dass wir viel Platz brauchen.
Lasst uns sehen ob es eine
dünnere Populationsdichte kreiert.
In der Tat, tut es das.
Und wenn wir ihnen weniger Platz abverlangen,
wir werden die Dichte erhöhen.
Auf den ersten Blick,
sieht es für mich so aus als ob
wir hier ein Model haben, das
ungefähr funktioniert.
Lasst uns sehen was für Sachen passieren,
wenn wir uns die Population ansehen.
Ich werde hier einen einfachen Plot machen.
Die Voreinstellung ist ein Plot, dass
die Schildkröten zählt.
Damit dieses Plot abbildet... müssen wir
was mit dem Model machen
Und das wird bei jedem Tick passieren.
So, jedes mal wenn wir "step" drücken,
und wir sagen "tick"
nun, das wird uns einen Fehlermeldung beim
ersten mal geben.
Lasst uns sehen was es uns gibt wenn
setup und dann step drücken.
Es sagt: Die Tick Ecke(corner?)
wurde nicht festgelegt. Stelle die Tick ein.
Wir müssen den Befehl Ticks Wiedereinstellen
(reset ticks) im Setup benutzen.
Ich mache es üblich nach meinem "clear all"
Tick wiedereinstellen (reset-ticks)
So, "setup"... ok...
Nun, ich bin mir nicht sicher ob dies genau
das war was wir haben wollten.
Lasst uns mit einer geringen Population starten.
...Und... lasst uns sehen ob dies klappt.
Initial Population 12 - Mach ich das richtig?
Es sieht für mich so aus, als ob
unsere Reproduktionsfunktion nicht funktioniert.
Oder vielleicht...
Lasst uns herausfinden was hier
vor sich geht.
Wir inspizieren die Schildkröten.
Es sind 20.
Generationen:13
Ich zeige Ihnen wie ich dies debugge.
Das Problem hier ist,
die Reproduktion funktioniert nicht oder
die Eltern sterben mit ...Generationen
jünger als die jetzige Generation.
...[comment out] und sehen was passiert...
Wir sollten einen exponentiellen Wachstum
jetzt haben.
Etwas passiert wenn wir "schnappen".
...Jetzige Generation - Es macht nichts! ...
Ich frag mich ob das die Funktion ist,
die verantwortlich ist für all die Probleme hier.
Lasst uns sehen.
Da ist irgendwas mit meinem Computer...
für Raum... frage die Schildkröten ob
irgendwelche anderen Schildkröten
hier sterben.
Andere Schildkröten sollte bedeuten Schildkröten
nicht ich selber (myself).
Wir fragen alle Schildkröten.
Ich glaube, dass das nicht das Problem ist.
Lasst uns nur diesen Teil raus nehmen.
Ich glaube nicht, dass das Probleme macht,
aber lasst uns das zurücksetzen.
Ich schalte das nur für eine Sekunde aus...
für Raum konkurrieren...
Ich vermute, dass wir
weiterhin das selbe Problem haben werden.
Und ich habe falsch vermutet.
Lasst uns zum Schauen zurückgehen.
Das ist die Regel die Problem auslöst:
Wenn irgendwelche anderen Schildkröten
hier sterben.
So, ok.
Oh, ich sehe das Problem.
Wir müssen haben... die anderen Schildkröten...
Diese Regel hier tötet die Nachkommen.
Denn wenn die Nachkommen geboren werden
diese Regel fragt und dann sterben sie sofort.
Diese Nachkommen müssen sich ausbreiten,
bevor wir für Lebensraum konkurrieren (compete for space)
benutzen.
Also, wir reproduzieren und dann
breiten wir uns aus
und dann konkurrieren wir für Raum.
Diese Programme funktionieren fasst nie
gleich zu Beginn.
Sie müssen damit rumspielen.
Ich hoffe, dass dies funktioniert.
Was ich sage: Nachdem du dich
reproduziert hast, dann wir...
Lasst uns die Ausbreitung gleich nach der
Reproduktion setzen.
Das macht Sinn, richtig?
...Und dann sterben die Eltern.
Also, die vorherige Generation stirbt.
Und dann ist da um Raum konkurrieren.
So, lasst uns sehen ob die nur die geänderte
Anordnung davon einen Unterschied macht.
Ich werde anschalten, dass die
Eltern sterben.
Alles ist angeschaltet.
Wir haben nur die Anordnung davon geändert.
So, "setup"
"step"
Ok, nun erhalten wir exponentiellen
Wachstum. Und dann kriegen wir eine
Art...?...
Ich habe nicht die Wieder-Organisierung gesehen.
"step"
Nicht genau was ich erwartet habe,
aber lasst uns sehen, ob
wir etwas mehr Raum brauchen.
Das ist eher wie ich es erwartet habe.
Hier eine Art sigmoidale Kurve.
So, ich brauche viel Raum.
So, langsamerer Wachstum.
Und mehr Variation.
Ich denke, dass dieses Model funktioniert
Nun, exponentieller Wachstum.
Nun, ich bin neugierig warum wir eine
eingefrorene Konfiguration erhalten
an dieser Stelle.
Aber ich bin mir sicher
wenn wir den Code ansehen...
Das sind die Art Fragen
die aufkommen können
wenn sie ein Modell erstellen.
Weil wir uns fragen, warum etwas auf jene
Weise funktioniert.
Und wenn wir eine andere Ausbreitungs- Methode hätten
dann würden wir wahrscheinlich was anderes sehen.
Wenn ich mehr Zeit mit diesem Modell
verbringen würde, dann wäre eine Sache
die ich ändern würde, wäre diese Ausbreitungs-
Sache, sodass es physikalisch etwas
realistischer wäre, anstatt dass
die Schildkröten auf magische Weise
zu Stellen hinbewegt werden.,
warum sollte man sie nicht stattdessen
migrieren lassen, sich fortbewegen lassen
bis sie einen leeren Platz finden.
Das wäre ein bisschen mehr Code, aber
das wäre es sicherlich wert.
Das würde wahrscheinlich interessante
Muster kreieren.
Verschiedene Farben für Familien.
Und Sie könnten ihre Migration
zusehen.
Deren Erfolg und Misserfolg im
Laufe der Zeit.
Ich denke, das wäre ein ordentliches Projekt.
Ok, nun zum Schluss um die Lücke
zu füllen, wir haben einen
'step' Knopf der alles hier durchgeht.
Der 'go' Knopf kann der 'step' Button sein
der noch zusätzlich die Attribute anschaltet.
Und wir sollten dies 'go' nennen.
Dass ist ein wichtiger Punkt,
die Anzeige (display) muss nicht das selbe
sein wie Befehl (command), aber
wenn Sie nicht einen Anzeige Name hier einsetzen,
dann wird der Befehl Name als Beschriftung
für den Knopf benutzt.
Also, der Anzeige Name ist die Beschriftung
für den Knopf.
'setup', 'step', 'go'.
Initial Population
Raum
Wir haben ein nettes, kleinen Modell, mit Einschränkungen
und bei bestimmten Raum Einstellungen
tut es einen Ok Job
um exponentiellen Wachstum zu modellieren.
und strebt ungefähr zu einer max. Tragfähigkeit.