konstruktiver Kritik zu meinem Lösungsansatz

Canis_Lupus

Mitglied
Hallo zusammen

Ich bräuchte mal konstruktive Kritik zu meinem Lösungsansatz.
Die Aufgabe ist von mir frei, nach dem Motte programmieren lernt man wenn man es tut, gewählt. Und ich bin auch noch, wenn jemand eine gute Idee hat, für Änderungsvorschläge in der Anforderungsliste zu begeistern.

Abstrakt​

Entwickeln eines Sandkastens um Effekte wie Evolution, Informations- oder auch Infektionsausbreitung an einer „großen“ Anzahl an Entitäten simulieren zu können.

Anforderungen​

Entitäten sollen über eine Vielzahl an Attributen verfügen. Einige der Attribute sollen Konstanten sein, andere bei der Erstellung zufällig gewählt und einige während der Laufzeit gesetzt werden.

Symultionszenarien sollen flexibel für den Anwender konfigurierbar sein.
- Ein, zwei oder dreidimensionale Anordnung der Entitäten
- Aufbewahrung aller Teilschritte an- oder abwählbar
- Eingeschlechtliche, zweigeschlechtliche oder keine Fortpflanzung

Die Attribute der Entitäten sollen über Umgebungsparameter (Temperatur, Nährstoff, ...) beeinflusst werden.

Umgebungsparameter sollen von den Entitäten beeinflusst werden (z. B. Nährstoffe werden konsumiert und ihre Konzentration sinkt oder Viren werden abgegeben).

Umgebungsparameter können für die Koordinaten der Entitäten einzeln gesetzt werden.

Entitäten sollen sich abhängig von ihrem Abstand beeinflussen. (Wird ein Entitäten als attraktiv empfunden erhöht sich seine Stimmung, Selbstvertrauen oder ähnliches)

Entitäten sollen sich abhängig von Attributwerten kopieren. Hierbei können auch kleine Veränderungen auftreten. (Eingeschlechtliche Fortpflanzung mit oder ohne Mutation)

Auf der Basis von zwei Entitäten wird eine Dritte erzeugt. (Zweigeschlechtliche Fortpflanzung)

Zu den Iterationen sollen statistische Informationen (z. B. Vorkommen der Mutationen) gesammelt werden.

Lösungsansatz (geplant)​

Entitäten werden als Objekte eines 4 Dimensionalen Array (X, Y, Z und Zeitindex) gespeichert. Da die Anzahl der Entitäten bei 4 Dimensionen schnell sehr groß wird und Arbeitsspeicher begrenzt ist, sollen die Dimensionen einzeln gesetzt werden. So kann zugunsten der Anzahl der Entitäten die Z Achse auf 1 und wenn keine Speicherung der einzelnen Veränderungen gewünscht ist die Zeitinex ebenfalls auf 1 (oder 0) gesetzt werden.
 

Oneixee5

Top Contributor
Den Ansatz mit den Arrays finde ich nicht gut. In Java kann man sich flexible Objektmodelle schaffen und alles sauber implementieren. Den Array-Code kann ich mir schon lebhaft vorstellen. Ich würde mir das so nicht antun.
 

Canis_Lupus

Mitglied
Den Ansatz mit den Arrays finde ich nicht gut. In Java kann man sich flexible Objektmodelle schaffen und alles sauber implementieren. Den Array-Code kann ich mir schon lebhaft vorstellen. Ich würde mir das so nicht antun.
Hi Oneixee5
Dein Hinweis auf „flexible Objektmodelle“ hilft mir jetzt nicht so richtig weiter. Würde mich freuen, wenn du konkreter wirst.
VG Lupus
 

temi

Top Contributor
Mein Tipp wäre klein zu starten und die Lösung Stück für Stück zu erweitern. Fang also mit einem sehr einfachen System an, welches nur die unbedingt benötigten Grundfunktionen erfüllt. Die Gefahr sich zu verzetteln ist sehr groß, wenn man gleich alles auf einmal machen möchte.

Zu dem vom @Oneixee5 erwähnten: Du könntest z. B. die Entitäten in einer Liste speichern. Dann ist die Liste nur so groß, wie es auch tatsächliche Entitäten gibt. Natürlich benötigt dann jede Entität eine Information darüber, an welcher Stelle "in der Welt" sie sich befindet (Koordinaten, Zeit, ...). Möglicherweise wären auch eine Datenbank oder ein ECS (Entity Component System) ein guter Ansatz.
 
Zuletzt bearbeitet:

White_Fox

Top Contributor
Klein anfangen...das würde ich dir auch raten.
Richtig große Brocken frühstückt man häppchenweise ab, wer alles auf einmal runterwürgen will verschluckt sich nur.


Dein Hinweis auf „flexible Objektmodelle“ hilft mir jetzt nicht so richtig weiter. Würde mich freuen, wenn du konkreter wirst.
temi hat ja schon zur Liste geraten, schau dir z.B. mal ArrayList an. HashSet, Map und HashMap sind auch sehenswert.

Und dann überleg dir solche Standardprobleme wie z.B. daß du ein Array mit der Größe n hast und nun doch n+1 Objekte darin ablegen willst. Und schau wie man das mit ArrayList macht.
 

Canis_Lupus

Mitglied
Hallo @temi

An die Realisierung mittels Liste habe ich auch schon gedacht. Bei einer Liste müsste ich bei jeder Iteration nur die angelegten Entitäten aktulisieren, das wäre ein großer Vorteil. Bei der Arraylösung müsste ich „alle“ (ein paar Optimierungen fallen mir da schon ein) Koordinaten abfragen. Ein erster Test ergab eine maximale Anzahl von ca. 500 Mio Entitäten.

