purtroppo il codice è parecchio lungo (questo è una piccola parte di un progetto più grande) e l'assegnazione delle probabilità viene eseguita da una classe, la generazione di chiamate da un'altra e cosi via quindi postare il codice mi risulta alquanto complicato, ma in generale i passi sono questi:

1) generazione 10000 chiamanti.
2) assegnazione valori da 0 a 1 tra i chiamanti, (col metodo attuale che però è sbagliato ed è proprio quello che vorrei cambiare) quindi user1 avrà probabilità circa 0.00005 e user10000 avrà probabilità 1.0000
3) scelta random double tra 0 e 1. il valore random corrisponde ad un utente tra i 10000.
4) generazione chiamata (una semplice stringa) assegnata all'utente scelto sopra.

il mio è un discorso forse + teorico che pratico, ma vorrei trovare un modo per far rispettare ai miei 10000 chiamanti i limiti imposti e che fossero distribuiti uniformemente tra questi limiti.