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

📄 the fundamental diagram of ns.cpp

📁 用于交通流研究的程序
💻 CPP
字号:
// the fundamental diagram of NS.cpp 
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
#include <time.h>
using namespace std;
int	x[2000],i,v[2000],gap[2000],V,x1[2000],v1[2000],a[2000],b[2000],sum;
float p2;
int	rule(int l,int m);
int	Max(int	a,int b);
int	Min(int	d,int e);
int	_tmain(int argc, _TCHAR* argv[])
{
	int	L,j,flg,time_steps,t,V1,N,h,c[2000],q;
	double p1=0;
	float V2,V3=0,V4,V_total,V_average,J;
	cout<<"Please enter the number of sites L:			"<<endl;
	cin>>L;
	cout<<"Please enter the maximum of velocity V:			"<<endl;
	cin>>V;
	cout<<"Please enter the stochastic braking probability p2:			"<<endl;
	cin>>p2;
	cout<<"Please enter the time_steps:			 "<<endl;
	cin>>time_steps;
	cout<<"Please enter t:			"<<endl;
	cin>>t;
	cout<<"Please enter the number of samples N:		  "<<endl;
	cin>>N;
	srand( (unsigned)time( NULL	) );
	while(p1<=1.01)
	{
		cout<<"p1="<<p1<<"  ";
		V_total=0;
		for(h=1;h<=N;h++)
		{
			for(i=0;i<L;i++)
			{
				c[i]=0;		
			}
			for(i=0;i<int(L*p1);i++)
			{
				q=int(rand()*(L-1)/RAND_MAX);
				if(c[q]==0)
					c[q]=1;
				else
					i=i-1;
			}
			sum=0;
			for(i=0;i<L;i++)
			{
				if(c[i]==1)
				{
					sum=sum+1;
					x[sum]=i;
				    v[sum]=0;
				}
				
			}	
			V3=0;
			for(int	k=1;k<=time_steps;k++)
			{


				for(i=1;i<=sum;i++)
				{
					a[i]=x[i];
					b[i]=v[i];
				}
				for(i=1;i<=sum;i++)
				{
					if(i==sum)
						gap[i]=a[1]-a[i]-1;
					else
						gap[i]=a[i+1]-a[i]-1;
					if(gap[i]<0)
						gap[i]=gap[i]+L;
				}
				for(i=1;i<=sum;i++)
				{
					rule(b[i],gap[i]);
				}
				for(i=1;i<=sum;i++)
				{
					if((x[i]+v[i])>L)
						x[i]=x[i]+v[i]-L;
					else 
						x[i]=x[i]+v[i];
				}

				if(k>=t)
				{
					V1=0;
					for(i=1;i<=sum;i++)
						V1=V1+v[i];
					V2=(float)(V1)/(float)(sum);
					V3=V3+V2;
				}
			}

			V4=V3/(float)(time_steps-t+1);
			V_total=V_total+V4;
		}
		V_average=V_total/(float)(N);
		cout<<"V_average="<<V_average<<"  ";
		J=V_average*p1;
		cout<<"J="<<J<<endl;
		FILE *fp;
		if((fp=fopen("E:\\file.dat","a+"))==NULL)
		{
			cout<<"Can not open this file."<<endl;
			exit(0);
		}
		fprintf(fp,"%f,%f,%f\n",p1,V_average,J);
		fclose(fp);

		p1=p1+0.01;
	}
	return 0;		
}
int	rule(int l,int m)
{
	//if(l<V&&m>(l+1))
	//l=l+1;
	l=Min((l+1),V);
	//if((m+1)<l)
	//l=gap[i];	
	l=Min(l,m);
	if((float)(rand())/(float)(RAND_MAX)<p2)
		l=Max((l-1),0);
	v[i]=l;
	return v[i];
}
int	Max(int	a,int b)
{
	int	c;
	c=a>b?a:b;
	return c;
}
int	Min(int	d,int e)
{
	int	f;
	f=d<e?d:e;
	return f;
}





⌨️ 快捷键说明

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