Dagegen spricht, dass sehr viele Methoden die Nachbarentitäten, abhängig von Ihrem Abstand, mitberücksichtigen müssen. Bei einem Array ist das Auffinden der Nachbarn 1ten, 2ten und 3ten Grades relativ leicht. Bei einer Liste befürchte ich, müsste ich für jede Entität, die gesamte Liste duchlaufen um die Nachbarn zu finden. Aber hier fehlt es mir an Erfahrung und vielleicht gibt es eine Lösung die ich übersehe?

Zu deinem Tipp zur Lösungsstrategie. Ich sehe in der Komplexität dieser Aufgabe kein Problem.


Hy @White_Fox genau auch wegen solcher Tipps habe ich mich an euch gewandt. Werde mir deine Vorschläge anschaue. Danke.
 

temi

Top Contributor
Ein erster Test ergab eine maximale Anzahl von ca. 500 Mio Entitäten.
Versuch mal grob abzuschätzen, wie groß der Speicherbedarf dafür ist und ob du das in-memory abbilden kannst.

Ich sehe in der Komplexität dieser Aufgabe kein Problem.
Der Tipp gilt allerdings auch in diesem Fall weiterhin und nennt sich Teile-und-herrsche-Verfahren.

Im speziellen Fall geht es zunächst auch in Richtung Proof-of-concept. Versuche die Anforderung mit einer übersichtlichen Simulation (ohne flexible Parameter und sonstigen Kram) umzusetzen, um zu testen, ob der gewählte Ansatz überhaupt sinnvoll funktioniert.
 
Zuletzt bearbeitet:

Canis_Lupus

Mitglied
Hi @White_Fox
Ich habe mir mal ArrayList, HashSet, Map und HashMap angeschaut. Duchaus interessant.
HashSet und HashMap scheiden bei dieser Aufgabe beim gegenwärtigem Konzept aus. Zwar wird es immer Entitäten geben, die gleich sind. Aber aufgrund unteschiedlicher Nachbaschafts- und Umgebungseinflüsse ändert sich das bei jedem Duchgang. Mir scheint und da nehme ich Ratschläge natürlich gerne an, ein größerer Aufwand zu sein die Ojekte zu verwalten als es Vorteile bei dem Einsparen von Speicherplatz gibt.

Über ArrayList habe ich am meisten gelesen. Und da muss ich noch ein wenig rumexperimentieren und die für diese Aufgabe notwendigen Aktionen auf die Entitäten durchdenken. Aber die könnten eine Verbesserung sein. Dazu werde ich mich wenn ich was Entscheide hier nochmal melden.

@temi
Ich habe mit der Anzahl nochmal ein wenig rumgespielt. Wenn ich das Array auf beispielsweise 300/300/3/200 anlege in dem Konstruktor 20 Variablen Werte zuweise erhöht sich die Speichernutzung um ca. 4 GB. Leider sind das jetzt aber nicht mehr 500 Mio sondern nurnoch 50 Mio Entitäten.

Irritierend finde ich, dass mir hier ständig erklärt wird wie ich die Aufgabe angehen soll. Das ist nett gemeit, aber damit tragt Ihr Eulen nach Athen.

@All
Ich bedanke mich erstmal für eure Hinweise. Gerade der mit der ArrayList könnte Anwendung finden. Ich melde mich wieder wenn ich ein Stückchen weiter bin.

VG Lupus
 

White_Fox

Top Contributor
@Canis_Lupus Dir ist hier halt schwer zu helfen, weil du sehr vage und abstrakt bleibst. Aber dazu später noch mehr.

HashSet und HashMap scheiden bei dieser Aufgabe beim gegenwärtigem Konzept aus. Zwar wird es immer Entitäten geben, die gleich sind. Aber aufgrund unteschiedlicher Nachbaschafts- und Umgebungseinflüsse ändert sich das bei jedem Duchgang.
Vielleicht wäre auch SortedMap eine Idee? Und deine Entitäten dann nach Entfernung voneinander sortieren lassen?

Irritierend finde ich, dass mir hier ständig erklärt wird wie ich die Aufgabe angehen soll. Das ist nett gemeit, aber damit tragt Ihr Eulen nach Athen.
Wie gesagt, du bleibst viel zu vage, alsdaß man dir gezielter helfen könnte. Das ist ok...es ist deine Angelegenheit, was du preisgeben willst.

Aber immerhin bist du hier der, der Fragen hat und du hast Antworten von Leuten bekommen, die bereits viel Erfahrung (einschließlich Erfahrung aus eigenen Fehlern) haben. Und die Erfahrung lehrt, daß überbordende Komplexität normalerweise (normal heißt 'eigentlich immer', außer du bist so ein inselbegabtes Spezialgenie daß eigentlich keinen Computer braucht und im Kopf schneller wäre, was allerdings unwahrscheinlich ist) auf schlechtem Design beruht. Und normalerweise würde niemand mit Erfahrung gleich 500Mio Objekte verwalten wollen. Sondern man würde sich ein ausgefeiltes Konzept überlegen und das erstmal mit der kleinstmöglichen Anzahl an Objekten testen und später, wenn es funktioniert, an 500Mio Objekten anwenden.
 

Canis_Lupus

Mitglied
Off Topic

@temi
Wie man sich irren kann. Ich dachte ich hätte deutlich gemacht, dass es mir um eine Überprüfung des Konzepts und nicht um Tipps über die Durchführung meiner Arbeit geht. Ich hoffe, dass dies nun geklärt ist.


