php prozentuale chance
Dies ist wirklich mehr eine Frage der Einstellung ist, aber ich bin präsentiert es in php.
Nehmen wir an, wir hatten eine Liste von vier Prozentwerte geben ein Ereignis eintreten wird, auf iteration.
array=('walk the dog'=>.25,'read the paper'=>.25,'drink coffee'=>.0,'listen to music'=>.50)
(Tasten sind nur tests - in der Praxis ist dies noch in einem Strategie-Muster gilt, dass unterschiedliche Methoden, um ein Objekt aus chance mit call_user_func()
)
In einer Schleife, was wäre der beste Weg, um wählen Sie eine der folgenden Ereignisse per random-Auswahl angepasst, wobei Sie Ihre jeweiligen Gewichtungen zu berücksichtigen (DH für diese spezielle Konfiguration, es wird viel Musik gehört und nicht viel Kaffee Trank)
Derzeit habe ich so etwas wie:
for($i=1;$i<=3;$i++){
$rand = 1/rand(1,10);
//choose from the list
}
Aber dies würde erfordern, die Zuordnung der Prozentsätze zu Wertebereichen (50-100% geworden Sie Musik hören, 0-25% mit dem Hund spazieren und 25-50 Lesen der Zeitung), weil der 'Wert' für die iteration berechnet wird als Gleitkommazahl zwischen 0 und 1. Diese Art von änderungen, die die Art und Weise der Prozentsätze erfasst werden müssen.
Gibt es irgendeine Art von Ansatz, dass würde die Erhaltung der Identität, der Werte wie die Reale Wahrscheinlichkeit, dass Sie gewählt werden sollten, sondern als Bereiche? Es würde definitiv machen den code mehr konfigurierbar, da ich auf diese Werte einstellbar. Bitte lassen Sie mich wissen, wenn ich habe zu vage.
- Ja genau.
- Es gibt 4 Elemente in Ihrer Liste btw, nicht drei.
- bearbeitet 😉
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde so etwas machen:
Haben Sie sich überlegt mit dem prozentualen Werte als kumulierte Zahl?
Dieser übernimmt die Werte im array addieren sich zu 1. Bestellung spielt keine Rolle...
Entfernt diese mit einem Schlüssel den Wert null, und multipliziert die Schlüssel-Wert mit 100, um es besser lesbar.
Können Sie die Umstrukturierung der array in der Weise, dass die events gespeichert sind, mit Abnehmender Wahrscheinlichkeit (für die Leistung) und der zugehörige Wert eines Ereignisses ist die Wahrscheinlichkeit, dass dieses bestimmte Ereignis, plus dem Wert eines vorherigen Elements (was bedeutet, dass das Letzte element immer den Wert 1 haben.).
Dann müssen Sie nur die Iteration über das array und zurück, das Ereignis, für dessen Wert größer ist als $rand.