Simulation programmieren...
Hallo ich würde gerne eine Simulation in python programmieren, um die Objekt orientierte Programmierung besser zu verstehen. Mir ist die Idee mit Wasserflöhen gekommen. jedes Objekt lebt sagen wir mal maximal 60 tage. nach 7 Lebenstagen kann jeweils ein weiterer Floh gezeugt werden... ich hab es nicht hingekriegt, das jedes Objekt irgenwie die tage weiterschalten muss (natürlich synchron mit allen anderen Objekten) Kann mir jemand dabei helfen, sowas zu programmieren ? Gruß Josh
Am 16.07.2014 02:24, schrieb Josh Butz:
ich hab es nicht hingekriegt, das jedes Objekt irgenwie die tage weiterschalten muss (natürlich synchron mit allen anderen Objekten)
Wasserflöhe sind eine nett Idee :-) Das alter ist zwar eine Eigenschaft des Flohs, er kann es aber nicht beeinflussen: Er wird älter ob er will oder nicht. Sprich: Das Alter wird von aussen gesetzt: class Wasserfloh: def werde_aelter(tage): # tage ist typischerweise nur 1, aber man weiß ja nie, vielleicht leigt der Floh ja mal im Koma self.alter += tage irgendwo in Programm (also nicht im Floh): # es ist Mitternacht, alle werden aelter for floh in alle_floehe: floh.werde_aelter(1) -- Schönen Gruß Hartmut Goebel Dipl.-Informatiker (univ), CISSP, CSSLP Information Security Management, Security Governance, Secure Software Development Goebel Consult, Landshut http://www.goebel-consult.de Blog: http://www.goebel-consult.de/blog/digitalcourage-fur-taz-panter-preis-vorges... Kolumne: http://www.cissp-gefluester.de/2012-02-bring-your-own-life-glosse Goebel Consult ist Mitglied bei http://www.7-it.de/
Hartmut Goebel schrieb:
Am 16.07.2014 02:24, schrieb Josh Butz:
ich hab es nicht hingekriegt, das jedes Objekt irgenwie die tage weiterschalten muss (natürlich synchron mit allen anderen Objekten)
Wasserflöhe sind eine nett Idee :-)
Das alter ist zwar eine Eigenschaft des Flohs, er kann es aber nicht beeinflussen: Er wird älter ob er will oder nicht. Sprich: Das Alter wird von aussen gesetzt:
class Wasserfloh: def werde_aelter(tage): # tage ist typischerweise nur 1, aber man weiß ja nie, vielleicht leigt der Floh ja mal im Koma self.alter += tage
irgendwo in Programm (also nicht im Floh):
# es ist Mitternacht, alle werden aelter for floh in alle_floehe: floh.werde_aelter(1) Wichtig ist vor allem, dass du eine globale Registry hast, in der alle Flöhe erfasst sind. In Hartmuts Beispiel ist das alle_floehe. Die Registry braucht natürlich auch Code, der tote Flöhe entfernt. Außerdem könnte sie benutzt werden, um Umwelteinflüsse zu simulieren. Die Regsitry ist also quasi die Umgebung, in der Flöhe leben.
Viele Grüße Markus
On Wed, 16 Jul 2014 10:13:16 +0200 Markus Zapke-Gründemann <markuszapke@gmx.net> wrote:
Hartmut Goebel schrieb:
Am 16.07.2014 02:24, schrieb Josh Butz:
ich hab es nicht hingekriegt, das jedes Objekt irgenwie die tage weiterschalten muss (natürlich synchron mit allen anderen Objekten)
Wasserflöhe sind eine nett Idee :-)
Das alter ist zwar eine Eigenschaft des Flohs, er kann es aber nicht beeinflussen: Er wird älter ob er will oder nicht. Sprich: Das Alter wird von aussen gesetzt:
class Wasserfloh: def werde_aelter(tage): # tage ist typischerweise nur 1, aber man weiß ja nie, vielleicht leigt der Floh ja mal im Koma self.alter += tage
irgendwo in Programm (also nicht im Floh):
# es ist Mitternacht, alle werden aelter for floh in alle_floehe: floh.werde_aelter(1) Wichtig ist vor allem, dass du eine globale Registry hast, in der alle Flöhe erfasst sind. In Hartmuts Beispiel ist das alle_floehe. Die Registry braucht natürlich auch Code, der tote Flöhe entfernt. Außerdem könnte sie benutzt werden, um Umwelteinflüsse zu simulieren. Die Regsitry ist also quasi die Umgebung, in der Flöhe leben.
Oder die Flöhe kennen ihr "Geburtsdatum" und können mit dem aktuellen Datum ihr Alter ausrechnen. Dann könnte man jeden Floh auch in seinen eigenen Thread/Prozess stecken, sie müssen dann nur einen Verweis auf die Umgebung haben, um eben das aktuelle Herauszufinden. Und eine Funktion auf dem Floh müsste regelmäßig prüfen, ob das Sterbealter überschritten ist und den Floh selbst löschen. Bloß die Interaktion mit den anderen Flöhen wird bei so etwas "unabhängigem" schwerer. Also vielleicht doch alles in einem Umgebungsobjekt verwalten und die Flöhe einfach halten. Da gibt es doch nächste Woche auf der EuroPython auch nen Vortrag zu so einem diskreten Simulationssystem, oder? - Arnold
Am 16.07.2014 10:13, schrieb Markus Zapke-Gründemann:
Wichtig ist vor allem, dass du eine globale Registry hast, in der alle Flöhe erfasst sind. In Hartmuts Beispiel ist das alle_floehe. Die Registry braucht natürlich auch Code, der tote Flöhe entfernt. Außerdem könnte sie benutzt werden, um Umwelteinflüsse zu simulieren. Die Regsitry ist also quasi die Umgebung, in der Flöhe leben.
Auf diese Weise ist auch meistens Conways "Game of Life" implementiert. Die Umgebung ("Welt") ist dort meistens ein quadratisches Feld, in Zeilen und Spalten unterteilt. Dies kann leicht mit einem zwei-dimensionalen Array (bzw. in Python einer geschachtelten Liste) modeliert werden. Alternativ hast du eine Liste oder ein Container-Objekt für alle Flöhe und jedes Floh-Objekt speichert selbst seine Position in irgendeinem Koordinatensystem. Schau dir mal die Dokumentation zur Group-Klasse im pygame.sprite-Modul an. Die ist genau für die Verwaltung von solchen Population in einer 2D-Umgebung gemacht. Vielleicht kommst du da auf ein paar Ideen. http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Group Chris
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Am 16.07.14 21:45, schrieb Christopher Arndt:
Am 16.07.2014 10:13, schrieb Markus Zapke-Gründemann:
Wichtig ist vor allem, dass du eine globale Registry hast, in der alle Flöhe erfasst sind. In Hartmuts Beispiel ist das alle_floehe. Die Registry braucht natürlich auch Code, der tote Flöhe entfernt. Außerdem könnte sie benutzt werden, um Umwelteinflüsse zu simulieren. Die Regsitry ist also quasi die Umgebung, in der Flöhe leben.
Auf diese Weise ist auch meistens Conways "Game of Life" implementiert. Die Umgebung ("Welt") ist dort meistens ein quadratisches Feld, in Zeilen und Spalten unterteilt. Dies kann leicht mit einem zwei-dimensionalen Array (bzw. in Python einer geschachtelten Liste) modeliert werden.
Alternativ hast du eine Liste oder ein Container-Objekt für alle Flöhe und jedes Floh-Objekt speichert selbst seine Position in irgendeinem Koordinatensystem.
Schau dir mal die Dokumentation zur Group-Klasse im pygame.sprite-Modul an. Die ist genau für die Verwaltung von solchen Population in einer 2D-Umgebung gemacht. Vielleicht kommst du da auf ein paar Ideen.
http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Group
Chris _______________________________________________ python-de maillist - python-de@python.org https://mail.python.org/mailman/listinfo/python-de
-----BEGIN PGP SIGNATURE----- Version: GnuPG/MacGPG2 v2.0.19 (Darwin) Comment: GPGTools - http://gpgtools.org Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQEcBAEBCgAGBQJT2kQYAAoJEKsZq3n7oDOxsbIH/iA0ptOX/3SK/jD51RVQ3cFk cT50YU+3jgKbggUafMinIKMoXv0JtjRgEdzBOlXNM+LnVtZxIz9xctfZYPkart0i u50C+ReP0H/KC/C97A/+TaqPQL1Rh0PxG2l4sLsehV346ic5yYSbMnNhtxMq/cY4 aM5x15R/OY1MabIWhPyFHNs+UvtpYi7yvKg2uyMUHOifn4Bjf0Vt/41sczcQ/Zjs /TmVoIQVwOfGGkoR+E/qAOQhhBYY2QGp48HiXJq/bVU19EvTWdMLi0iANGpvZnPK GGfJ1olUMxeNqNU4DY+1KRAVmgGrGRGiYDabVTbHtEt7LoGr6V99c7ApfS7N864= =SJc3 -----END PGP SIGNATURE-----
participants (6)
-
Arnold Krille
-
Christopher Arndt
-
Hartmut Goebel
-
Josh Butz
-
Markus Zapke-Gründemann
-
Roland Kruggel