Skocz do zawartości

Skrypt z losowaniem liczb


Stranek

Rekomendowane odpowiedzi

Nie wiem co to jest losowanie z waga ?

---

Prawdopodobieństwem :)

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Waga elementów - tak mialem kiedys w netsales.pl stad waga hehe 

A czy moze jest jakis gotowy taki skrypt?

Niestety nie jestem biegły w tych sprawach i tak chodzi o prawdpodobieństwo.

Moze to byc programik lub jakas strona internetowa cokolwiek co da mi możliwość losowanie liczb w prawdopodobieństwem.

Odnośnik do komentarza
Udostępnij na innych stronach

Masz bruteforce, czyli zwykłe losowanie z tablicy z powtórzeniami.

$a = ['F5', 'F5', 'F5', 'F5', 'F5', 'F5', 'F5', 'F3', 'F4', 'F4'];
echo $a[array_rand($a)]; // pojedyncze losowanie

// sprawdźmy rozkład wylosowanych liczb dla $l losowań
$l = 1000000;
for ($i=0; $i<$l; $i++) {
    $los = $a[array_rand($a)];
    isset($b[$los]) ? $b[$los] += 1 : $b[$los] = 1;
}

// ustalmy wynik w %
array_walk($b, function(&$i) use($l) {
    $i = round(100 * $i / $l, 2);
});

echo'<pre>',var_dump(  $b  ),'</pre>';

Gdzieś kiedyś miałem funkcję z losowaniem z zadanym prawdopodobieństwem (możliwe, ze robiła to o co pytasz), jak odnajdę to wkleję o ile będzie pasowała do przykładu..

Odnośnik do komentarza
Udostępnij na innych stronach

Z grubsza robi to co chcesz. Nie testowane inaczej niż tym co też jest w poniższym kodzie, więc jak coś jednak nie działa, to nie odpowiadam ;) 

$tab = [
    // (string) wartość => (int) prawdopodobieństwo
    // suma wszystkich prawdopodobieństw, nie musi być równa 100
    'F5' => 70,
    'F3' => 10,
    'F4' => 20,
];

function losuj($tab) {
    $suma = array_sum($tab);
    $licznik = 0;
    $los = mt_rand(1, $suma);
    foreach ($tab as $k => $w) {
        $licznik += $w;
        if ($licznik < $los) {
            continue;
        } else {
            return $k;
        }
    }
    return false;
}

// pojedyncze losowanie                            
echo losuj($tab);
                            
// sprawdzenie dla $l losowań
$l = 1000000;
for ($i=0; $i<$l; $i++) {
    $los = losuj($tab);
    isset($b[$los]) ? $b[$los] += 1 : $b[$los] = 1;
}

array_walk($b, function(&$i) use($l) {
    $i = round(100 * $i / $l, 2);
});

echo'<pre>',var_dump($b, array_sum($b)),'</pre>';
Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności