📄 bp.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
double nexp(double lamda)
{
double y,x;
y=1.0*rand()/(RAND_MAX+1.0);
x=-lamda*log(y);
return x;
}
void main()
{
int i,j,freeserver,numberofblocking,N;
double lamda;
double blockingPro,Tarrival[10001],Tserve[10001],Tleave[10001];
FILE *fp;
fp=fopen("blockingPro.txt","w");
N=5000;
for(lamda=0.01;lamda<=1;lamda=lamda+0.01)
{
srand((unsigned)time(NULL));
freeserver=20; //服务窗口数
numberofblocking=0; //初始化阻塞的客户数
Tarrival[1]=0; //第一个客户到达的时间
for(i=2;i<N+1;i++)
{
Tarrival[i]=nexp(1/lamda);
Tarrival[i]+=Tarrival[i-1]; //第i个客户到达的时间
}
srand((unsigned)time(NULL));
for(i=1;i<N+1;i++)
{
Tserve[i]=nexp(180); //每个客户的服务时间,服从指数分布
Tleave[i]=Tarrival[i]+Tserve[i]; //第i个客户离开的时间
}
freeserver=0;
for(i=21;i<N+1;i++)
{
for(j=1;j<i;j++) //计算第20个以后的客户到达时,已经释放的窗口数
{
if(Tleave[j]!=0.0)
{
if(Tarrival[i]>Tleave[j])
{freeserver++; Tleave[j]=0.0;}
}
}
if(freeserver>=1) freeserver--; //没有阻塞,占用一个窗口
else {numberofblocking++;Tleave[i]=0.0;} //若被阻塞,阻塞数加1
}
blockingPro=(double)numberofblocking/N; //计算阻塞率
printf("%d %f\n",numberofblocking,blockingPro);
fprintf(fp," %f",blockingPro);
}
fclose(fp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -