2014美赛A题元胞数据模型仿真matlab源程序.docx
D14*4UpdtaCoHSpcoYithVhiclo!nfo.b:匚4赖刘bziiCi*<tWi2rmJIUr.9imUCpUIali3qwa自“ilfvVtol«t<tf««hiCr7YhiQV«kT»£<Sj.U>itrirUSpM*itbVUUUf;y.“S70XgnT>HC*nTr<ffieSilu>M“Pj"a.TJi>0Ueh.Ufr<>l£«llSy»c«litM«vr«ttm主函数function=main_tca()%基础变量声明%基本仿真信息(或以配置文件方式直接获得)%VolumeSimTimeTimeStep1.aneNumCeIINumVMAX=GetBasicInfoO;%生成元胞空间%CellSpace_currentCellSpace_nextstep=GenerateCellSpace(1.aneNum,CeIINum);%生成车辆空间%VehicIeSpace=GeneratevehicleSpace(VoIume);%开始仿真%CellSpace-nextstepzTraffiCSimUIating(SimTime,TimeStep,CellSpace_current,VehicleSpace,VMAX);%展示结果ResuItsPIottingO;%endfunctionCellSpace_nextstepVehicIeSpace=TrafficSimulating(SimTimeJimeStepzCellSpace-currentzCellSpace-nextstep,VehicIeSpacezVMAX)%TRAFFICSIMU1.ATINGSummaryofthisfunctiongoeshere%仿真程序主体CeIISpaceJnit=CellSpace_nextstep;%读取信号配时数据SignaICycIeMat=load(,SignalCyclelnfo.ini');sCycle=SignalCydeMaM1);%周期长度SGreenTime=SignaICydeMaU2);%绿灯时长SRedTime=SignalCydeMat(3);%红灯时长%是否加载换道模型1.aneChangingModeIINIMat=IoacIC1.aneChangingModeInfo.ini');Use1.aneChangingModeIFIag=1.aneChangingModeIINIMat(I);%时间步长和时长必须满足整除关系foriStep=IrTimeStepiSimTime%判断信号配时tCurrentMod=mod(iStep,sCycle);iftCurrentMod<=SGreenTimeSignalFlag=0;elseSignalFlag=1;end;%搜寻元胞上存在的车辆,获得每个元胞的车辆占用情况,以及占用车辆的编号TakenMatTakenCarHeadMatTakenCarIDMatSearchCellSpaceForTaken(CellSpace_current);%计算每个车辆的更新信息CellSpace_nextstepVehicIeSpaceCountingNextStepVehicleState(CellSpace-currentzCellSpace-nextstepzVehicleSpacezTakenMatzTakenCarIDMatzVMAXzSignalFlag,Use1.aneChangingModeIFIag);%判断是否发新车,并计算新车的更新信息%更新元胞空间CellSpace_nextstepVehicIeSpaceAddingNeWCarSToEntry(CellSpace_current,CeIISPaCjneXtSteP,VehicIeSpace);%统计相关信息%保持数据SavingDataAsFiles(CellSpace-currentzVehicleSpace,TakenMatJakenCarHeadMatJakenCarIDMat);%绘制图像DrawingCeIISpace(TakenMat);%进入下一轮循环CellSpace_current=CellSpace_nextstep;CellSpace_nextstep=CeIISpaceJnit;end;endfunctioniStaken=lsCellTaken(CellSpaceJaneid,StartTag,endTag)%从StartTag开始到endTag结束的这些元胞是否都是空闲,有一个及以上被占用返回1fori=startTag:l:endTagifGetcellTakenstate(CelISpaceJaneidJ)=1istaken=1;return;end;end;istaken=0;%这些元胞全部空闲endfunctionResuItsPIottingO%读取配置信息SavingSettingsMat=load(,OutputDataSettings.ini');%输出数据子文件夹subfoldername=SavingSettingsMat(I);%Ianenodatafile=num2str(subfoldername),车辆占用车道数据.txt;positiondatafile=num2str(subfoldername)、车辆月f处位置.txt'speeddatafile=num2str(subfoldername),车辆每一时亥IJ速度.txt'cartypeinfofile=num2str(subfoldername),车辆基本信息.txt'%1.aneTakenDMat=Importdata(IanenodatafiIe);VehPositionDMat=importdata(positiondatafile);SpeedDMat=importdata(speeddatafile);VehicIeInfoMat=Ioad(CartypeinfofiIe);%StepNum,carNum=Size(SpeedDMat);VolumeSimTimeTimeStep1.aneNumCeIINumVMAX=GetBasiclnfo();%travelTime=ZerOS(I,carNum);%每辆车的旅行时间fori=IxarNumtravelTime(lJ)=length(find(SpeedDMat(r,i)>=O);end;%meanSpeed=ZeroS(StePNUm,1);%平均速度meanQueue=ZerOS(StePNUm,1);%平均排队长度VoIDensity=ZeroS(StePNUm,1);%密度forj=IistepNumexistedCarlDs=find(SpeedDMat(j)>=O);volDensity(jzl)=sum(GetVehicle1.ength(existedCarlDs)/(1.aneNum*CeIINum);meanQueue(jxl)=sum(GetVehicle1.ength(find(SpeedDMat(j)<=l)1.aneNum;meanSpeed(jzl)=mean(SpeedDMat(j,SpeedDMat(j)>=O);end;%end