Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Losowe zdarzenie oparte o % szans
Forum PHP.pl > Forum > Przedszkole
Kasat
Witam, mam problem. Mianowicie chodzi o wylosowanie zdarzenia oparte o szansę.
Mamy obsługę samochodu, gdy obsługa danego kierowcy jest 0 to losuje się przy tym 1..10 i przyjmijmy że wylosowano liczbę 2. (mowa tu o %)
Następnie pod zmienną $rand stawiam rand(1,100) i w przypadku wylosowania liczby <= 2 ma nastąpić jakieś negatywne zdarzenie.
Jednak takie coś jest nie zgodne z prawdą, bo szansa i tak w tedy wyjdzie więcej niż te 2%...
trochę to chaotycznie napisane więc przedstawiam kod...
  1.  
  2. if($uzytkownik['obsluga'] == 0) {
  3. $obsluga = rand(1,10);
  4. } else {
  5. $obsluga = $uzytkownik['obsluga'];
  6. }
  7.  
  8. $zdarzenie_negatywne = rand(1,100);
  9.  
  10. if($zdarzenie_negatywne <= $obsluga) {
  11. //zle sie dzieje... biggrin.gif
  12. } else {
  13. //dobrze sie dzieje... biggrin.gif
  14. }
  15.  



Chodzi ogólnie obsługa polega na tym, że wyznacza ile % szans jest na ominięcie np. przeszkody itp.

Proszę o pomoc, bo te obliczenia nie są w ogóle dobre...

smietek
Przecież twój sposób liczenia szansy jest poprawny.
Kasat
Nie jest poprawny, bo skoro mam 2% na ominięcie przeszkody to przy takim losowaniu cały czas praktycznie przeszkoda była by omijana.

Już sobie poradziłem, dla innych którzy będą mieli podobny problem.
Wystarczy od 100 odjąć wylosowany %.

Np.:
  1. $obsluga = rand(1,10);
  2. $obsluga = 100 - $obsluga;
  3. $zdarzenie_negatywne = rand(1,100);
  4.  
  5. if($zdarzenie_negatywne <= $obsluga) {
  6. //tu walne w przeszkode
  7. } else {
  8. // a tu juz nie
  9. }
  10.  

smietek
Cytat(Kasat @ 18.12.2010, 13:07:48 ) *
Nie jest poprawny, bo skoro mam 2% na ominięcie przeszkody to przy takim losowaniu cały czas praktycznie przeszkoda była by omijana.


Skoro szansa na zdarzenie jest 2% (czyli 2, trzeba pomnożyć % tak żeby wyszedł integer), a $zdarzenie_negatywne przyjmuje wartości od 1 do 100, to znaczy, że tylko dwie liczby spełniają zależność $zdarzenie_negatywne <= $obsluga, 1 i 2. Gdy system wylosuje jakąkolwiek inną, zdarzenie nie występuje (tylko liczby 1 i 2 są mniejsze lub równe 2)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.