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.