@White_Fox

Schließe das Unwahrscheinliche nicht aus. Es ist nur unwahrscheinlich! ;-)

Wenn ich dir zu vage und abstrakt bin, dann stell doch Fragen. Woher soll wissen, welche Informationen dir fehlen?

Wenn für dich die Aufgabe eine „überbordende Komplexität“ hat. Ok. Für mich aber ist sie nicht außergewöhnlich komplex. Das liegt nicht daran, dass ich ein wie du schreibt „inselbegabtes Spezialgenie“ bin, sondern weil ich vor 40 Jahren schon meine ersten hundert Seiten Code geschrieben und mein erstes Programm verkauft habe.

Auch an diese Aufgabe gehe ich überlegt ran. Nach einer Vorarbeit lasse ich Fachleute mit mehr Erfahrung in OOP und Java über das Konzept drüber sehen und frage Sie um Rat. Dafür bin ich hier! Bevor ich dann starte überprüfe ich noch ob die Aufgabe realisierbar ist (nennt sich Machbarkeitsstudie). Deshalb unter Anderem die Abschätzung mit wie vielen Objekten ich arbeiten kann. Dein Versuch sich über meine Herangehensweise lustig zu machen ist hier völlig fehl am Platz und es ist unwahrscheinlich, dass du es selbst nicht besser weißt.

Ups – da ist es wieder - dieses unwahrscheinlich. ;-)
 

White_Fox

Top Contributor
Nun, dich beleidigen oder mich über dich lustig machen wollte ich nicht. Sorry wenn es so ankam. Nimm es mir nicht übel, aber ich glaube nicht daß du so ein Übergenie bist (und halte das auch nicht für erstrebenswert, im Regelfall haben diese Leute andere Probleme und Defizite die sie mit ihrer Genialität kaum aufwiegen können).

Wenn ich dir zu vage und abstrakt bin, dann stell doch Fragen.
Manchmal tue ich das. Aber oft habe ich auch keine Lust, nach jeder Scheibe einzeln zu fragen, ich will die Salami bitte am Stück.

Das einzige, was bisher rauskam, war, daß du eine große Menge an Objekten produzieren willst, jedes irgendeine Form von Position hat und dich die Entfernungen interessieren. Und das kann alles Mögliche sein: Simulation von Himmelskörpern, FEM-Analyse von mechanischen Teilen, EM-Felderberechnung, Verkehrssimulationen, und noch viel mehr.
Als Konzept würde ich das noch lange nicht bezeichnen.

Wenn für dich die Aufgabe eine „überbordende Komplexität“ hat. Ok. Für mich aber ist sie nicht außergewöhnlich komplex.
Dann mache doch einfach mal einen Test mit 500Mio deiner Entitäten und bemerke, daß der Test mit anderem Ergebnis ausgeht als du erwartet hast. Und dann viel Spaß beim herumsuchen zwischen deinen 500Mio Entitäten. Da ist es doch deutlich einfacher, mit z.B. fünft Entitäten zu testen und seine Fehler und Probleme gleich nachvollziehen zu können, oder nicht?
Und warum sollte ein Test mit z.B. fünf Entitäten andere Ergebnisse liefern? Es gibt Fälle wo das so ist, wenn viel Zufall und Wahrscheinlichkeit dabei ist, aber dann sind 500Mio sicher wieder zu wenig.

Auch an diese Aufgabe gehe ich überlegt ran. Nach einer Vorarbeit lasse ich Fachleute mit mehr Erfahrung in OOP und Java über das Konzept drüber sehen und frage Sie um Rat.
Nun, ich bin kein Informatiker und programmiere meist nur in meiner Freizeit. Trotzdem würde ich mir erstmal Papier und Bleistift nehmen, einen Plan überlegen und diesen dann – sofern ich es für notwendig halte – anderen vorlegen und sie um ihre Meinung bitten. Da ist noch kein bisschen Quellcode nötig.
Sich sein Konzept zu überlegen während man bereits Quellcode schreibt ist normalerweise ein ziemlich sicheres Rezept, entweder Schrott zu produzieren oder es nichtmal fertigzustellen. Zum Optimum kommt man so jedenfalls nicht. Und von jemandem der sagt, daß er 40 Jahre Programmiererfahrung hat, würde ich erwarten daß er das weiß.

Vielleicht fängst du noch mal von vorne an und beschreibst, was genau du machen willst. Nicht, wie du es machen willst.
 
M

Mart

Gast
Dein Versuch sich über meine Herangehensweise lustig zu machen ist hier völlig fehl am Platz
wen nman eine ander Lösung vorschlägt sagt man implizit nur aus dass
1. man die andere Lösung nicht so nicer dicer findet ( das ist was du primär wolltest )
2. dass man eine Idee hat um die Lösung doch nicer dicer zu machen ( auch was du wolltest )
3. dass man dann auch die idee in hardcode darstellt ( in dem fall vorschlag von sorted map ) und bringt, obwohl du das in den falschen hals kriegst

es ist hie rjedem shceiß egal wie du es schlussendlich umsetzt, das ist dein bier

du kannst ja auch jeden vorschlag konstruktiv ignorieren nur dann war der post halt für dich in dem fall für den arsch
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn für dich die Aufgabe eine „überbordende Komplexität“ hat. Ok. Für mich aber ist sie nicht außergewöhnlich komplex.
Der Eindruck der "überbordenden Komplexität" kommt hauptsächlich aus der Kombination von nahezu keiner Erfahrung mit Java und allgemein OOP und einer Fragestellung, die ziemlich viel Grundwissen in den verschiedenste Bereichen braucht, um sie sinnvoll umsetzen zu können.
Nahezu jeder hier dürfte die Probleme kennen, die durch sowas auftreten, deshalb wird dir auch jeder hier empfehlen, erstmal etwas einfacheres umzusetzen.


