⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bp.cpp

📁 计算没有排队时候的阻塞率
💻 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 + -