Come se 1 fosse il numero più comune e 6 sia il numero meno comune. E tutto il resto si sta livellando.
Come se 1 fosse il numero più comune e 6 sia il numero meno comune. E tutto il resto si sta livellando.
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.
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.
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.