Quando si chiama un numero intero casuale compreso tra 1 e 6, come posso far sì che a poco a poco sia meno probabile scegliere un numero più grande è? [duplicare]

1

Come se 1 fosse il numero più comune e 6 sia il numero meno comune. E tutto il resto si sta livellando.

    
posta AwesomeFaceHD 20.05.2014 - 07:01
fonte

3 risposte

12

Potresti impostare un array di dire 42 numeri interi con numeri:

 1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,6

Quindi ottieni un vero numero casuale compreso tra 0 e 41 e il numero appropriato dalla matrice.

Nell'impostazione di cui sopra un 1 è 6 volte più probabile che si verifichi di un 6 e due volte più probabile di un tre. Puoi giocare con il contenuto dell'array per ottenere la distribuzione richiesta.

    
risposta data 20.05.2014 - 07:46
fonte
7

Quello che stai cercando è Selezione proporzionata per il fitness .

Il modo di immaginare questo è visualizzare un gioco in cui giriamo una ruota per vincere premi.
I migliori premi hanno segmenti più piccoli (e hanno meno probabilità di essere vinti) ei premi della spazzatura hanno segmenti enormi (e hanno maggiori probabilità di essere vinti).

Ecco come implementerei questo:

Assegna (o calcola) la probabilità che si verifichi ogni tuo articolo.

1 60%
2 30%
3 4%
4 3%
5 2%
6 1%

Trasformeremo questi in decimali perché con questo ora sarà più semplice lavorare. L'unica cosa importante è che questi valori si sommano a uno:

1 60%   .6
2 30%   .3
3 4%    .04
4 3%    .03
5 2%    .02
6 1%    .01

Successivamente, calcola i valori cumulativi per ciascun elemento dell'array:

1 60%   .6
2 30%   .9
3 4%    .94
4 3%    .97
5 2%    .99
6 1%    1.00

Quindi genera un numero casuale compreso tra 0 e 1.

Trova la posizione nel tuo array cumulativo in cui inserire questo numero casuale. Il valore in questa posizione è il valore che è stato selezionato.

Ad esempio: se generiamo 0,5 che verrebbe inserito nel primo elemento dell'array, selezioniamo 1.
Se generiamo 0,7 che si adatterebbe alla prossima posizione, selezioniamo 2 e così via.

    
risposta data 20.05.2014 - 10:12
fonte
2

Un altro approccio potrebbe essere quello di applicare alcune funzioni ai numeri casuali. Funziona bene per numeri casuali in virgola mobile, che di solito sono compresi tra 0 e 1 soggetti a funzioni come square(x) o square_root(x) , che distorcono la distribuzione rimanendo all'interno dell'intervallo originale.

    
risposta data 20.05.2014 - 09:42
fonte

Leggi altre domande sui tag