Gewichteter "Zufall"
Linuchs
- programmiertechnik
Hallo,
in einen Veranstaltungskalender blende ich Werbung ein und nutze eine Zufallsfunktion, um eine der möglichen Anzeigen aus der Datenbank zu holen.
Wie vom Würfeln bekannt, kommt die 6 nicht, wenn man sie braucht. Und eine bestimmte Werbung kommt nicht, wenn der Auftraggeber danach sucht und die Seite mehrfach aufruft.
Nun muss ich also dem "Zufall" auf die Sprünge helfen oder mir ein anderes Verfahren überlegen, damit die Verteilung gleichmäßiger wird.
Ich könnte jeder geholten Werbung einen Zeitstempel verpassen und die "älteren" bevorzugt behandeln. Aber wie? Einfach den ältesten zuerst? Das wäre dann kein Zufall mehr.
Veranstaltungen (und damit die Werbung) werden in einem Radius von standardmäßig 15 km um den gesuchten Ort angezeigt. Nun gibt es "Kreise" mit viel Werbung, da könnte man die "nahen" Anzeigen bevorzugen.
Irgendwie möchte ich eine Priorität ermitteln, in die der Zufall eingeht, aber auch die lange nicht gezeigten und geografisch nahen Anzeigen bevorzugt werden.
Irgendwie habe ich keine gute Idee dazu.
Linuchs
Hallo Linuchs,
du könntest die auf 1 normierte Zufallszahl quadrieren, dadurch kommen die kleinen Zahlen häufiger vor.
Gruß, Jürgen
Hallo JürgenB,
hier noch ein Test:
http://j-berkemeier.de/Test/zuftest_gew.html
1. Spalte Zahl
2. Spalte Häufigkeit linear
3. Spalte Häufigkeit quadriert
4. Spalte Häufigkeit hoch 4
Gruß, Jürgen
Hallo Linuchs,
ein Vorschlag: du hast eine Pool von ID’s. Wiederholen die ID so das jede ID 10 Mal vorkommt. Jetzt kannst du die Anzahl der ID mit niedriger Priorität (z.B. -3), mit großem Abstand (-3) reduzieren. Jeder Treffer nimmt wieder eine ID heraus so wird der Pool immer kleiner bis schließlich jeder Eintrag ausgegeben wurde, dann beginnt das ganze Spiel erneut.
... Zufallsfunktion, um eine der möglichen Anzeigen aus der Datenbank zu holen.
Wie vom Würfeln bekannt, kommt die 6 nicht, wenn man sie braucht. Und eine bestimmte Werbung kommt nicht, wenn der Auftraggeber danach sucht und die Seite mehrfach aufruft.
Nun muss ich also dem "Zufall" auf die Sprünge helfen oder mir ein anderes Verfahren überlegen, damit die Verteilung gleichmäßiger wird.
Bei JEDEM Zufallsverfahren kann es passieren, dass ein bestimmtes Ergebnis lange, lange Zeit nicht kommt. Dem kann man nur begegnen, indem man alle Ergebnisse turnusmäßig abarbeitet. Will man dem Zufall etwas Raum geben, kann man die Ergebnisse vor jeder vollen Runde wie ein Kartenspiel mischen. Selbst dann können im schlimmsten Fall 2*n-1 Aktionen erforderlich sein, bis ein bestimmtes Ergebnis eintritt.
Gruß H.
Ich könnte jeder geholten Werbung einen Zeitstempel verpassen und die "älteren" bevorzugt behandeln. Aber wie? Einfach den ältesten zuerst? Das wäre dann kein Zufall mehr.
Muss es wirklich Zufall sein? Die Werbungen der Reihe nach durchschalten ist doch auch nicht schlecht. Wenn viele Nutzer die Seiten aufrufen, entsteht dadurch praktisch der selbe Effekt.
Und wenn nur ein Nutzer gerade auf deiner Seite ist und sich durchklickt, kriegt der wenigstens alles hintereinander gezeigt.