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

📄 the mixed traffic flow(ns and fi).cpp

📁 用于交通流研究的程序
💻 CPP
字号:
//the mixed traffic flow (NS and FI):
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
#include <time.h>
#using <mscorlib.dll>
using namespace std;
using namespace System;
int x[2000],i,v[2000],gap[2000],V_NS_max,V_FI_max,x1[2000],v1[2000],a[2000],b[2000],sum=0;
float p_NS,p_FI;
int rule_NS(int l,int m,int V_max,float p_noise);
int rule_FI(int l,int m,int V_max,float p_noise);
int Max(int a,int b);
int Min(int d,int e);

int _tmain(int argc, _TCHAR* argv[])
{
	int L,sum=0,num=0,j,flg,time_steps,c[2000],c_temporary[2000],x1[2000],q,r,R;
	double p1,f,p_NS,p_FI;
	cout<<"Please enter the number of sites L:          "<<endl;
	cin>>L;
	cout<<"Please enter the density of cars per site p1:          "<<endl;
	cin>>p1;
	cout<<"Please enter the maximum of velocity of NS vehicle V_NS_max:          "<<endl;
	cin>>V_NS_max;
	cout<<"Please enter the maximum of velocity of FI vehicle V_FI_max:          "<<endl;
	cin>>V_FI_max;
	cout<<"Please enter the stochastic braking probability of NS p_NS:          "<<endl;
	cin>>p_NS;
	cout<<"Please enter the stochastic braking probability of FI p_PI:          "<<endl;
	cin>>p_FI;
	cout<<"Please enter the time_steps:          "<<endl;
	cin>>time_steps;
	cout<<"Please enter f:          "<<endl;
	cin>>f;
	srand( (unsigned)time( NULL ) );	
	for(i=1;i<=L;i++)//产生初始构型
	{
		c[i]=0;		
	}
	for(i=0;i<Math::Round(L*p1*f);i++)
	{
		q=int((float)rand()/(float)RAND_MAX*(L-1)+1);
		if(c[q]==0)
			c[q]=3;
		else
			i=i-1;
	}
	for(i=0;i<Math::Round(L*p1*(1-f));i++)
	{
		q=int((float)rand()/(float)RAND_MAX*(L-1)+1);
		if(c[q]==0)
			c[q]=5;
		else
			i=i-1;
	}
	sum=0;
	for(i=1;i<=L;i++)//输出初始构型
	{
		if(c[i]!=0)
		{
			sum=sum+1;
			x[sum]=i;
			v[sum]=0;
			cout<<v[sum];			
		}
		else
			cout<<".";
	}	
	cout<<endl;	

	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<=L;i++)
		{
			c_temporary[i]=c[i];
			c[i]=0;
		}
		for(i=1;i<=sum;i++)
		{
			if(c_temporary[x[i]]==3)
			{
				rule_NS(b[i],gap[i],V_NS_max,p_NS);
				if((x[i]+v[i])>L)			
					x[i]=x[i]+v[i]-L; 
				else 
					x[i]=x[i]+v[i];
				c[x[i]]=3;    
			}
			else
			{
				rule_FI(b[i],gap[i],V_FI_max,p_FI);
				if((x[i]+v[i])>L)			
					x[i]=x[i]+v[i]-L;               
				else 
					x[i]=x[i]+v[i];
				c[x[i]]=5; 
			}
		}		
		for(j=1;j<=L;j++)
		{
			flg=0;
			for(i=1;i<=sum;i++)
			{
				if(j==x[i])
				{					
					cout<<v[i];					
					flg=1;
				}
			}
			if(flg==0)
				cout<<".";

		}
		cout<<endl;

	}

	return 0;
}
int rule_NS(int l,int m,int V_max,float p_noise)//p_noise刹车概率
{	
	l=Min((l+1),V_max);	
	l=Min(l,m);
	if((float)(rand())/(float)(RAND_MAX)<p_noise)
		l=Max((l-1),0);
	v[i]=l;
	return v[i];
}
int rule_FI(int l,int m,int V_max,float p_noise)
{
	if(m>=V_max)
	{
		l=V_max;
		if((float)(rand())/(float)(RAND_MAX)<p_noise)
			l=Max((l-1),0);
	}
	else
		l=m;
	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 + -