您好我正在尝试模拟一些作业调度算法,我正在尝试为请求创建泊松到达函数。 我在维基百科上找到泊松到达的算法,我实现了它并运行它但我总是得到相同的结果(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 :(得分:4)
您的问题有点不清楚,但我认为您的问题是每次运行程序时都会遇到不同的随机数。请注意,每次运行程序时,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中有一个专用的'随机'标题,我还没有使用它,所以我不能对它做出很多评论,但是你可以在这里阅读它