0
int[] r = new int[1000]; 

ExponentialDistribution exp = new ExponentialDistribution(4.0); 

for(int i = 1; i <r.length; i++){ 
    r[i] = (int)exp.sample() + 1 + r[i-1]; 
} 

Le code ci-dessus remplit array [r] de r [0] = 0 à r [999] = 4527. Ceci est le résultat d'une exécution aléatoire . Si r.length est augmenté à 2000, le dernier élément r [1999] augmente de 8963. J'essaye de trouver la solution pour remplir le tableau [r] dans la gamme 0 - 5000. Même si r.length est augmenté, le tableau devrait Dans ce cas, si r [999] < = 5000, alors r [1999] devrait également être < = 5000.Remplissage d'un tableau avec des nombres aléatoires dans une plage spécifique en utilisant une distribution exponentielle

Dites, r.length représente le nombre total. d'événements et chaque élément de tableau r représente l'heure à laquelle l'événement se produit. Le temps total est de 5000 unités. Le motif est que le premier événement se produit à l'instant 0 et dure à l'instant < = 5000 même si r.length est augmenté ou diminué et que le temps d'inter-événement de deux événements doit être ajusté en conséquence.

Merci beaucoup

+2

Veuillez prendre le temps de poser une question la prochaine fois –

+0

@ScaryWombat Est-ce que quelque chose n'est pas compréhensible? –

+0

vous ne posez pas vraiment de question. Pour l'enregistrement d'où vient la classe 'ExponentialDistribution'? Une solution simple est si le nombre ne répond pas à vos besoins, alors ne l'utilisez pas, cherchez un autre numéro. Aussi, si vous ajoutez «i» (l'index) alors que l'indice augmente, le nombre –

Répondre

0

Je pense que ce que vous demandez est: remplir un tableau d'une longueur arbitraire avec des chiffres représentant le moment où un événement se produit. L'heure du dernier événement doit être inférieure à un montant donné.

Si vous simulez vraiment des événements qui arrivent, cela n'a pas beaucoup de sens. Voir https://en.wikipedia.org/wiki/Arrival_theorem pour beaucoup de détails sur pourquoi pas. Mais, en résumé, vous devez normalement décider à quelle fréquence les événements se produisent (en moyenne) et combien d'événements vous voulez dans la liste. Pour obtenir une distribution réaliste qui arrive à avoir un nombre donné d'événements se terminant dans un temps donné, vous devrez probablement exécuter la génération sans limite, puis réduire tous les temps de l'événement. Mais honnêtement, je ne suis pas sûr de ce que le point de ce serait.

Sinon, si vous voulez juste un ensemble de nombres entre deux gammes qui sont classées par ordre croissant alors c'est assez facile:

int[] events = random.ints(count, min, max).sorted().toArray(); 

Ce ne serait pas une simulation réaliste d'une distribution de poisson, mais sans plus d'informations à propos de ce que vous essayez d'atteindre (et pourquoi vous pensez qu'une distribution exponentielle est requise), alors il est difficile de donner des conseils plus spécifiques.