Discussione:
Gestire probabilità in Java
(troppo vecchio per rispondere)
gianpi
2005-05-10 21:17:31 UTC
Permalink
Ciao a tutti, sto preparando la mia tesi di laurea ed ho un problema a
cui non riesco a trovare una soluzione.
Ho un array di n elementi, con n variabile e non noto a priori. Per ogni
elemento posso (e devo) calcolare la probabilità che venga scelto tra
gli n. La somma delle n probabilità naturalmente darà 1.
C'è modo di estrarre casualmente uno degli n elementi sulla base della
loro probabilità?
Mi va bene sia una soluzione già esistente (se c'è) che un link dove
documentarmi se fossi costretto a realizzarne una ad hoc. Purtroppo
anche cercando su google non sono venuto a capo di niente.

Grazie in anticipo a chi risponderà.
Alex3comJava
2005-05-10 21:47:55 UTC
Permalink
Esiste una classe random....
Se stai facendo la tesi in Ing. sicuramenti conoscerai l'euristica 0 1 alla
base della generazione di numeri casuali, in genere RICERCA OPERATIVA.
moltiplicato il numero per n ottieni l'indice che ti serve.
Ciao
Post by gianpi
Ciao a tutti, sto preparando la mia tesi di laurea ed ho un problema a
cui non riesco a trovare una soluzione.
Ho un array di n elementi, con n variabile e non noto a priori. Per ogni
elemento posso (e devo) calcolare la probabilità che venga scelto tra
gli n. La somma delle n probabilità naturalmente darà 1.
C'è modo di estrarre casualmente uno degli n elementi sulla base della
loro probabilità?
Mi va bene sia una soluzione già esistente (se c'è) che un link dove
documentarmi se fossi costretto a realizzarne una ad hoc. Purtroppo
anche cercando su google non sono venuto a capo di niente.
Grazie in anticipo a chi risponderà.
gianpi
2005-05-10 21:56:48 UTC
Permalink
Post by Alex3comJava
Esiste una classe random....
Se stai facendo la tesi in Ing. sicuramenti conoscerai l'euristica 0 1 alla
base della generazione di numeri casuali, in genere RICERCA OPERATIVA.
moltiplicato il numero per n ottieni l'indice che ti serve.
Ciao, intanto grazie per la risposta.
Con random posso ottenere un numero tra zero ed uno, e poi
moltiplicandolo per n ed arrotondando ottenere l'indice dell'array.
Questo è quello che dici tu, se non ho capito male.
Il problema è che random, da quello che ho letto, estrae un numero con
distribuzione uniforme. Cioè tutti i valori tra 0 e 1 sono equiprobabili.
Quindi, facendo in quel modo, anche i miei n elementi avrebbero tutti la
stessa probabilità di essere scelti.
Io invece ho bisogno di imporre probabilità diverse ai vari elementi, in
modo che un venga scelto più probabilmente di altri.
Es. se n = 3, l'elemento 0 ha probabilità 0.5, l'elemento 1 ha
probabilità 0.2 e l'elemento 2 ha probabilità 0.3.
Spero di essermi spiegato meglio.

ciao
Lucio Benfante
2005-05-11 06:18:32 UTC
Permalink
Post by gianpi
Post by Alex3comJava
Esiste una classe random....
Se stai facendo la tesi in Ing. sicuramenti conoscerai l'euristica 0 1 alla
base della generazione di numeri casuali, in genere RICERCA OPERATIVA.
moltiplicato il numero per n ottieni l'indice che ti serve.
Ciao, intanto grazie per la risposta.
Con random posso ottenere un numero tra zero ed uno, e poi
moltiplicandolo per n ed arrotondando ottenere l'indice dell'array.
Questo è quello che dici tu, se non ho capito male.
Il problema è che random, da quello che ho letto, estrae un numero con
distribuzione uniforme. Cioè tutti i valori tra 0 e 1 sono equiprobabili.
Quindi, facendo in quel modo, anche i miei n elementi avrebbero tutti la
stessa probabilità di essere scelti.
Io invece ho bisogno di imporre probabilità diverse ai vari elementi, in
modo che un venga scelto più probabilmente di altri.
Es. se n = 3, l'elemento 0 ha probabilità 0.5, l'elemento 1 ha
probabilità 0.2 e l'elemento 2 ha probabilità 0.3.
Spero di essermi spiegato meglio.
Ciao,
potresti utilizzare l'uniforme cumulando le probabilita'.
Ad esempio, usando la tua distribuzione di probabilita' discreta con
P0=0.5 , P1=0.2 e P2=0.3, estrai un valore con un generatore di numeri
casuali (anzi, come al solito, pseudocasuali) con distribuzione uniforme
nell'intervallo [0,1[ e se il numero e' nell'intervallo [0,0.5[ consideri
di aver estratto l'elemento 0 della tua distribuzione discreta, se in
[0.5,0.7[ l'elemento 1, e se in [0.7,1[ l'elemento 2.
--
Lucio Benfante
Java User Group Padova: http://www.jugpadova.it
Brainbench MVP for Java 1: http://www.brainbench.com
MyTranscript: http://www.brainbench.com/transcript.jsp?pid=167064
gianpi
2005-05-11 07:08:23 UTC
Permalink
Post by Lucio Benfante
Ciao,
potresti utilizzare l'uniforme cumulando le probabilita'.
Ad esempio, usando la tua distribuzione di probabilita' discreta con
P0=0.5 , P1=0.2 e P2=0.3, estrai un valore con un generatore di numeri
casuali (anzi, come al solito, pseudocasuali) con distribuzione uniforme
nell'intervallo [0,1[ e se il numero e' nell'intervallo [0,0.5[ consideri
di aver estratto l'elemento 0 della tua distribuzione discreta, se in
[0.5,0.7[ l'elemento 1, e se in [0.7,1[ l'elemento 2.
Sembra un'ottima idea. Provo ad implementarla per vedere come va con n
un po' più realistico e ti faccio sapere.
Grazie mille!

Loading...