Programmablauf überschlägt sich



  • Hallo.

    Ich habe ein etwas seltsames Problem:

    Mein Programm hat den im folgenden beschriebenen Ablauf:
    Über eine einfache while-Schleife gesteuert werden aufwendige Berechnungen mehrfach durchgeführt. Diese Berechnungen beinhalten viele Zufallswerte. Es ist daher unwahrscheinlich, das zwei mal das gleiche Ergebnis auftritt.
    Die Ergebnisse jeden Durchlaufs werden in zwei globalen Vectoren gespeichert und von der while-Schleife weiter verarbeitet. Vor dem nächsten Durchlauf werden die Vectoren mit clear() gelöscht.
    Wenn ich zu Testzwecken kleine Aufgaben vorgebe, kann es nun passieren (meistens, nicht immer) das die Berechnung einfach "durchsackt". Soll heißen: Es wird fortlaufend das gleiche Ergebnis ausgegeben, ohne das eine Neuberechnung erfolgt.
    Wenn ich aufwendigere Aufgaben stelle, tritt dieses Problem nicht auf.

    Kann es sein, das die Löschung der Vectoren etwas nachhängt und so die alten Ergebnisse noch drinstehen, obwohl eigentlich schon ein neuer Zyklus läuft?
    Wenn ja, wie kann ich den richtigen Ablauf sicherstellen?

    Vielen Dank!

    Gruß,
    chris_f



  • Hallo

    sollte eigentlich nicht passieren...
    kann es sein, das du die Initialiesrung des Zufallsgenerierung mehrmals, also vor jedem Zyklus neu machst? Das sollte nur einmal am Programmstart sein.

    Ansonsten mal Minimalcode posten.

    bis bald
    akari



  • Gibt es einen Grund wieso die Verctoren global arbeiten müssen?



  • Hallo akari!

    Danke! Das war der Fehler. Jetzt steht randomize() nur noch im Konstruktor einer Form und das Problem tritt nicht mehr auf.

    Hat mich etwas überrascht. Hätte erwartet, dass dann immer das gleiche Ergebnis entsteht, auch bei der komplexeren Aufgabe. Deshalb habe ich darauf nicht geachtet. Ich werde mich über den Pseudozufallszahlengenerator mal etwas schlauer machen, damit mir so was nicht mehr passiert. Den werde ich nämlich noch öfter brauchen.

    Vielen Dank.

    Gruß,
    chris_f

    @junix
    Ja, bei jeder anderen denkbaren Lösung sterbe ich des Todes...



  • chris_f schrieb:

    Ja, bei jeder anderen denkbaren Lösung sterbe ich des Todes...

    ...?



  • 🙂
    Die beiden Vectoren sind die Datenbasis für alle möglichen Operationen. Daher habe ich sie global gemacht. Das ist sicher nicht die sauberste Lösung, aber die einfachste.
    Da es sich mehr um ein privates Experiment als um ein Programm handelt, ist ein bisschen Pfusch nicht so schlimm. Wenn ich das jetzt umstellen müsste, hätte ich richtig Ärger.
    Außerdem geht es in dem Programm letzlich nur darum diese Vectoren mit Daten zu füttern und zu verarbeiten. Wenn du das philosophisch sehen willst, dienen die Vectoren nicht dem Programm, sondern das Programm dient den Vectoren.

    Gruß,
    chris_f



  • Ich sehe das Todesurteil noch nicht...? Egal. Könnte es sein das du ein Synchronisationsproblem hast? Gibt es Bedingungen in deinen Berechnungen?



  • Ja, bei jeder anderen denkbaren Lösung sterbe ich des Todes...

    War der Versuch eines Scherzes mittels eines rethorischen Stilmittels http://de.wikipedia.org/wiki/Hyperbel_%28Sprache%29
    Nein, Bedingungen in der Art wie Du sie meinst habe ich nicht. Die einzelnen Durchläufe sind strikt getrennt. Die Ergebnisse werden lediglich in einer Liste gesammelt.
    Die Sache mit dem randomize() scheint das Problem gelöst zu haben. Zumindest kann ich es nicht mehr provozieren. Die Tatsache das es bei komplexen Aufgaben nicht aufgetreten ist, kann ich mittlerweilen mit der Verteilung der randomize()-Aufrufe im Code hinreichend erklären. War sehr geschickt eingefädelt. Wenn ich versucht hätte das absichtlich zu generieren, hätte ich das nie hinbekommen...



  • chris_f schrieb:

    Ja, bei jeder anderen denkbaren Lösung sterbe ich des Todes...

    War der Versuch eines Scherzes mittels eines rethorischen Stilmittels http://de.wikipedia.org/wiki/Hyperbel_%28Sprache%29

    Danke für den kleinen Sprachkurs, aber ich versichere dir, das ich lediglich versucht hatte, deine hyperbel (mir war, in der deutschen Umgangssprache nennt man sowas "Überzeichnung") aufzugreifen und fortzuführen.

    chris_f schrieb:

    Nein, Bedingungen in der Art wie Du sie meinst habe ich nicht.

    Das impliziert, das du andere Bedingungen hast, die aber nicht dem entsprechen, von was du glaubst, das ich es suche. Welche Bedingungen sind dies denn?

    chris_f schrieb:

    Die Tatsache das es bei komplexen Aufgaben nicht aufgetreten ist, kann ich mittlerweilen mit der Verteilung der randomize()-Aufrufe im Code hinreichend erklären.

    Du solltest dir unbedingt die Dokumentation zum Thema Randomize zu Gemüte führen. Speziell die Richtlinien bezüglich Häufigkeit des Aufrufs.


Anmelden zum Antworten