Problem mit Zufalsgenerator

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Zufalsgenerator

    Also, ich hab ein prob mit einem Zufalsgenerator. Ein einfacher Zufalsgenerator ist ja easy, aber das ist glaub ich doch ein wenig anspruchsvoller. Soo, zu meiner frage:

    Ich brauch einen Zufallsgenerator den ich ihrgendwie mit einem verlinkbaren Banner, einem namen und einer Punkte anzahl füttere.
    Dieser generator soll mir dann per zufall ein Bild mit Link und dazugehörigem Namen ausgeben, das mit den Punkten ist dafür gedacht, je höher die Punkte desdo höher die wahrscheinlichkeit das der banner angezeigt wird. Das ist das ganze Problem !
    Ich hab mal ein bissle gegoogelt, aber nichts brauchbares gefunden. Vllt kann mir hier jemand helfen, wäre echt wichtig.

    Eine grundlegende Sache, ich möchte nicht umbedingt dass das jetzt jemand falsch versteht, ich will nicht das mir das ihrgendeiner codet, es sei den er will es ^^ ich brauch nur denkanstöße:-)

    Noch ne frage: Wäre es einfacher zb. für jeden Banner+Link+Name eine eigene datei in einem ordner zu machen. Und in einer anderen datei den Link zu der datei schreibt, und die Punkteanzahl. und aus dieser datei werden dan die Links zu den anderen gezogen ??

    oder vllt.

    mit einer SQL datenbank??, wens geht wäre mir ohne lieber ^^

    vielen dank schoneinmal im vorraus!

    Gruß,
    MasterD
    Wer Rechtschreibfehler findet, darf sie behalten !! :-)

  • #2
    Nabend,

    Erzeuge eine Zufallszahl von 0-100 und lasse diesen Wert durch ein Switch gehen.
    case >=0 <= 10: bild1
    case >=11 <= 50: bild2
    case >=51 <=100: bild3

    Damit ist das was du möchtest umgesetzt.

    Wenn du daraus eine Funktion bastelst, kannst du noch Bilder als Parameter übergeben etc...

    Gruß Thomas

    Kommentar


    • #3
      könntest du mir das bitte noch ein bisschen genauer erklären, ich hab das so net ganz verstanden ?? Bitte
      Wer Rechtschreibfehler findet, darf sie behalten !! :-)

      Kommentar


      • #4
        @Alrik,

        das mit dem switch wird sehr witzig werden wenn man mehr als 100 Bilder hat - hier die von mir präferierte Lösung:
        PHP-Code:
        $arr_bilder = array("bild1.jpg""bild2.jpg""bild3.jpg"); //etc
        $zufallszahl rand(0, (count($arr_bilder)-1) );

        echo 
        "Das Zufallsbild ist: ".$arr_bilder[$zufallszahl]; 
        Das dumme ist nur, das das nicht master-D's Problem löst, da er nach einer Punktzahl die pro Bild vergeben wird die verschiedenen Bilder stärker gewichten will.

        Ne PHP Lösung kann ich auf die Schnelle nicht anbieten, in SQL wäre es mit einer Query zu lösen... aber das nur nebenbei.

        Kommentar


        • #5
          Oder aber so ähnlich wie prego nur das du in das array die pfade je nach gewichtung öfter reinschreibst...

          Kommentar


          • #6
            Wo kommen denn die Gewichtungszahlen her? Stehen die in ner Textdatei, in der DB??

            Kommentar


            • #7
              Ich würde das so machen, dass ich die Bilder prozentual gewichte, also Einzelpunkte/Gesamtzahl der Punkte. Dann eine Zufallszahl zwischen 0 und 1 ausgeben und die Bilder (die eine bestimmte Reihenfolge haben, also durchnummeriert sind) so lange addieren, bis die Summe der Prozente größer ist als die Zufallszahl. Das letzte Bild wird ausgegeben.

              Ich hoffe, ich damit so halbwegs den Sachverhalt getroffen
              Zuletzt geändert von NilsV; 02.02.2006, 14:44.
              Wahrheit ist unser kostbarster Besitz. Lasst uns sparsam mit ihr umgehen. Mark Twain

              Kommentar


              • #8
                Original geschrieben von NilsV
                Ich würde das so machen, dass ich die Bilder prozentual gewichte, also Einzelpunkte/Gesamtzahl der Punkte. Dann eine Zufallszahl zwischen 0 und 1 ausgeben und die Bilder (die eine bestimmte Reihenfolge haben, also durchnummeriert sind)
                Woher kommt diese Reihenfolge?
                so lange addieren, bis die Summe der Prozente größer ist als der Zufallszahl. Das letzte Bild wird ausgegeben.
                Dann habe ich die Prozentwerte der ersten x Bilder aufaddiert, und bin bei meintwegen 0.69 angelangt; Zufallswert sei 0.7
                Jetzt kommt das nächste Bild mit einem Wert von 0.02 - und dieses "schwache" Bild soll jetzt genommen werden ...?


                Nee, da würde ich doch eher so vorgehen:
                Bilder bekommen in der Tat Werte zwischen 0 und 1 zugeteilt, und ich ermittle eine Zufallszahl zwischen 0 und 1.
                Jetzt nehme ich alle Bilder, deren Wert größer als meine Zufallszahl ist - und wähle aus denen zufällig eins aus.

                Ein Bild mit dem wert 0.8 hätte also eine Chance von 8:2, in der Erstauswahl zu landen, eines mit 0.3 nur eine von 3:7.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  Die Reihenfolge kann daher kommen, wo auch die Punkte liegen, das ist mir relativ

                  Deine Lösung ergibt aber kein korrektes Verhältnis, indem alle Werte über einer Zufallszahl genau die gleiche Wahrscheinlichkeit haben. Bei 0.001 als Zufallszahl und 0.1 und 0.9 als Werte haben beide eine Wahrscheinlichkeit von 0.5

                  Deswegen kann ich meine Methode empfehlen, da dort wirklich die richtige Wahrscheinlichkeit zählt, da kann auch mal ein Bild mit 0.02 angezeigt werden, aber entsprechend weniger häufig als eins mit 0.69

                  Außerdem willst du den Bildern Werte zwischen 0 und 1 zuteilen. Wie, wenn nicht durch Punkte/Gesamtpunkte? Da kann es aber vorkommen, dass überhaupt kein Bild den Ansprüchen entspricht.
                  Wahrheit ist unser kostbarster Besitz. Lasst uns sparsam mit ihr umgehen. Mark Twain

                  Kommentar


                  • #10
                    Original geschrieben von NilsV
                    Deine Lösung ergibt aber kein korrektes Verhältnis, indem alle Werte über einer Zufallszahl genau die gleiche Wahrscheinlichkeit haben. Bei 0.001 als Zufallszahl und 0.1 und 0.9 als Werte haben beide eine Wahrscheinlichkeit von 0.5
                    Halt, hier unterschlägst du die Hälfte.

                    Ja, für die Zufallszahl 0.001 (bzw. generell alle unter 0.1) hätten 0.1 und 0.9 die gleiche Wahrscheinlichkeit, anschließend ausgewählt zu werden.
                    Aber die Wahrscheinlichkeit, dass überhaupt erst mal die ausgewählte Zufallszahl unter 0.1 liegt, ist schon sehr gering.

                    0.1 hat eine Wahrscheinlichkeit von nur 1:9, in die "Endauswahl" zu kommen, 0.9 eine von 9:1.
                    Wenn du dies unterschlägst, ist deine ganze Betrachtung meines Vorschlages hinfällig.
                    Deswegen kann ich meine Methode empfehlen, da dort wirklich die richtige Wahrscheinlichkeit zählt, da kann auch mal ein Bild mit 0.02 angezeigt werden, aber entsprechend weniger häufig als eins mit 0.69
                    Bitte erkläre das mal genauer.
                    Wodurch soll bei deinem Verfahren bestimmt werden, dass 0.02 weniger häufig drankommt als 0.69?
                    Die Reihenfolge kann daher kommen, wo auch die Punkte liegen, das ist mir relativ
                    So lange du keine Vorschrift zur Bildung dieser "Reihenfolge" vorstellst, kann man die "Qualität" deines Verfahrens m.E. überhaupt nicht bestimmen.
                    Außerdem willst du den Bildern Werte zwischen 0 und 1 zuteilen. Wie, wenn nicht durch Punkte/Gesamtpunkte?
                    Schau in die originale Fragestellung - die Gewichtung wollte der Frager selbst vornehmen. (Auch wenn er dazu ebenfalls kein eindeutiges Verfahren genannt hat.)
                    Da kann es aber vorkommen, dass überhaupt kein Bild den Ansprüchen entspricht.
                    Dem könnte man zum einen durch "geeignete" Punkte für ein paar Bilder abhelfen (gebe einer gewissen Anzahl an extem "wichtigen" Bildern den Wert 1), und zum anderen könnte man in so einem Falle auch das Auswahlverfahren mit beispielsweise dem halbierten Zufallswert wiederholen.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      die erste antwort hatt mich auf einen Idee gebracht, die ich auch coden kann ^^ mit meinem beschränkten wissen.
                      Zu dem Problem,

                      ich teile erstmal 5 gruppen ein, und gebe ihnen einen zahlen bereich:
                      Gruppe1: 0 - 10
                      Gruppe2: 10 - 20
                      Gruppe3: 20 - 40
                      Gruppe4: 40 - 80
                      Gruppe5: 80 - 160

                      und teile die Bilder mit dem dazugehörigen text einer gruppe zu, dan laß ich mir einen zuffalszahl zwischen 1-160 ausgeben und schau welche gruppe dies betrifft. Zb. 75 wäre die gruppe 4.
                      Jetzt laß ich mir innerhalb der gruppe nocheinmal eine zufallszahl ausgeben von 1- (soviele Bilder wie ich habe). Somit haben in der gruppe, alle die gleichen chance, die gruppe selbst hatt aber je höher der zahlenbereich ist, eine größere wahrscheinlich keit im ersten durchlauf zu treffen.

                      So hatt Gruppe 5 eine 8:16 chance wogegen gruppe 1 nur eine 1:16 chance hatt. Ich könnte die gruppen ja bei bedarf noch erweitern, aber ich denke das sollte für meine zwecke so reichen ^^

                      Vielen dank für die fleißige schreiberei, auch wen ich viel nicht verstanden hab ^^

                      auch vielen dank an alrik der mich auf die Idee gebracht hatt.

                      Gruß,
                      MasterD
                      Wer Rechtschreibfehler findet, darf sie behalten !! :-)

                      Kommentar


                      • #12
                        Original geschrieben von wahsaga

                        Bitte erkläre das mal genauer.
                        Wodurch soll bei deinem Verfahren bestimmt werden, dass 0.02 weniger häufig drankommt als 0.69?
                        Auch wenn das Problem anscheinden anderweitig gelöst wurde

                        Wir bilden ja eine Zufallszahl zwischen 0 und 1 mit beliebiger Genauigkeit, sagen wir mal Hundertstel zu Testzwecken. Bei einem vernünftigen Zufallsgenerator sind bei einigen vielen Zufallszahlen alle Prozentzahlen ungefähr gleich oft aufgetreten, natürlich mit der entsprechenden stochastischen Abweichung.
                        Nun ist jedes Bild gewichtet, da ein Punktesystem angedacht ist kann man auch relativ genau danach gewichten (eben Einzelp./Gesamtp.). Der Einfachheit halber haben wir 3 Bilder (0.69,0.02,0.29).
                        Durch die Summierung der Gewichtungen bis Summe >= Zufallszahl ergiben sich die Bereiche:
                        0-0.69: Bild 1
                        0.7-0.71: Bild 2
                        0.72-1: Bild 3

                        Somit kommen die Bilder im Erwartungswert in sovielen Prozent der Fällen zum Einsätz, wie sie gewichtet wurden.
                        Die Reihenfolge sollte natürlich immer gleich sein, meinetwegen mit einer hochzählenden id.

                        Bei dem System wird also statistisch "gerecht" nach Anzahl der Punkten angezeigt.
                        Aber das ganze ist sicherlich auch Geschmackssache
                        Zuletzt geändert von NilsV; 02.02.2006, 20:11.
                        Wahrheit ist unser kostbarster Besitz. Lasst uns sparsam mit ihr umgehen. Mark Twain

                        Kommentar


                        • #13
                          Original geschrieben von NilsV
                          Der Einfachheit halber haben wir 3 Bilder (0.69,0.02,0.29).
                          OK, für den Fall funktioniert dein System - weil die Summe der Wichtungen 1 ergibt.

                          Aber was, wenn jetzt ein neues Bild hinzugefügt wird - dann musst du andere Wichtungen verändern, um in Summe wieder auf 1 zu kommen.
                          Welche suchst du aus?
                          Oder willst du von allen ein bisschen was abknapsen?

                          Von der Verwaltung her ziemlich aufwendig.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Auch wenn es schon gelöst wurde, möchte ich meine gedanken doch noch einbringen.

                            Möglich wäre eine Datei oder Tabelle so ähnlich aufzubauen:

                            banner1;3;10
                            banner2;1;3
                            banner3;0;5

                            Die erste Ziffer stellt einen counter da der runter bis auf 0 läuft. Die Zweite Ziffer gibt den Startwert dieses Counters an.

                            In meinem Beispiel lässt man sich eine Zufallszahl von Anzahl der Banner generieren. Die Zahl 3 zeigt auf den Banner 3. Dieser Counter steht auf 0 und er hopst auf den nächsten. Dieser wird angezeigt und der Counter wird um 1 gemindert.

                            Sollten alle Counter auf 0 stehen werden die Counter resetet. Dann könnte auch der 3. Banner wieder angezeigt werden. Klar das hat dann nicht mehr so viel mit Zufall zu tuen, sondern mehr mit Gewichtung der Banner.

                            Vorteil dieser Lösung:

                            - Man kann das ganze sehr felxibel halten.
                            - Einfache Pflege, da man nur noch ein Banner mit der Gewichtung in die Datei schreiben müsste.

                            Kommentar


                            • #15
                              Entschuldigung, da hab ich mich vielleicht nicht deutlich genug ausgedrückt: Selbstverständlich muss die Gewichtung bei Veränderungen neu berechnet werden, eben mit P/GP, ob man das jetzt in eine DB schreibt und nur bei wirklichen Veränderungen neu macht oder sich das bei jedem Auslesen machen lässt ist mir da gleich, Rechenzeit sollte nicht viel dafür draufgehen

                              So ist die Summe alle Gewichtungen immer 1, das ist natürlich Voraussetzung
                              Wahrheit ist unser kostbarster Besitz. Lasst uns sparsam mit ihr umgehen. Mark Twain

                              Kommentar

                              Lädt...
                              X