Häufer: Häufung

Hallo,

gegeben ist ein Gitter 1000 x 1000 Zellen, dessen Zellstati in einem mehrdimensionalen Feld abgelegt sind. Jede Zelle kann zwei verschiedene Stati haben = aktiv und aus, repräsentiert durch schwarz und weiss. Bei Programmstart werden diese Zellstati nun zufällig vergeben, wobei die Wahrscheinlichkeit für ein schwarzes Feld (=aktiv) gleich 30% beträgt.

Dadurch ergibt sich eine relativ gleichmäßige Verteilung schwarzer, also aktiver, Zellen. Was ich nun erreichen möchte:

Es soll zu Haufenbildungen kommen, ähnlich Sternensysteme oder anderer physikalischer Phänomene. Eine Zunahme der Dichte (Häufigkeit) zum Kern hin wäre ideal. Meine Ansatz ist bisher wie folgt:

  1. Es wird ein "Kern" gewählt, der als Zentrum eines Haufens dient. Die Position ist zufällig, es kann durchaus auch mehr als 1 Kern geben. Die Wahrscheinlichkeit, dass ein Kern aktiv (=schwarz) ist, ist gleich 100%.

  2. Es wird die erste Schale generiert, die um den Kern herum existiert (8 Zellen). Die Wahrscheinlichkeit, dass eine Zelle der ersten Schale aktiv ist, beträgt 80%.

3)Es werden weitere Schalen (um die erste, zweite, ...) Schale generiert, deren Zellen eine abnehmede Existenzwahrscheinlichkeit besitzen.