Es ist auch relativ schwierig, dein Konzept jetzt irgendwie zu beurteilen. Deine Anforderungen sind so riesig, und deine Lösungsansatz ist ein so minimaler Teil davon, dass man kaum mehr sagen kann als "das ist eher nicht die beste Lösung". Um das mal ganz dumm zu vergleichen: deine Anforderung ist sind Bau und Ausstattung einer Luxuxvilla, und dein Lösungsansatz ist Laminatboden für den Poolbereich.

Das ist auch überhaupt nicht böse gemeint oder so, jeder war mal an dem Punkt, dass er super Ideen hatte, und versucht hat diese umzusetzen, aber mangels Erfahrung alle wesentlichen Dinge übersehen hat und zu einer völlig unpassende Lösung gekommen ist – sowas ist am Ende nur frustrierend, was noch ein Grund mehr ist, warum hier alle zu einfacheren Projekten raten.
 

temi

Top Contributor
Ich wollte eigentlich nichts mehr schreiben, weil meine bisherigen Beiträge offenbar nicht hilfreich, sondern störend gewesen sind.
was noch ein Grund mehr ist, warum hier alle zu einfacheren Projekten raten.
Ich wollte gar nicht mal sagen, dass er ein "einfacheres Projekt" suchen soll. Das Ziel mit den aufgeführten Anforderungen soll man gerne im Blick behalten. Allerdings sind gerade so Sachen wie flexible Konfigurierbarkeit und Eigenschaften von Entitäten und der darauf angewandten Simulationen nicht ganz ohne und erhöhen definitiv die Komplexität. Auch die Simulation von 500 Mio. Entitäten oder von mir aus sogar noch mehr, würde ich nicht ausschließen. Es erfordert eben mehr Überlegung und ein gutes Konzept (was ja irgendwie auch der Sinn der Übung ist), denn im Arbeitsspeicher wird das nicht mehr gehen. Und dafür ist ein PoC (oder von mir aus auch Machbarkeitsstudie) sehr sinnvoll. Und die Arbeit würde ich erst mal mit minimalen Anforderungen vornehmen, um hier nicht unnötig Zeit zu verschwenden, falls es nicht funktionieren sollte. Aber jetzt erzähl ich schon wieder, wie er es machen soll und da reagiert er ja ziemlich aggro drauf ;)

Ich würde in Richtung DB und vielleicht zu Konzepten eines ECS tendieren, um einen PoC zu starten.

Melde dich halt, wenn du schon weiter bist, dann hat man vermutlich auch mehr Grundlagen zur Diskussion.
 
Zuletzt bearbeitet:

Canis_Lupus

Mitglied
Hi @Mart
Für den Vorschlag anderer Lösungen bin ich hier. Von dem was mir vorgeschlagen wurde scheinen mir die ArrayList Vorteile zu haben. Und ich gehe im Moment davon aus, dass ich mein Konzept dahin umstellen werden. Lese mich gerade noch ein wenig in die ArrayLists rein und muss den Umgang damit noch ein wenig testen. Aber sieht gut aus. Habe mich weiter oben auch ausdrücklich dafür bedankt.

Die anderen Vorschläge habe ich angelesen und konnte für meine Aufgabe keine Vorteile erkennen und habe sogar erklärt wo ich für die Aufgabe eher Nachteile sehe. Oder anders formuliert – ich habe die Vorschläge die mir hier gemacht wurden sehr respektiert und habe mich drüber gefeut. Nix mit falscher Hals oder so.

Nerven tun nur die Vorschläge, dass ich ganz klein an die Aufgabe heranngehen soll. Das weiß ich selber. Ich kenne das Zerlegen von großen Aufgaben in Kleine, das Testen, Top-Down, Bottom-Up, Proof of Concept und vieles mehr aus Theorie und Praxis. Wenn dann zweimal nachdem ich den Leuten höflich sage dass ich da keine Untertützung benötige immer noch allgemeine Platitüden als wichtige Vorschläge kommen nervt das ein weinig.


Hi @mrBrown
Auch du bist besorgt, dass das Projekt für mich zu groß ist. Aber reicht es nicht wenn ich einmal sage ich weiß schon wie ich an sowas ranzugehen habe. Wenn ich dann so richtig voll auf die Schnauze falle, ist das doch mein Problem.

Ja, du hast Recht. Die Anforderungen sind schon riesig. Und ich habe nur eine Seite darüber geschrieben. Hätte ich alles geschrieben was ich an Vorüberlegungen habe wären es 20 geworden.

Ich halte die Verwaltung der Objekte (bei mir konkret Entitäten) für die kardinale Entscheidung für die Aufgabe. Deshalb hier estmal nur dafür eine Reflexion duch Fachleute. Wenn für diese wegweisende Entscheidung Informationen fehlen ergänze ich doch gerne. Aber es gab keine Fragen.

Du siehst die Gefahr, das man bei so einer Aufgabe zu einer völlig unpassenden Lösung kommt. Natürlich – kann passieren. Um das zu verhindern bin ich hier. Aber anstelle das über das Konzept der Software diskutier wird. Muss ich hier ständig erklären warum ich beim Entwicklungsprozess keine Untertützung brauche.


