Hallo, hier ist John Balwit mit dem "Complexity" Kurs Wir werden einige Lösungen durchgehen für... ...den letzten Teil der Aufgaben der "Dynamics" Reihe für Fortgeschrittene... ...und das wird sicher viel Spaß machen, Wir werden wirklich ein NetLogo Modell erstellen... ...von Beginn an und Sie können beobachten, wie ich das Erstellen von Modellen angehe. Natürlich gibt es viele verschiedene Wege das zu machen... und das Wichtigste, wenn Sie sich ans Programmieren machen ist es, einfach herumzuprobieren und... ...sich nicht zu fürchten, viele Fehler zu machen, denn Sie... Das ist die einzige Mölglichkeit zu lernen... ...von Tausenden von Fehlern. Ich habe mich wirklich schon viel mit solchen Modellen beschäftigt Ich habe Hunderte von Modellen erstellt und ich bin mir sicher, ich werde Fehler machen... ...während ich dieses hier erstelle... ...aber das ist eben Teil des Programmierens! Fortgeschrittenen-Level: Wir werden... ...ein Modell machen... ...das "agent-based" [Agenten-basiertes] Populationswachstum verwendet. Wir werden es nicht auf einer Gleichung aufbauen, wir werden tatsächlich kleine Einheiten erschaffen... ...die sich reproduzieren und wir werden sehen, ob wir... ...ein Verhalten erzeugen können, welches... ...von einem Logistischen Modell für Populationen angeblich... ...beschrieben werden soll. In gewisser Weise werden wir... ...auf dieses Verhalten kommen, aber indem wir es ableiten... ...aus dem tatsächlichen Verhalten von Agenten. Daher ist es auch irgendwie philosophisch interessant... ...dass diese Art von Modellen eigentlich ganz simpel sind... ...und das tatsächliche kollektive Verhalten eine Emergenz... ...der Eigenschaften und Interaktionen der Agenten ist. Fangen wir an! Hier ist also NetLogo, der Bildschirm, den man sieht, wenn man es startet Nur ein simples Interface. Immer, wenn ich mit einem neuen Modell beginne... ...füge ich eine "Setup"- Taste hinzu... ...üblicherweise eine "Step"- Taste,... ...für ein Modell wie dieses hier und... eine "Go"- Taste. Natürlich beziehen die sich noch auf Abläufe, welche ich noch nicht geschrieben habe. Ich achte auch immer darauf, daß ich... ...die Sachen in einer Reihe anordne und den selben Platz zwischen all meinen Buttons freilasse... ...das ist vielleicht so eine kleine Manie von mir, aber es ist mir eben wichtig. Außerdem "label" [hier: versehe ich... (mit Hinweisen)]... ...meine Modelle mit Hinweisen, damit ich mich erinnere, wozu sie da sind... ...wenn ich sie in der Zukunft nutze. So, da wären wir Das ist das Grundlegende, was ich mache, wenn ich ein Modell beginne. Jetzt lassen Sie uns anfangen. Schauen wir mal, was wir machen wollen...wir wollen... ...einen Haufen von Agenten herstellen und die sollen... ...sich reproduzieren und wir wollen einen Graphen haben... ...um zu überprüfen, ob der auch so aussieht, wie eine sigmoide Kurve. Also werden wir auch graphisch darstellen. So, als erstes löschen wir den Standard-Namen... ...und nennen den Graph... ..."population". Da wir wissen... ...daß es eine Auftragung "Population" - versus - "Zeit"- werden wird, ist es immer gut... ...die Achsen zu "labeln" [mit Hinweisen zu versehen]... ...so daß man nicht vergisst... [schreibt] OK, einige der Vorbereitungen sind erledigt. OK. Als nächstes werden wir ein... ..."Setup"-Modul aufstellen, das uns ein paar Agenten erzeugt, also auf zum Code... ...wir schreiben "to setup"... ...ich für meinen Teil schreibe immer den... ...Anfang und das Ende zuerst, weil ich weiss, dass wir das müssen. Wir wissen, dass wir eine bestimmte Anzahl... zu Beginn erzeugen wollen. Daher werden wir wohl... ...einen "slider" [Schieberegler] dafür brauchen...aber wir können auch... ...Naja, machen wir lieber gleich einen "slider", damit wir das... ...auch erledigt haben. So, zurück zum Interface. Wir erstellen einen "slider" und nennen ihn... ..."initial population" [Startpopulation]... ...üblicherweise kopiere ich das gleich. Also, wir werden... ...so viele Startpopulationen...erzeugen;... ...und dann haben wir die Möglichkeit... ...diesen neu erschaffenen Wesen einige Eigenschaften zu verpassen; ich werde ihre Farbe auf... ...grün einstellen, ihre Form auf... ...sagen wir einen Kreis festlegen... ...und ihre Größe... ...lassen wir das noch. Standardmäßig kommen sie mit Größe 1. Jetzt werden wir gleich... ...auf ein Problem dabei stoßen und ich möchte Ihnen das... ...zeigen, weil... ...Setup jetzt funktioniert und per Standardeinstellung 50 Individuen erzeugen wird. Ich... ...mache das jetzt, Ich werde... ...Setup starten und Sie werden sehen, dass... ...es aussieht, als wäre da blos ein Agent erzeugt worden, aber tatsächlich... ...sind es siebenundzwanzig und sie wurden alle... ...übereinander drüber erstellt... ...um sie dazu zu bringen, sich zu bewegen... ...müssten wir... ...sie anweisen, daß jeder jeweils zehn vorwärts geht. Wenn wir jetzt Setup starten, würden wir sehen... ...dass sie alle... ...- da sie alle ja eine zufällige Peilung haben - würden sie sich alle herumbewegt haben. Das ist aber noch nicht das, was wir wollen, oder? Es sieht alles.. ...noch zu organisiert aus... ...zu künstlich. Außerdem haben wir unseren Ersten ja auch noch nicht vom Fleck... Das erinnert mich daran, daß immer wenn wir "Setup" starten... ...daß wir eigentlich immer mit "clear-all" [Alle Löschen] starten... ... - Kürzel dafür ist "ca"- ... ...aber "clear-all" wir das einfach löschen. Statt des "create"- [erzeuge-] -Befehls, was... ...der einfachste Weg ist, um... ...eine Population von Agenten zu erzeugen... ...werden wir etwas anderes benutzen und zwar... ...wir werden die "patches" anweisen. [Patches: Programmteile, welche nachträgliche Korrekturen ermöglichen]. Ich werde eine bestimmte Zahl an "patches" anweisen: "ask n-of... ...initial population" Ich weise also so viele "patches" an... ...zu... "sprout" [keimen bzw. einen Keim zu entwickeln]. Und natürlich... jetzt, da ich mich entschieden habe, wen ich anwiese, ich weise "patches" an... ...was ich von ihnen verlange ist Folgendes... Die "sprout"- Pflicht. Die besagt Folgendes: " Hey, ihr 12 "patches"... ... ich möchte, daß jeder von Euch einen Keimling hervorbringt und dann... ...diesen Keimling anweist, seine Farbe auf "grün" und seine Form auf "Kreis" zu stellen... ...und sich außerdem zehn vorwärts zu bewegen. Das "forward 10" wird nicht mehr gebraucht. Schauen wir mal, ob das funktioniert. Tatsächlich... ...es weist "patches" zufällig an, jedes mal, wenn man es aktiviert... ...weist es zufällig einen bestimmten Satz von "patches"... ...27 in diesem Fall, oder auch 80... Jetzt haben wir also eine Startpopulation... ...an "patches", die wir alle mit dieser einen Zeile Code kontrollieren können. OK, jetzt der nächste Schritt... wir müssen uns klarmachen: Was wollen wir mit denen anstellen? Wir werden wohl... ...wollen, daß diese... ...Agenten, diese kleinen grünen Punkte... ...wir wollen, daß sie sich in erster Linie vermehren. Außerdem werden sie auch sterben können müssen,... ...weil überlappende Generationen vermieden werden sollen, also... ...brauchen wir eine Elterngeneration, welche eine weitere Generation hervorbringt... ...und die Elterngeneration stirbt dann aus. Das bedeutet, wir werden die Generationen verfolgen müssen. Außerdem... ...sollen sie sich ausbreiten, sich verteilen, so daß... ...sie nicht alle am Ende aufeinander liegen und... ...es wird optisch einfach leichter, sie zu verfolgen, wenn... ...sie auf ihrem eigenen "patch" [Fleck] stehen. OK. Wir brauchen hier nicht irgendeine Art von Fortpflanzung... wir könnten das zwar machen... ...aber dann wird es kompliziert. Schauen wir also erst einmal, wie wir das jetzt machen. Ich will, dass sie sich... ... bei jedem Zeitschritt reproduzieren, also... ...scheibe ich "step". Dann machen sie alles, was sie tun sollen... ...es ist also nur eine Art von "Pseudocode". Ich werde sie anweisen, dass sie Folgendes tun sollen: ...sie sollen sich reproduzieren... ...die Eltern sollen sterben... ...und die Verbleibenden sollen sich ausbreiten. So, jetzt haben wir es. Dies sind alles blos Namen für Abläufe, die ich noch nicht geschrieben habe... ...Aber dieser Schritt für die Abläufe besteht darin die Abläufe zu benennen... Überlegen wir uns also, wie Reproduktion funktionieren könnte