Was haltet ihr von dem Ansatz? Was wäre eine bessere Methode?
Gruß
der Häufer

  1. Was haltet ihr von dem Ansatz? Was wäre eine bessere Methode?

    Du fragst nicht nach Programmiertechnik, sondern nach einem Algorithmus, welcher Bellshape-ähnlich Daten manipuliert.
    Du beschreibst einen Fuzzy-Pinsel radialer Natur.
    Jedes Feld hat eine x/y-definierten Abstand zum Zentrum der Glocke.
    Der Punkt auf der Glockenkurve stellt dabei die Wahrscheinlichkeit dar, dass dieses Feld mutiert.
    Die Glockenkurve ist ein Graph aus der Normalverteilung

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Hallo Beat,

      Du fragst nicht nach Programmiertechnik, sondern nach einem Algorithmus, welcher Bellshape-ähnlich Daten manipuliert.
      Du beschreibst einen Fuzzy-Pinsel radialer Natur.
      Jedes Feld hat eine x/y-definierten Abstand zum Zentrum der Glocke.
      Der Punkt auf der Glockenkurve stellt dabei die Wahrscheinlichkeit dar, dass dieses Feld mutiert.
      Die Glockenkurve ist ein Graph aus der Normalverteilung

      hmmm, und? Die Glockenkurve ist mir als Geodät wohlbekannt, was genau willst du mit der Antwort aussagen? Oder war das einfach nur heisse Luft? Implizit fragte ich natürlich nach einer Programmiertechnik, denn auch eine Frage nach einem Algorithmus gehört meines Erachtens definitiv in diese Rubrik. Sei's drum, wie würdest du vorgehen?

      1. Moin!

        Du fragst nicht nach Programmiertechnik, sondern nach einem Algorithmus, welcher Bellshape-ähnlich Daten manipuliert.
        Du beschreibst einen Fuzzy-Pinsel radialer Natur.
        Jedes Feld hat eine x/y-definierten Abstand zum Zentrum der Glocke.
        Der Punkt auf der Glockenkurve stellt dabei die Wahrscheinlichkeit dar, dass dieses Feld mutiert.
        Die Glockenkurve ist ein Graph aus der Normalverteilung

        hmmm, und? Die Glockenkurve ist mir als Geodät wohlbekannt, was genau willst du mit der Antwort aussagen? Oder war das einfach nur heisse Luft? Implizit fragte ich natürlich nach einer Programmiertechnik, denn auch eine Frage nach einem Algorithmus gehört meines Erachtens definitiv in diese Rubrik. Sei's drum, wie würdest du vorgehen?

        Bau dir eine Formel, die dir in Abhängigkeit von den Koordinaten des gerade untersuchten Punktes X,Y in Relation zum Mittelpunkt 0,0 deines "Haufens" die Wahrscheinlichkeit der Schwarzfärbung zurückgibt.

        Die Transformation und Skalierung dieser Funktion auf dein Pixelraster dürfte dann nur noch eine kleine Fingerübung sein - für dich als Geodät allemal. Dabei einfach alle Punkte des gewünschten Rasters durchgehen, Wahrscheinlichkeitswert dieses Pixels in Relation zum gewünschten Haufenmittelpunkt sowie dessen Größe ermitteln und einfärben. Fertig.

        Was das mit der Glockenkurve zu tun hat? Irgendwoher muss doch die Wahrscheinlichkeit kommen. Ob du nun die Gaussverteilung nimmst, eine Sinuskurve, eine Dreieckkurve, Rauschen... alles relativ egal.

        Wenn du einen in der Amplitude vom Mittelpunkt her sich abschwächenden Cosinus nimmst, dessen Phasenlage sich proportional zum Winkel des gefragten Punktes verschiebt, dürftest du beispielsweise auch schöne Spiralarme hinkriegen.

        Aber so ganz wird dein Problem nicht klar. Wo hakt es? Und hältst du es für gerechtfertigt, allen Menschen, die dir antworten, erstmal das Emittieren heißer Luft vorzuwerfen?

        - Sven Rautenberg

        1. Hallo Sven,

          danke dir für deine Antwort.

          Bau dir eine Formel, die dir in Abhängigkeit von den Koordinaten des gerade untersuchten Punktes X,Y in Relation zum Mittelpunkt 0,0 deines "Haufens" die Wahrscheinlichkeit der Schwarzfärbung zurückgibt.

          das sollte kein Problem sein

          Die Transformation und Skalierung dieser Funktion auf dein Pixelraster dürfte dann nur noch eine kleine Fingerübung sein - für dich als Geodät allemal. Dabei einfach alle Punkte des gewünschten Rasters durchgehen, Wahrscheinlichkeitswert dieses Pixels in Relation zum gewünschten Haufenmittelpunkt sowie dessen Größe ermitteln und einfärben. Fertig.

          Das Problem liegt eher daran, dass ich Programmieranfänger bin. Mir ist teilweise schleierhaft, wie ich Probleme adäquat abbilde. Das heisst für mich erstmal Übung.

          Was das mit der Glockenkurve zu tun hat? Irgendwoher muss doch die Wahrscheinlichkeit kommen. Ob du nun die Gaussverteilung nimmst, eine Sinuskurve, eine Dreieckkurve, Rauschen... alles relativ egal.

          Ich fragte zwar nicht, was genau das mit der Glockenkurve zu tun hat, aber wohl hast du es so verstanden. Das ich einen Ansatz brauche, um für jeden Punkt die entsprechende Wahrscheinlichkeit zu berechnen, ist klar.

          Aber so ganz wird dein Problem nicht klar. Wo hakt es? Und hältst du es für gerechtfertigt, allen Menschen, die dir antworten, erstmal das Emittieren heißer Luft vorzuwerfen?

          Allen mit Sicherheit nicht. Bets Antwort war nun Wirklich alles andere - in meinen Augen - als konstruktiv. Sie kam mir eher schlaumeierisch der Schlaumeierei wegen vor. Falls ich mich im Ton vergriffen habe, möchte ich mich an dieser Stelle entschuldigen.

          Der Häufer

          1. Allen mit Sicherheit nicht. Bets Antwort war nun Wirklich alles andere - in meinen Augen - als konstruktiv. Sie kam mir eher schlaumeierisch der Schlaumeierei wegen vor. Falls ich mich im Ton vergriffen habe, möchte ich mich an dieser Stelle entschuldigen.

            Es hat schon etws mit verfahren zu tun, aber noch nicht mit Programmiertechnik.
            Dein Verfahren mit Ringen (die es bei einem Grid nicht gibt) verläuft in Stufen, ohne dass du direkt Fernwirkung berechnen kannst. Du wirst dabei immer von einem Feld ausgehen müssen.
            Algorithmen wie z.B. über die Normalverteilung erlauben dir, die Fernwirkung zu berechnen. Du musst dann deinen 2Dim-Array nur einmal durchlaufen.

            Welchen Programmtechnischen Ansatz man verfolgt, hängt auch von der gewählten Sprache ab.
            Soll das ganze am Browser abspielen (Javascript) so sind 1Mio Felder nicht zu unterschätzen. Da willst du den Rechenaufwand minimieren und jedes Element so wenig anfassen wie möglich.

            Du musst also schon mehr Hinweise geben.

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
            1. Hallo Beat,

              Es hat schon etws mit verfahren zu tun, aber noch nicht mit Programmiertechnik.

              Das war die einzig passende Kategorie

              Dein Verfahren mit Ringen (die es bei einem Grid nicht gibt) verläuft in Stufen, ohne dass du direkt Fernwirkung berechnen kannst. Du wirst dabei immer von einem Feld ausgehen müssen.

              das ist ein Argument

              Algorithmen wie z.B. über die Normalverteilung erlauben dir, die Fernwirkung zu berechnen. Du musst dann deinen 2Dim-Array nur einmal durchlaufen.

              Ok, das klingt einleuchtend.

              Welchen Programmtechnischen Ansatz man verfolgt, hängt auch von der gewählten Sprache ab.
              Soll das ganze am Browser abspielen (Javascript) so sind 1Mio Felder nicht zu unterschätzen. Da willst du den Rechenaufwand minimieren und jedes Element so wenig anfassen wie möglich.

              Es wird eine Art Simulation, ein zellulärer Automat. Die Universen werden nur anfangs generiert; es entstehen keine neuen und die existierenden mutieren auch nicht oder dergleiche. Lediglich die Zellen des Universums sterben nach einer Weile ab. Diese Erklärung ist jetzt etwas blöd, das ist mir klar.

              Das ganze soll in Java umgesetzt werden. Soweit sind meine Kenntnisse schon vorhanden. Nur das Ausarbeiten solcher Algorithmen auf Programmierebene ist mir noch neu. Ich werde mir jetzt erstmal grundlegende Kenntnisse aneignen.

              Vielen Dank soweit!
              Der Häufer in spe

  2. Was haltet ihr von dem Ansatz?

    Relativ viel.

    Was wäre eine bessere Methode?

    Für ein "besser" müßte man erst mal wissen, was Du erreichen willst oder wie sehr und inwiefern sich dein Ergebnis mit deinem Wunsch deckt bzw. davon abweicht.

    Eine andere Methode wäre, keine nächste Schale vom Zentrum aus zu berechnen, sondern von den tatsächlich aktiven Punkten der letzten Schale auszugehen, falls es das ist was einem besser gefällt als ein http://de.wikipedia.org/wiki/Kugelsternhaufen.

    1. Hallo Texter mit x,

      Was wäre eine bessere Methode?
      Für ein "besser" müßte man erst mal wissen, was Du erreichen willst oder wie sehr und inwiefern sich dein Ergebnis mit deinem Wunsch deckt bzw. davon abweicht.

      Stimmt, da muss ich dir zustimmen. Diese Aussage war ungünstig. Das Programm ist erst in Planung, deshalb kann ich über das Ergebnis noch nicht wirklich was aussagen.

      Eine andere Methode wäre, keine nächste Schale vom Zentrum aus zu berechnen, sondern von den tatsächlich aktiven Punkten der letzten Schale auszugehen, falls es das ist was einem besser gefällt als ein http://de.wikipedia.org/wiki/Kugelsternhaufen.

      Gute Idee! Das werde ich ebenfalls ausprobieren.