Hi @temi
Erstmal vorweck deine Beiträge waren hilfreich. Vielleicht hätte ich erwähnen sollen, dass ich deinen Datenbanvorschlag nicht berückksichtige, da ich mich mit Datenbanken recht gut auskenne und ich bei Java weiter kommen will.
Deine Nahfrage nach den 500 Mio Objekten hat dazu geführt, dass ich neu getestet habe und so nur noch auf ca. 50.Mio Objekte gekommen bin. Das Ergebnis inklusive Rahmenbedingungen habe ich dir geschrieben. War eine gute Anregung das zu machen.

Was du in deinem Beitrag heute um 17:25 Uhr über die Rangehensweise schreibst ist alles richtig. Nur das weiß ich selber. Bevor ich viel code mache ich mir die Überlgeung für ein Konzept. Ich diskutier das Konzept mir Leuten die sich auskennen. Ich mache einen erste vetikalen Prototypen (50 Mio Objekte) und teste. Ich realisiere Teilaufgaben und schaue ob ich es hinbekomme. Das werden noch einige werden bevor ich dann anfange diese Teillösungen in ein rudementäres lauffähiges Genzes zu vereinigen und es dann Stück für Stück weiter entwickel. Nennt sich Bootom-up die Methode. Und das mache ich nicht zum ersten Mal so. Ich hoffe du kannst respektieren, dass ich da momentan keine Hilfe benötige. Ich habe in diesem Thread jetzt über eine Seite darüber geschrieben, warum ich an einer Stelle keine Hilfe benötige. Vielleicht bin ich deshalb ein wenig aggro rüber gekommen.


@All
Ich bedanke mich dafür, dass Ihr mir den Tipp mit den ArrayList gegeben habt. Es sieht so aus, das ich mein Konzept dahingehend ändern werde. Für mich ist damit erstmal geklärt, was ich klären wollte. Wenn noch jemand weitere gute Ideen hat da freue ich mich drüber. Wenn Informationen dazu fehlen fragt.

Bitte respektiert, dass ich mich wie ich an die Aufgabe rangehe ein wenig auskenne.

VG Lupus




P. S.
@White_Fox
Da du nicht liest was ich schreibe oder nicht Willens oder in der Lage bist es zu vertehen, haben deine Kommentare keinen Wert für mich.
Gehe in Zukunft nicht davon aus, dass ich deine Beträge lese.
 

mrBrown

Super-Moderator
Mitarbeiter
Von dem was mir vorgeschlagen wurde scheinen mir die ArrayList Vorteile zu haben. Und ich gehe im Moment davon aus, dass ich mein Konzept dahin umstellen werden. Lese mich gerade noch ein wenig in die ArrayLists rein und muss den Umgang damit noch ein wenig testen. Aber sieht gut aus. Habe mich weiter oben auch ausdrücklich dafür bedankt.
ArrayList ist dafür ziemlich sicher völliger Unsinn.




Ich halte die Verwaltung der Objekte (bei mir konkret Entitäten) für die kardinale Entscheidung für die Aufgabe. Deshalb hier estmal nur dafür eine Reflexion duch Fachleute.
Die konkrete Implementierung ist eher einer der uninteressantesten Schritte. Grad wenn das eine Entscheidung auf der Ebene der passenden Datenstruktur ist, in dem Kontext hier und bei den bisher genannten Datenstrukturen ist das kaum mehr als "premature Optimization".

Wenn du wirklich, und das klang bisher so, irgendein großes Objekt willst, in dem alle Entitäten gespeichert und sinnvoll abgefragt werden können, nutzt man einfach ein passendes Interface dafür und dahinter kann dann jede mögliche Implementierung liegen, dann kann man auch direkt verschiedene Möglichkeiten miteinander vergleichen.


Wenn für diese wegweisende Entscheidung Informationen fehlen ergänze ich doch gerne. Aber es gab keine Fragen.
Für den Anfang:
Diskretes oder stetiges Koordinatensystem?
Wie dicht sind Entitäten innerhalb des Koordinatensystems vorhanden?
Wie bildest du Umweltbedingungen ab?
Welche Relevant für den aktuellen Zustand haben die alten, gespeicherten Zustände?
Was bedeutet, auch in Abhängigkeit der ersten Frage, "Nachbarschaft"?
Sind alle Objekte nur ein "Punkt" oder haben sie eine Größe?


Bitte respektiert, dass ich mich wie ich an die Aufgabe rangehe ein wenig auskenne.
Da deine Frage einen völlig irrelevanten Aspekt betrifft, und gleichzeitig alle dafür relevanten Informationen weggelassen wurde, war das bisher einfach nicht so klar ;)
 

Canis_Lupus

Mitglied
Hi @mrBrown
Nur kurz da spät.

Super Anstöße.
Mir fällt auf ich habe den Grundsatz der Trennung von Daten und Logic nicht berücksichtigt. Alleine schon dafür ist dein Beitrag Gold wert. Danke!
Mehr morgen.

VG Lupus
 
M

Mart

Gast
es gibt auch noch poolen dh du benutzt objekte wieder die du eig eh schon irgendwann hattest , dazu gibts in unity was das kannst du aber auch in java machen


im prinzip gehts darum dass du eine unendliche kette an erzeugung von objekten hast, und irgendwann der garbage collector objekte löscht obwohl es besser wäre die alten wieder zu verwenden zb wenn du einen kreis hast mit 10 attributen aber es ändert sich nur zb die x und y position dann ist es "besser" die x und y position zu ändern als ein neues Objekt zu erzeugen


bei deinem ding kannst du es auch hernehmen falls es simulationen in größeren umfang werden

