алгоритм — пуассоновский код прибытия в с ++ дает тот же результат

Здравствуйте, я пытаюсь смоделировать некоторые алгоритмы планирования работы, и я пытаюсь создать функцию прибытия Пуассона для запросов.
Я нашел алгоритм прибытия Пуассона в Википедии, и я его реализовал и запустил, но все время получаю одни и те же результаты (ex l = 15 -> возвращает 14, l = 1/15 возвращает 0)

#include <cmath>
#include <iostream>
#include <cstdlib>
using namespace std;
main (){
for (int i=0;i<1000;i++)
{

float l=25;
float L=exp(-l);
float k=0;
float p=1;
//begin while
do{
k=k+1;
// Generate a random number between 0 and 1
// return a uniform number in [0,1].
double u = rand() / (double)RAND_MAX;
p=p*u;
}   while (p>L);
return k-1;
}}

Это алгоритм, который я использовал для создания этого

algorithm poisson random number (Knuth):
init:
Let L ← e−λ, k ← 0 and p ← 1.
do:
k ← k + 1.
Generate uniform random number u in [0,1] and let p ← p × u.
while p > L.
return k − 1.

заранее спасибо

0

Решение

Ваш вопрос немного неясен, но я думаю, что ваша проблема в том, что вы ожидаете разных случайных чисел при каждом запуске вашей программы. Обратите внимание, что rand () будет генерировать одну и ту же последовательность случайных чисел каждый раз, когда вы запускаете вашу программу, если вы не предоставите ей какое-то начальное значение.

Стандартный способ сделать это — использовать текущее время для заполнения генератора случайных чисел, как показано ниже.

#include <iostream>
#include <ctime>
#include <cstdlib>

int main() {
srand(time(NULL));
std::cout << rand();

return 0;
}

Это будет производить разные случайные последовательности каждый раз. Если вы удалите строку srand (time (NULL)), вы получите один и тот же результат при каждом запуске программы.

Вам нужно только вызвать srand (time (NULL)) один раз в начале вашей программы.

РЕДАКТИРОВАТЬ: я просто собираюсь отредактировать свой пост, чтобы упомянуть, что в C ++ 11 есть специальный «случайный» заголовок, я еще не использовал его, поэтому я не могу комментировать это много, но вы можете прочитать об этом здесь

http://www.cplusplus.com/reference/random/

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]