实验报告
课程名称 道路交通系统仿真
学生姓名
学 号
专业班级
指导教师
院系名称 交通运输工程学院
2012 年 X 月 X 日
实验 机数生成程序
实验求
产生1~1000机数数约256
二 实验环境
工具Visual C++ 60程序类型 Win32 Console Application
三 实验原理
根公式x[i]a*x[i1]mod(m)根需范围值确定am值实验中需1~1000机数选择a35m1024周期(m4)256产生2561~1024间机数根需舍弃1000机数原理中间变量连接产生数需数组通中间变量断循环产生1000机数时继续中间变量断循环放入数组舍弃数字终需1~1000机数数组输出数组中数计数数样完成产生机数目
四 实验步骤
图 机数程序流程图
图二 机数程序运行结果
程序开始先定初始值(1~1000奇数)根定公式计算中间值temp判断temp值否10001000temp值赋数组x[i]循环执行该命令直x[i]x[0]结束程序输出数组值数组数组值初始值改编改变初始值决定数组值变化
五. 分析总结
图二机数程序运行结果出该程序运行结果数学模型期达效果致程序运行正确伪机数周期2561000机数程序结果显示249数学模型周期致
附录
#include
void main(void)
{
int i1j0temp0
int a35m1024
int x[256]
int k
printf(输入达服务时间机初始值:)
scanf(d&x[0])
printf(\n)
while(i)
{ tempa*x[i1]m
while(temp>1000)
{
tempa*tempm
}
if(tempx[0])
{
x[i]temp
printf(5dx[i])
i++
}
else {ji1i0}
}
printf(\n\njd\n\nj)}
实验二 单服务台排队系统仿真
实验求
单服务台达顾客进行服务顾客单路排队机分配顾客达时间间隔服务时间确定顾客达时刻服务开始结束时刻计算服务台空闲时间顾客排队等时间通程序实现单服务台排队系统仿真根程序运行结果计算重结果属性值
二 实验环境
工具Visual C++ 60程序类型 Win32 Console Application
三 实验原理
程序设计中顾客达时间间隔time_interval服务时间service_time机数确定顾客达时间间隔通机数分布定义分布区间确定达间隔时间服务时间先通机数程序产生组机数然通机数区间定义确定机服务时间两参数确定通数学方法确定参数达时间间隔服务时间程序中重两参数
四 实验步骤
图三 单服务台仿真流程图
图四 机时间间隔
图五 机服务时间
图六 单服务台排队系统顾客服务时刻表
程序先通机数方法分配排队顾客机达时间间隔机服务时间机达时间间隔1~1000间机数进行等概率分配1~8分钟达间隔机服务时间1~1000机数分配1~6分钟服务时间分配时段根概率01020350201005分配通种方法1~1000机数分配时间段顾客机达时间间隔机服务时间
两基参数通数学方法联系参数运程序循环程终输出单服务台顾客服务时刻表
五 分析总结
通程序运行结果校正程序输出结果正确程序运行正确10顾客例运行程序计算出该程序设定条件属性值:
顾客均等时间07 min
服务员均服务时间34 min
服务员均空闲时间12 min
六 附录
#include
int imax(int int)
void main(void)
{
int time_interval[256]
int reach_point[256]
int service_time[256]
int service_end_point[256]
int wait_time[256]
int free_time[256]
int x[256]
int y[256]
int nmax
int i1temp0
int a35m1024
*输入顾客数*
printf(输入顾客数n )
scanf(d&n)
*产生达时间机间隔*
printf(\n输入达时间间隔机初始值(1~1000) )
scanf(d&x[0])
printf(\n)
while(i>1)
{
tempa*x[i1]m
while(temp>1000)
{
tempa*tempm
}
if(tempx[0])
{
x[i]temp
i++
}
else {i0}
}
for(i1i
if(x[i]>1&&x[i]<125)
time_interval[i]1
if(x[i]>126&&x[i]<250)
time_interval[i]2
if(x[i]>251&&x[i]<375)
time_interval[i]3
if(x[i]>376&&x[i]<500)
time_interval[i]4
if(x[i]>501&&x[i]<625)
time_interval[i]5
if(x[i]>626&&x[i]<750)
time_interval[i]6
if(x[i]>751&&x[i]<875)
time_interval[i]7
if(x[i]>876&&x[i]<1000)
time_interval[i]8
}
i1
printf(第1位顾客达时间间隔 0)
for(i2i
printf(\n第d位顾客机达时间间隔位 ditime_interval[i])
}
printf(\n\n)
*产生机服务时间*
i1temp0
a35m1024
printf(\n输入达服务时间机初始值(1~1000) )
scanf(d&y[0])
printf(\n)
while(i>1)
{ tempa*y[i1]m
while(temp>1000)
{
tempa*tempm
}
if(tempy[0])
{
y[i]temp
i++
}
else {i0}
}
for(i1i
if(y[i]>1&&y[i]<100)
service_time[i]1
if(y[i]>101&&y[i]<300)
service_time[i]2
if(y[i]>301&&y[i]<650)
service_time[i]3
if(y[i]>651&&y[i]<850)
service_time[i]4
if(y[i]>851&&y[i]<950)
service_time[i]5
if(y[i]>951&&y[i]<1000)
service_time[i]6
}
for(i1i
printf(\n第d位顾客机服务时间:d iservice_time[i])
}
printf(\n\n\n)
*程序排队序列开始第单独考虑面连续分配间隔时间*
time_interval[0]0
reach_point[0]0
service_time[0]0
service_end_point[0]0
wait_time[0]0
free_time[0]0
time_interval[1]0
reach_point[1]0
wait_time[1]0
free_time[1]0
service_end_point[1]reach_point[1]+service_time[1]
printf(顾客号1)
printf( 达时间间隔dtime_interval[1])
printf( 达时刻dreach_point[1])
printf( 服务时间dservice_time[1])
printf( 服务结束时刻dservice_end_point[1])
printf( 等时间dwait_time[1])
printf( 空闲时间dfree_time[1])
for(i2i
reach_point[i]reach_point[i1]+time_interval[i]
maximax(service_end_point[i1]reach_point[i])
service_end_point[i]service_time[i]+max
if(service_end_point[i1]reach_point[i]>0)
free_time[i]0wait_time[i]service_end_point[i1]reach_point[i]
if(service_end_point[i1]reach_point[i]<0)
wait_time[i]0free_time[i]reach_point[i]service_end_point[i1]
printf(\n顾客号di)
printf( 达时间间隔dtime_interval[i])
printf( 达时刻dreach_point[i])
printf( 服务时间dservice_time[i])
printf( 服务结束时刻dservice_end_point[i])
printf( 等时间dwait_time[i])
printf( 空闲时间dfree_time[i])
}
printf(\n)
}
int imax(int x int y)
{
int z
if(x>y)
zx
else zy
return(z)
}
实验三 单车道车辆驰仿真
实验求
运编程方法实现车辆驰仿真三种类型:
1 前车匀速行驶车运行状况
2前车加速行驶车运行状况
3前车减速行驶停止车运行状况
二 实验环境
Visual C++60程序类型:MFC Application
三 实验原理
单车道车辆驰仿真实验描述三种程:前车匀速行驶时车前车间初始时段距离车判断间距通加速减速前车达安全距离保持前车相速度行驶前车加速行驶时车先初始速度通反应时间前车加速度追赶前车车前车达安全距离时车前车相加速度行驶前车减速时车先初始速度反应时间前车减速度减速间距安全距离时车保持前车相减速度行驶直停车重参数车辆位置前车初始速度前车加速度车司机反应时间模拟步长等
四 实验步骤
图七 驰仿真流程图 图八 前车匀速时车驰状态
图九 前车加速时车驰状态 图十 前车减速事车驰状态
五 分析总结
程序设计时图形边界进行设置运程序命令实现循环边界样更完整该程序设计条件汽车运行状态通循环边界完整观测前车加速行驶时车先加速追前车前车保持相加速度程
六 附录
void CFollowingSimulationViewOnDraw(CDC* pDC)
{
CFollowingSimulationDoc* pDoc GetDocument()
ASSERT_VALID(pDoc)
if (pDoc)
return
CRect rect
GetClientRect(&rect)
CBitmap bitmap_1bitmap_2
bitmap_1LoadBitmap(IDB_BITMAP_CAR)CBitmap实数结构
bitmap_2LoadBitmap(IDB_BITMAP_CAR2)
BITMAP bmp
bitmap_1GetBitmap(&bmp)样素材
CDC dcCompatible_1dcCompatible_2
dcCompatible_1CreateCompatibleDC(pDC)
dcCompatible_1SelectObject(&bitmap_1)确定dcCompatible_1显示表面位图作图背景位图进行画图
dcCompatible_2CreateCompatibleDC(pDC)
dcCompatible_2SelectObject(&bitmap_2)
if(changes0)
{
if(pos_2
pDC>StretchBlt(pos_1100bmpbmWidth4bmpbmHeight4&dcCompatible_100bmpbmWidthbmpbmHeightSRCCOPY)
pDC>StretchBlt(pos_2100bmpbmWidth4bmpbmHeight4&dcCompatible_200bmpbmWidthbmpbmHeightSRCCOPY)
汽车走距离x轴起点
}
else {前车移动行车行驶完width()pos_2距离移动行
KillTimer(1)
pos_20
distance()
pos_1inidis两车初始距离
Velocity()计算deltaX_1deltaX_2值两车初始速度
Accelerated_Velocity_1()前车加速度获Av_1
changes+1
step0
Sleep(2000)
SetTimer(250NULL)
停车
}
}
if(changes1)
{
if(pos_2
pDC>StretchBlt(pos_1200bmpbmWidth4bmpbmHeight4&dcCompatible_100bmpbmWidthbmpbmHeightSRCCOPY)
pDC>StretchBlt(pos_2200bmpbmWidth4bmpbmHeight4&dcCompatible_200bmpbmWidthbmpbmHeightSRCCOPY)
汽车走距离x轴起点
}
else {前车移动行车行驶完width()pos_2距离移动行
KillTimer(2)
pos_20
distance()
pos_1inidis两车初始距离
Velocity()计算deltaX_1deltaX_2值两车初始速度
deltaX_130deltaX_220
Accelerated_Velocity_1()前车加速度获Av_1
changes+1
step0
Sleep(2000)
SetTimer(350NULL)
停车
}
}
if(changes2)
{
if(pos_2
{
pDC>StretchBlt(pos_1300bmpbmWidth4bmpbmHeight4&dcCompatible_100bmpbmWidthbmpbmHeightSRCCOPY)
pDC>StretchBlt(pos_2300bmpbmWidth4bmpbmHeight4&dcCompatible_200bmpbmWidthbmpbmHeightSRCCOPY)
汽车走距离x轴起点
}
else {
KillTimer(3)
pDC>StretchBlt(pos_1300bmpbmWidth4bmpbmHeight4&dcCompatible_100bmpbmWidthbmpbmHeightSRCCOPY)
pDC>StretchBlt(pos_2300bmpbmWidth4bmpbmHeight4&dcCompatible_200bmpbmWidthbmpbmHeightSRCCOPY)
bitmap_1DeleteObject()
bitmap_2DeleteObject()
dcCompatible_1DeleteDC()
dcCompatible_2DeleteDC()
}
}
void CFollowingSimulationViewOnTimer(UINT_PTR nIDEvent)
{
TODO Add your message handler code here andor call default
step+1
int temp0存储步长
if(changes0)说明刚开始第时间段两车均匀速行驶deltaX_1>deltaX_2需车加速完成车距保持目
{
Av_2(30*(deltaX_1deltaX_2)+realdis200)465计算次
pos_1+deltaX_1
pos_2+deltaX_2
if(step>20)通if语句判断两车实时距离没200左右话停止
{
if(abs(pos_1pos_2)>200)
{
deltaX_2+1
pos_2+deltaX_2
}
else {deltaX_2deltaX_1}
}
}
if(changes1)
{
deltaX_1+1前车加速度
pos_1+deltaX_1
if(step<15)
pos_2+deltaX_2
if(step>15)
{
if(abs(pos_1pos_2)>200)
{
deltaX_2+3
pos_2+deltaX_2
}
else {deltaX_2deltaX_1}
}
}
if(changes2)
{
deltaX_11前车加速度
pos_1+deltaX_1
if(step<20)
pos_2+deltaX_2
if(step>20)
{
if(abs(pos_1pos_2)>200)
{
deltaX_22
pos_2+deltaX_2
}
else {deltaX_2deltaX_1}
}
}
Invalidate(true)
CViewOnTimer(nIDEvent)
}
合肥工业学
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档