PS wenn es ein array mit 10 auf 10 ist dann ist drauf geschissen ob du pooling machst oder nicht
in unity wird das benutzt wenn du pro frame 10 kugeln erstellst die runter fallen da kann man es gebrauchen
 

temi

Top Contributor
Da deine Frage einen völlig irrelevanten Aspekt betrifft, und gleichzeitig alle dafür relevanten Informationen weggelassen wurde, war das bisher einfach nicht so klar ;)
Kann ich für mich bestätigen. Es klang im Ausgangsbeitrag nach einem Einsteiger, der ein gepimptes "game of life" schreiben möchte ohne große Ahnung zu haben.

Gut jetzt ist das ja geklärt. Du bist ein mehr oder weniger erfahrener Programmierer (egal, ob Hobby oder Beruf), der jetzt Erfahrungen mit Java sammeln möchte.

Deine Nahfrage nach den 500 Mio Objekten hat dazu geführt, dass ich neu getestet habe und so nur noch auf ca. 50.Mio Objekte gekommen bin.
Das finde ich jetzt fast schade, dass du die Anforderungen hier zurück genommen hast. Natürlich musst du schauen, ob es komplett in-memory lösbar ist oder nicht. Aber ein ausgefuchstes Konzept für eine (fast) beliebig große Anzahl von Entitäten hätte schon einen gewissen Reiz.

Vielleicht noch ergänzend:

Hat die Welt Grenzen (also einen Rand) und was gilt am Rand (Ist die Welt flach, so dass es am Rand keinen Nachbarn mehr gibt oder z. B. eine Kugel, wo der eine Rand der Nachbar des anderen Randes ist)?
Gelten die "Umweltbedingungen" für die gesamte Welt, oder gibt es Regionen mit unterschiedlichen Bedingungen (Biomes)?
Gibt es "Feinde", also mehrere unterschiedliche Arten von Entitäten in einer Welt?
In dem Zusammenhang: Kann eine "Position" von mehreren Entitäten belegt sein (z. B. Mensch und Virus)?
(Hat was von Minecraft: Crafte Mensch und Virus und du erhältst eine Virenquelle ;))

Sollen alle diese Dinge "fest" implementiert sein (natürlich irgendwie parametrierbar) oder völlig flexibel, so das auch nachträglich (ohne Änderung des bisherigen Codes) neue Merkmale (z. B. indem man einer Entität neue oder geänderte Regeln injiziert) integriert werden können?
 
Zuletzt bearbeitet:

Canis_Lupus

Mitglied
@mrBrown
Manchmal bedarf es nur einem kleinen Anstoß um einem die Augen zu öffnen. Deine Hinweis, dass die Daten nicht die kardinale Komponente sind war für mich so ein Anstoß der eine über zweijährige Perspektive auf die Aufgabe zerstört hat. Auf die Trennung Daten, Logik und Userinterface hätte ich allen kommen müssen.

Zu deinen Fragen:
Das Programm soll ein Modell für Evolutionsprozesse sein. Dabei soll es Evolution von Entitäten und auch die Ausbreitung von Viren abdecken. Mit der gestrigen Sichtweise auf die Daten gehörte beides zusammen. Ich hoffe, dass ich diese beiden Aufgaben nicht in zwei getrennten Modellen abbilden muss.

Kooedinatensystem diskret oder stetig? Ich gehe davon aus, dass das Modell ausreichend genau ist wenn es mit einem dikreten Kooedinatensystem arbeitet. (Ich bin für andere Meinungen offen.)

In meiner diskreten Vorstellung würde ich jeder Koordinate die Möglichkeit einer Entität und Raumeigenschaften (Umweltbedingung) zuordnen. Alle Koordinaten können besetzt werden. Durch die Begrenzung der Lebenszeit und duch ihren Zustand (Hunger, ungünstige Temperatur, etc. ) können Entitäten aber absterben und so Platz für neue Generationen schaffen.

Die Umweltbedingungen habe ich vor den Koordinaten zuzuordnen.

Bei jeder Iteration sollen sich der Neue aus dem aktuellen Zustand ableiten. Es sollen dabei die Paramert der Entität, die Parameter der Nachbarentitäten (dirkte Nachbarn, Nachbarn 2 und 3 Grad mit abnehmendem Faktor) und die Umweltbedingungen eine Rolle spielen. Die Option der Speicherung der alten Zustände wäre sehr interessant um nicht nur vor sondern auch wieder in der Entwicklung (Zeit) zurücklaufen zu können.

Ich gehe davon aus, dass die Modellvorstellung einer Punktgröße ausreichend genau ist.

Insgesamt hoffe ich, dass ich mit diesem Modell (Modelle sind Vereinfachungen der Realität) genau genug bin um Evolutionsprozesse abbilden zu können. Ich bin aber auch hier für Anregungen offen. Wenn die Modellparameter genaur stehen, werde ich mir noch Input von jemandem aus der Biologiedomäne holen um das Modell gegenprüfen zu lassen.


Und nochmal danke, dass du meine datenzentrierte Sichtweise pulverisiert hast.


@Mart
Ich hatte bisher an eine feste Anzahl an Entitäten gedacht. Wenn davon eine Stirbt wollte ich kein neues Objet anlegen sondern das Alte mit neuen Parametern überschreiben. Da jetzt mein datenzentrierter Ansatz duch die Hinweise von mrBrown neu überdacht werden muss, hänge ich da gerade aber völlig frei und weiß gerade nicht wie ich die organisieren werde.


