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

📄 ns model.cpp

📁 用于交通流研究的程序
💻 CPP
字号:
// NS model.cpp 
#include "stdafx.h"
#include<iostream>
#include<stdlib.h>
#include <time.h>
using namespace std;
int x[50000],i,v[50000],gap[50000],V,x1[50000],v1[50000],a[50000],b[50000],sum=0;
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,c[50000],q;
	float p1;
	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 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;
	srand( (unsigned)time( NULL ) );
	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;
	}
	for(i=0;i<L;i++)
	{
		if(c[i]==1)
		{
			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;
			//cout<<"gap["<<i<<"]="<<gap[i]<<" ";
		}
		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];         
		}
		for(j=0;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(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 + -