Ich habe ein genetisches Programmiersystem in Python erstellt, habe aber Probleme mit Speichergrenzen. Das Problem besteht darin, alle Personen in meiner Population im Speicher zu speichern. Momentan speichere ich alle Individuen im Speicher und reproduziere dann die Population der nächsten Generation, die dann im Speicher gespeichert wird. Das bedeutet, dass ich zwei Populationen im Wert von Individuen habe, die im Gedächtnis geladen sind. Nach einigen Tests habe ich festgestellt, dass ich die standardmäßige Anwendungsspeichergröße von 2 GB für Windows ziemlich schnell überschreite.Speichern von Objekten in einer Datei statt im Speicher
Derzeit schreibe ich die einzelnen Bäume der gesamten Bevölkerung in eine Datei, die ich dann laden und die Bevölkerung neu erstellen kann, wenn ich will. Was ich in Betracht gezogen habe, ist, anstatt alle Individuen in den Speicher geladen zu haben, auf individuelle Informationen zuzugreifen, indem ich die Person aus der Akte ziehe und nur diese einzelne Person instanziiere. Nach meinem Verständnis der Readline-Funktionalität von Python sollte nur eine einzige Zeile aus der Datei gleichzeitig geladen werden, und nicht die gesamte Datei. Wenn ich das täte, würde ich nur in der Lage sein, die Individuen zu speichern, die ich gerade manipuliere.
Meine Frage ist, gibt es ein Unterstreichungs-Problem mit dem, was ich gerade nicht sehe? Ich verstehe, dass, weil ich mit Daten auf der Festplatte statt im Speicher zu tun habe, meine Leistung einen Schlag bekommen wird, aber für diese Situation ist Speicher wichtiger als Geschwindigkeit. Ich möchte auch nicht die zugewiesenen 2 GB Speicher für Python-Programme erhöhen.
Danke!
Gibt es einen Grund, warum Sie nicht über eine Datenbank nachgedacht haben? –
Das Ziehen eines einzelnen Datensatzes aus der Datei bedeutet das Durchlesen der Datei, bis Sie den richtigen Datensatz gefunden haben. Ich empfehle dringend, zu einem Computer mit einer modernen 64-Bit-Umgebung und einer angemessenen Menge an Arbeitsspeicher zu wechseln. Wenn Sie Ihr Programm trotzdem optimieren möchten, geben Sie bitte [MCVE] (http://stackoverflow.com/help/mcve) an. Wenn es derzeit funktioniert, sollten Sie stattdessen nach Code Review fragen. – TigerhawkT3
@ IgnacioVazquez-Abrams Ich dachte darüber nach, aber nach jeder Generation werden mindestens 95% der Individuen in der Bevölkerung ersetzt. Es schien nicht so, als würde die Verwendung einer Datenbank die richtige Richtung sein, da Datensätze nur für eine sehr kurze Zeit bestehen bleiben. – Tory