@temi
Die Einordnung „… mehr oder weniger erfahrener Programmierer ...“ gefällt mir gut. Hat ja auch seinen Grund, warum ich dies im Einsteiger Bereich veröffentlich habe. Und es freut mich, dass wir das Andere klären konnten!

Die 50 Mio. Objete resultieren von meinem in Memory Test. Wenn ich wie mrBrown vorgeschlagen hat Daten und Logik trenne, kann da durchaus eine skaliebare Lösung bei rauskommen. Und auch dein Vorschlag für die Daten eine DB einzusetzen ist wieder eine Option. Ich muss aber jetzt einiges neu überdenken da mein Konzept gerade mal über den Haufen geworfen wurde. ;-)

Ich geghe bei meinem Modell von einem festen Rand aus. Ist die räumliche Grenze erreicht, soll sich das als ein Malus in den Umweltbedingungen widerspiegeln.

Die Umweltbedingungen können an jedem Punkt unterschiedlich sein. Sie leiten sich aus einer Gundeinstellung ab. Werden dann aber duch die Nachbarn (auch höheren Grades 2-3) verändert. Beispielweise Entitäten benötigen Nahrung so nimmt das Nahrungsangebot (Umweltbedingung) ab, wird aber über die Iterationen wieder aufgefüllt.

Bereiche mit unterschiedlichen Grundeinstellungen zu konfigurieren – vielleicht später mal.

Feinde habe ich bisher in keiner Weise eingeplant.

Ich möchte erstmal mir wenigen Merkmalen starten. Dabei aber Lösungen für die gegenseitige Beeinflussung der Entitäten und der Umgebung drin haben. Bis das funktioniert ist es noch ein weiter Weg. Wenn der Stand dann erreicht ist, wird es möglich sein weiter Merkmal hinzuzufügen.
 

Canis_Lupus

Mitglied
Neuer Vorschlag für einen Lösungsansatz

Auf die Daten kann über Ihre diskreten Kooedinaten zugegriffen werden.

Um Operationen auf die Entitäten und Umweltbedingungen auszuführen wird ein Ausschnitt (Fenster) der Daten in ein Array (kann auch ArrayList oder so werden) geladen (Parameter werden den Objekten zugewiesen). Das Ergebniss wird dann referenziert über die Kooedinaten zum Datenspeicher geschickt. Das nächste Fenster wird, Überlappungen berücksichtigend, geladen. ...


Was haltet Ihr von dem Ansatz?
 

mrBrown

Super-Moderator
Mitarbeiter
Manchmal bedarf es nur einem kleinen Anstoß um einem die Augen zu öffnen. Deine Hinweis, dass die Daten nicht die kardinale Komponente sind war für mich so ein Anstoß der eine über zweijährige Perspektive auf die Aufgabe zerstört hat. Auf die Trennung Daten, Logik und Userinterface hätte ich allen kommen müssen.
Wo in meinem Text siehst du diesen Hinweis?

Ich hab nicht viel mehr gemacht, als die von die vorgeschlagene Lösung zu beschreiben...der Weg von "Array" zu "Array + Methoden für schönen Zugriff" zu "sinnvolles Interface um das Array" zu "sinnvolles Interface für den Zugriff, ob es ein Array ist, ist völlig egal" ist doch ziemlich offensichtlich.


Zu deinen Fragen:
[...]
Also im wesentlichen ein aufgebohrtes Game of Life? Das wäre dann ein sinnvolles Projekt, mit dem man dein Konzept schnell testen kann. Die meisten Probleme, die dabei so auftreten können, fallen dann direkt dabei schon auf. Und ja, wenn deine zweijährige Perspektive hier grad zerstört wurde, solltest du das schleunigst mal als Test programmieren ;)

