Du bist nicht angemeldet.

Werbeanzeige

1

27.01.2017, 17:10

Beste Technik für viele parallele Agenten

Hallo zusammen,

Nachdem ich seit 4 Jahren viele kleine Spiele und Programme programmiert habe, wie man das so soll um die Grundlagen zu beherrschen, will ich jetzt endlich mal ein etwas größeres Projekt angehen, mit Planung, Design und allem was dazu gehört. In diesem Programmierspiel geht es darum, omnipotente Zellen so zu programmieren, dass sie durch Zellteilung und kontextsensitive Differenzierung schließlich kleine Organismen bilden. Bei einigen Tests mit Python, habe ich bemerkt, was ich von Anfang an hätte wissen können: Der Interpreter ist zu langsam um größere Mengen an Zellen gleichzeitig auszuführen. Meine Frage ist also: Welche Sprache ist hierfür sinnvoll? Gibt es spezielle Techniken oder Algorithmen um große Mengen an Agenten mit dem grundsätzlich selben Code auszuführen? Sind Objekte hier sinnvoll oder ist es signifikant schneller eine Funktion für alle auszuführen und die Variablen in Arrays zu speichern?

Hat jemand eine Idee, wie ich das möglichst effizient (aber trotzdem so high-level wie möglich) umsetzen kann?

danke

David Scherfgen

Administrator

Beiträge: 10 334

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

27.01.2017, 17:19

Willkommen im Forum!
Python ist nicht zwingend zu langsam. Wenn deine Berechnungen insbesondere numerischer Natur sind, hilft dir möglicherweise NumPy. Auch mehrere parallele Threads könntest du benutzen, um die Simulation zu beschleunigen. Ansonsten wirst du mit C/C++ schon mehr Performance rausholen können. Wenn das immer noch nicht reicht, könntest du die Simulation evtl. auf der Grafikkarte ausführen (OpenCL, CUDA). Ob das machbar bzw. sinnvoll ist, hängt aber vom konkreten Problem und den Abhängigkeiten zwischen den Agenten ab.

xardias

Community-Fossil

Beiträge: 2 771

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

3

27.01.2017, 17:47

Python selbst ist in der Ausfuehrung sehr langsam, aber es gibt viele Moeglichkeiten performant mit Python zu arbeiten.

NumPy ist ein guter Punkt. Es gibt auch alternative interpreter die schneller ausfuehren: http://pypy.org/ oder tools welche einzelne Funktionen vorkompilieren: http://numba.pydata.org/

Was man auch gerne vergisst ist, dass Python zwar multi-threading unterstuetzt, diese aber nur auf einem core laufen. Wenn du auf mehreren cores berechnen moechtest, musst du das multiprocessing modul verwenden.

David Scherfgen

Administrator

Beiträge: 10 334

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

27.01.2017, 17:50

Cool, die kannte ich auch beide noch nicht! :thumbup:

5

02.02.2017, 02:50

Nimm C, C++ oder Java.
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

Schorsch

Supermoderator

Beiträge: 5 206

Wohnort: Wickede

Beruf: Student

  • Private Nachricht senden

6

02.02.2017, 10:10

Nimm C, C++ oder Java.

Was ist das denn für eine dumme Antwort. Begründe doch wenigstens warum du meinst dass das weiter helfen würde.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Jaiel

Alter Hase

Beiträge: 1 164

Wohnort: Berlin

Beruf: Student Ang. Informatik

  • Private Nachricht senden

7

06.02.2017, 07:41

Nimm C, C++ oder Java.

Was ist das denn für eine dumme nichtssagende Antwort. Begründe doch wenigstens warum du meinst dass das weiter helfen würde.

Julién

Alter Hase

Beiträge: 723

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

8

07.02.2017, 01:36

Ich empfehle dir auch, dass du dich mich den Algorithmen befasst, die du benutzt.
Es gibt mehrere Algorithmen, die bspw. ein Array sortieren können; die erreichen das gleiche,
jedoch brauchen unterschiedlich viel Zeit.

Ein Algorithmus A kann schneller als Algorithmus B, während in einem anderen Kontext Algorithmus B tatsächlich schneller
als A ist.

Das ganze läuft in den Unis meist unter der Vorlesung "Algorithmen & Datenstrukturen"; dementsprechend
wirst du bestimmt mehrere Artikel und Bücher unter diesem Titel finden. Vor allem dürfte Laufzeitkomplexität
ein interessantes Thema sein.
Wenn du zum Beispiel EINEN der schnellsten Algorithmen für dein Problem findest, dann ist es durchaus möglich,
dass dein Code doch noch relativ flott läuft.


Letztendlich kann ich dir noch einen "Quickfix" anbieten. Es gibt verschiedene Interpreter für Python, welche
schneller als der "Standard"-Pythoninterpreter (CPython) sind. Schau dir "PyPy" an, es verwendet Just-In-Time-Compilierung und kann dadurch entsprechend
manche Berechnungen schneller ausführen.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Werbeanzeige