bp.cpp

来自「计算没有排队时候的阻塞率」· C++ 代码 · 共 60 行

CPP
60
字号
#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 + =
减小字号Ctrl + -
显示快捷键?