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

📄 blocking.cpp

📁 此程序是在假定达到率一定的情况下
💻 CPP
字号:
/*******************************************************
*                      阻塞率仿真作业                  *
*                                                      *
*                      李昆明 06041052                 *
*                                                      *
*      ( 输出的数据用MATLAB调用即可得出阻塞率曲线 )  *
*                                                      *
********************************************************/
#include <iostream>
#include <cmath>
#include <fstream>
const int Count_Usuer=1000;	//定义用户个数
const int Count_Server=5;  //定义每服务器的个数


/*******************************************************
*             服从指数分布的随机数产生函数             *
*                                                      *
********************************************************/

double Generate_Rand(double para)
{
	double temp_u=0,Generate_Rand=0;
	while((temp_u<=0)||(temp_u>1))
	{
	temp_u=rand()/33211.0;
	}
	Generate_Rand=-para*log(temp_u);
	return Generate_Rand;
}


void main()
{
	
    double Blocking_Probability[500],namda=1.0,u=0.4; 
	//定义存放阻塞率的数组,已经到达率和服务率
	double finish_t[Count_Usuer]={0.0},arrival_t[Count_Usuer]={0.0},server[Count_Usuer],usuer[Count_Usuer],server1[Count_Server];
	//定义存放结束时刻,达到时刻,服务时间,间隔时间的数组
	int i,b,external,inner,NOB=0;
	//external外循环次数inner内循环次数

	for(external=0;external<500;external++)
	{	
		
		NOB=0;                              //服务次数,每一次外循环,清零。

/*************产生服从指数分布的随机数*******************/

		for(i=0;i<Count_Usuer;i++)
		{
			usuer[i]=Generate_Rand(1/namda);//产生时间间隔
			server[i]=Generate_Rand(u);     //产生服务时间
		}

/*******************建立时间轴****************************/

		for(i=0;i<Count_Usuer;i++)
		{	
		    arrival_t[i+1]=arrival_t[i]+usuer[i+1]; //用户的到达时刻
			finish_t[i]=arrival_t[i]+server[i];     //用户的结束时刻
		}

	
		for(i=0;i<5;i++)
		{		
			server1[i]=finish_t[i];                
		}

/*******************计算1000个用户的阻塞率*****************/

		for(inner=Count_Server;inner<Count_Usuer;inner++)
		{	
		    	for(b=0;b<Count_Server;b++)
			{	
				if(arrival_t[inner]>server1[b])	//达到时刻与结束时刻相比较,如果大于则进入服务器,未被阻塞
				{								
				    NOB++;	                    //统计1000个用户中的未被阻塞次数	
					server1[b]=finish_t[inner];	
					break;					
				}	
			}
		}
        
		
		NOB=Count_Usuer-NOB;	                //计算出阻塞次数				
		Blocking_Probability[external]=(double)NOB/Count_Usuer;	//计算阻塞率	
		std::cout<<Blocking_Probability[external]<<"  ";
		namda++;                                //改变达到率
	}

/**************************数据的输出***********************/

   std::ofstream out_file("d.txt",std::ios::trunc);//文件的输出:d.txt
   if(out_file.fail())
	   return;
	  for( i=0;i<500;i++)
	  {
		  if(i==0)
		  out_file<<Blocking_Probability[0];
		  out_file<<" "<<Blocking_Probability[i];
	  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -