Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Losowanie liczb wg prawdopodobieństwa
tomxx
post 24.10.2013, 14:55:09
Post #1





Grupa: Zarejestrowani
Postów: 172
Pomógł: 27
Dołączył: 5.10.2013

Ostrzeżenie: (0%)
-----


Mam prostą funkcję służącą do losowania czegokolwiek z określonym prawdopodobieństwem.

  1. <?php
  2.  
  3. function los(){return rand(1, 1000000000) / 1000000000;}
  4.  
  5. function sumowanie($tablica, $ileElementów) {
  6. $liczbaIteracji = 0;
  7. $wynik = 0;
  8. foreach($tablica as $liczba) {
  9. $liczbaIteracji++;
  10. $wynik += $liczba;
  11. if($liczbaIteracji == $ileElementów) break;
  12. }
  13. return $wynik;
  14. }
  15.  
  16. function losowanie($tablica) {
  17.  
  18. $liczbaIteracji = 0;
  19. $los = los() * (1 - array_sum($tablica));
  20.  
  21. foreach ($tablica as $klucz=>$liczba) {
  22.  
  23. if($los < sumowanie($tablica, $liczbaIteracji+1)) {
  24. return $klucz;
  25. break;
  26. }
  27.  
  28. $liczbaIteracji++;
  29. }
  30. }
  31.  
  32. echo losowanie(["1"=>0.2, "2"=>0.8]);
  33. ?>


Powyższy przykład powinien w 20% przypadków wyświetlić 1, a w 80% 2. Oczywiście zamiast liczb można podawać wszelkie inne typy danych.
Ponadto jeśli suma elementów tablicy podanej jako argument nie jest równa 1, to skrypt sam sobie z tym poradzi (["1"=>0.1, "2"=>0.4] będzie oznaczało tyle co ["1"=>0.2, "2"=>0.8]).

Ten post edytował tomxx 25.10.2013, 13:14:39
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 10:53