Bei jeder Iteration sollen sich der Neue aus dem aktuellen Zustand ableiten. Es sollen dabei die Paramert der Entität, die Parameter der Nachbarentitäten (dirkte Nachbarn, Nachbarn 2 und 3 Grad mit abnehmendem Faktor) und die Umweltbedingungen eine Rolle spielen. Die Option der Speicherung der alten Zustände wäre sehr interessant um nicht nur vor sondern auch wieder in der Entwicklung (Zeit) zurücklaufen zu können.
Da hast du die Frage schon passend verstanden und gleich die Antwort geliefert, auf die ich hinaus wollte: relevant ist nur der aktuelle Zustand (aus dem sich dann der nächste ergibt), alle anderen sind für die Simulation selbst uninteressant, aber sinnvoll zu speichern. Deine Modellierung reduziert sich also schon mal auf nur 3 Dimensionen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Z Zahl Pi probabilistisch berechnen (Kritik/Verbesserungsvorschläge) Java Basics - Anfänger-Themen 4
P Viereck mit Sterne - Anfänger bittet um Kritik und Anregung Java Basics - Anfänger-Themen 11
J Vererbung Anfänger Programm bitte um Kritik&Anregungen Java Basics - Anfänger-Themen 21
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
P Wie kann ich beispielsweise Speicherstände eines Spiels DAUERHAFT in meinem Programm speichern? Java Basics - Anfänger-Themen 3
D Anfängerfrage zu meinem Programm. Java Basics - Anfänger-Themen 15
httprt Probleme bei dem erstellen von leveln in meinem Spiel Java Basics - Anfänger-Themen 2
J Frage zu meinem Code (OOP) Java Basics - Anfänger-Themen 4
NadimArazi Wie kann ich eine collision detection für die Paddles in meinem Pong Programm hinzufügen? Java Basics - Anfänger-Themen 4
A wie kann ich es in meinem Programm rein tun Java Basics - Anfänger-Themen 8
E extern Datei von meinem Computer aufmachen Java Basics - Anfänger-Themen 5
J Erste Schritte Was mache ich in meinem Code falsch. Java Basics - Anfänger-Themen 3
W Wo ist der Wurm in meinem Grundverständnis von Klassen? Java Basics - Anfänger-Themen 22
K Wie kontrolliere ich ob ich die Zahl in meinem Array schon hab? Java Basics - Anfänger-Themen 9
B Grundsatzfragen zu meinem neuen Projekt Einnahmen-Ausgaben App Java Basics - Anfänger-Themen 8
K Error bei meinem Programm - Hilfe Java Basics - Anfänger-Themen 8
R Was muss ich an meinem Code ändern? Java Basics - Anfänger-Themen 2
S Hilfe bei meinem Code [Schleife]? Java Basics - Anfänger-Themen 5
M Problem mit meinem Programm Java Basics - Anfänger-Themen 6
W Dezimalzahl in Binär umwandeln - Was sollte ich an meinem Programm verbessern? Java Basics - Anfänger-Themen 5
W Wie ziehe ich positive ungerade Zahlen von meinem Hauptwert ab? Java Basics - Anfänger-Themen 17
V Operatoren Was will mir die Tabelle in meinem Lehrbuch sagen? (logische Operatoren) Java Basics - Anfänger-Themen 4
N Problem bei meinem Code Java Basics - Anfänger-Themen 10
P Erste Schritte Bitte ein paar Erklärungen zu meinem Code Java Basics - Anfänger-Themen 6
H OOP, wie gehts richtig? (Beispiel von meinem Prof) Java Basics - Anfänger-Themen 6
H IOException in meinem Programm Java Basics - Anfänger-Themen 7
K Frage zu meinem ersten Programm Java Basics - Anfänger-Themen 5
K Frage zu meinem Programm Java Basics - Anfänger-Themen 25
F Methoden Kleines Problem mit meinem Glücksrad... Java Basics - Anfänger-Themen 9
O Wert in einer URL hinzufügen (in meinem Beispiel Google) Java Basics - Anfänger-Themen 7
M Wo ist der Fehler in meinem Programm? Java Basics - Anfänger-Themen 12
G Welche Java-Version auf meinem Rechner? Java Basics - Anfänger-Themen 2
D Keine Ausgabe in meinem Helden Programm Java Basics - Anfänger-Themen 2
M kurze frage zu meinem Code ... Java Basics - Anfänger-Themen 3
S Wie ist folgender Kommentar in meinem Ant file zu verstehen..? Java Basics - Anfänger-Themen 0
N Frage zu meinem Calculator Java Basics - Anfänger-Themen 6
D Verschiedene Fragen zu meinem Projekt Java Basics - Anfänger-Themen 6
F Hilfe bei meinem Spiel Java Basics - Anfänger-Themen 3
X Datentypen Probleme mit Char bei meinem 1. Spiel Java Basics - Anfänger-Themen 20
F Wie rechne ich bei meinem Code, die Wahrscheinlichkeit von Fall X aus? Java Basics - Anfänger-Themen 3
D Problem mit meinem ersten JOptionPane - Fatal exception occurred. Program will exit. Java Basics - Anfänger-Themen 6
K Hilfe, komme nicht weiter in meinem JAVA-Spiel Java Basics - Anfänger-Themen 3
C ArrayIndexOutOfBoundsException bei meinem ersten objektiorientierten Programm Java Basics - Anfänger-Themen 4
H frage zu meinem quellcode Java Basics - Anfänger-Themen 10
B Wo ist der Fehler in meinem Script Java Basics - Anfänger-Themen 4
Gonzalez Eingabe des Benutzers mittels readLine()-Methode. Klappt in meinem Beispiel nicht! Java Basics - Anfänger-Themen 7
M Fehler in meinem Quicksort! Java Basics - Anfänger-Themen 21
JeromeM90 Problem bei meinem Programm : Lottozahlen Java Basics - Anfänger-Themen 30
S Was ist falsch an meinem Rechner? Java Basics - Anfänger-Themen 7
S Ich habe ein kleines Problem mit meinem Übungsprogramm Java Basics - Anfänger-Themen 7
N NullPointerException bei meinem AbstractListModel Java Basics - Anfänger-Themen 4
G Brauche eure Hilfe bei meinem Programm Java Basics - Anfänger-Themen 4
A Ä;Ö;Ü warum geht das nicht mit meinem Konsolenprogramm ? Java Basics - Anfänger-Themen 5
A Java I/O Probleme mit meinem Encypter. Java Basics - Anfänger-Themen 6
S was ist in meinem code falsch? Java Basics - Anfänger-Themen 2
M brauche hilfe bei meinem Taschenrechner mit dem "-&quot Java Basics - Anfänger-Themen 4
G fibonacci was stimmt an meinem code nicht? Java Basics - Anfänger-Themen 2
C Zugriff auf Datein in meinem jar File Java Basics - Anfänger-Themen 23
D frage zur meinem objekt. sinnvolle objektmethode Java Basics - Anfänger-Themen 3
megachucky Problem bei meinem Videothek-Programm Java Basics - Anfänger-Themen 5
K komme in meinem stammchat nicht rein. Java Basics - Anfänger-Themen 6
megachucky Was kann ich besser / sinnvoller machen bei meinem code Java Basics - Anfänger-Themen 7
G Was is falsch mit meinem program? (stringvergleich-problem) Java Basics - Anfänger-Themen 8
J Probleme mit meinem Taschenrechner Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben