QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 5661|回复: 12
打印 上一主题 下一主题

2014相关MATLAB程序(基于NS模型)

[复制链接]
字体大小: 正常 放大

19

主题

8

听众

530

积分

升级  76.67%

  • TA的每日心情
    奋斗
    2014-4-11 20:50
  • 签到天数: 60 天

    [LV.6]常住居民II

    自我介绍
    家伙

    群组数学建摸协会

    群组2014美赛MCMA题备战群

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2014-2-7 21:06 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    主程序:NaSch_3.m程序代码
    % 单车道 最大速度3个元胞 开口边界条件 加速 减速 随机慢化
    clf
    clear all
    %build the GUI
    %define the plot button
    plotbutton=uicontrol('style','pushbutton',...
    'string','Run', ...
    'fontsize',12, ...
    'position',[100,400,50,20], ...
    'callback', 'run=1;');
    %define the stop button
    erasebutton=uicontrol('style','pushbutton',...
    'string','Stop', ...
    'fontsize',12, ...
    'position',[200,400,50,20], ...
    'callback','freeze=1;');
    %define the Quit button
    quitbutton=uicontrol('style','pushbutton',...
    'string','Quit', ...
    'fontsize',12, ...
    'position',[300,400,50,20], ...
    'callback','stop=1;close;');
    number = uicontrol('style','text', ...
    'string','1', ...
    'fontsize',12, ...
    'position',[20,400,50,20]);
    %CA setup
    n=100; %数据初始化
    z=zeros(1,n); %元胞个数
    z=roadstart(z,5); %道路状态初始化,路段上随机分布5
    cells=z;
    vmax=3; %最大速度
    v=speedstart(cells,vmax); %速度初始化
    x=1; %记录速度和车辆位置
    memor_cells=zeros(3600,n);
    memor_v=zeros(3600,n);
    imh=imshow(cells); %初始化图像白色有车,黑色空元胞
    set(imh, 'erasemode', 'none')
    axis equal
    axis tight
    stop=0; %wait for a quit button push
    run=0; %wait for a draw
    freeze=0; %wait for a freeze(冻结)
    while (stop==0)
          if(run==1)
              %边界条件处理,搜素首末车,控制进出,使用开口条件
             a=searchleadcar(cells);
             b=searchlastcar(cells);
              [cells,v]=border_control(cells,a,b,v,vmax);
             i=searchleadcar(cells); %搜索首车位置
              for j=1:i
                   if i-j+1==n
                     [z,v]=leadcarupdate(z,v);
                       continue;
                   else
                       %======================================加速、减速、随机慢化
                       if cells(i-j+1)==0; %判断当前位置是否非空
                       continue;
                      else v(i-j+1)=min(v(i-j+1)+1,vmax); %加速
                          %=================================减速
                            k=searchfrontcar((i-j+1),cells); %搜素前方首个非空元胞位置
                            if k==0; %确定于前车之间的元胞数
                               d=n-(i-j+1);
                            else d=k-(i-j+1)-1;
                            end
                            v(i-j+1)=min(v(i-j+1),d);
                            %==============================%减速
                           %随机慢化
                           v(i-j+1)=randslow(v(i-j+1));
                            new_v=v(i-j+1);                       
                          %======================================加速、减速、随机慢化
                            %更新车辆位置
                           z(i-j+1)=0;                    
                           z(i-j+1+new_v)=1;
                         %更新速度
                         v(i-j+1)=0;
                         v(i-j+1+new_v)=new_v;
                       end
                   end
              end
              cells=z;
             memor_cells(x,=cells; %记录速度和车辆位置
             memor_v(x,=v;
              x=x+1;
              set(imh,'cdata',cells) %更新图像
              %update thestep number diaplay
              pause(0.2);
             stepnumber = 1 + str2num(get(number,'string'));
             set(number,'string',num2str(stepnumber))
          end
          if (freeze==1)
             run = 0;
             freeze =0;
          end
          drawnow
    end

    ///////////////////////////////////////////////////////////////////////


    函数:border_control.m程序代码
    Function[new_matrix_cells,new_v]=border_control(matrix_cells,a,b,v,vmax)
    %边界条件,开口边界,控制车辆出入
    %出口边界,若头车在道路边界,则以一定该路0.9离去
    n=length(matrix_cells);
    if a==n
        rand('state',sum(100*clock)*rand(1));%¶¨òåËæ»úÖÖ×ó
        p_1=rand(1); %产生随机概率
        if p_1<=1 %如果随机概率小于0.9,则车辆离开路段,否则不离口
        matrix_cells(n)=0;
        v(n)=0;   
        end
    end
    %入口边界,泊松分布到达,1s内平均到达车辆数为qt1s
    if b>vmax
        t=1;
        q=0.25;
        x=1;
       p=(q*t)^x*exp(-q*t)/prod(x); %1s内有1辆车到达的概率
       rand('state',sum(100*clock)*rand(1));
        p_2=rand(1);
        if p_2<=p
          m=min(b-vmax,vmax);
          matrix_cells(m)=1;
           v(m)=m;   
        end
    end
    new_matrix_cells=matrix_cells;
    new_v=v;     

    ///////////////////////////////////////////////////////////////////////


    函数:leadcarrupdate.m程序代码
    function [new_matrix_cells,new_v]=leadcarupdate(matrix_cells,v)
    %第一辆车更新规则
    n=length(matrix_cells);
    if v(n)~=0
       matrix_cells(n)=0;
      v(n)=0;
    end
    new_matrix_cells=matrix_cells;
    new_v=v;

    ///////////////////////////////////////////////////////////////////////


    函数:randslow.m程序代码

    function [new_v]=randslow(v)
    p=0.3; %慢化概率
    rand('state',sum(100*clock)*rand(1));%&para;¨ò&aring;&Euml;&aelig;&raquo;ú&Ouml;&Ouml;×ó
    p_rand=rand; %产生随机概率
    if p_rand<=p
       v=max(v-1,0);
    end
    new_v=v;   

    ///////////////////////////////////////////////////////////////////////

    函数:roadstart.m程序代码
    function [matrix_cells_start]=roadstart(matrix_cells,n)
    %道路上的车辆初始化状态,元胞矩阵随机为01matrix_cells初始矩阵,n初始车辆数
    k=length(matrix_cells);
    z=round(k*rand(1,n));
    for i=1:n
        j=z(i);
        if j==0
          matrix_cells(j)=0;
        else
           matrix_cells(j)=1;
        end
    end
    matrix_cells_start=matrix_cells;

    ///////////////////////////////////////////////////////////////////////


    函数:searchfrontcar.m程序代码

    function [location_frontcar]=searchfrontcar(current_location,matrix_cells)
    i=length(matrix_cells);
    if current_location==i
      location_frontcar=0;
    else
        forj=current_location+1:i
           if matrix_cells(j)~=0
             location_frontcar=j;
           break;
           else
             location_frontcar=0;
           end
        end
    end

    ///////////////////////////////////////////////////////////////////////


    函数:searchlastcar.m程序代码

    function [location_lastcar]=searchlastcar(matrix_cells)
    %搜索尾车位置
    for i=1:length(matrix_cells)
        if matrix_cells(i)~=0
          location_lastcar=i;
           break;
        else %如果路上无车,则空元胞数设定为道路长度
          location_lastcar=length(matrix_cells);
        end
    end


    ///////////////////////////////////////////////////////////////////////
    函数:searchleadcar.m程序代码

    function [location_leadcar]=searchleadcar(matrix_cells)
    i=length(matrix_cells);
    for j=1:i
        if matrix_cells(i-j+1)~=0
          location_leadcar=i-j+1;
           break;
        else
          location_leadcar=0;
        end
    end
    ///////////////////////////////////////////////////////////////////////

    函数:speadstart.m程序代码
    function [v_matixcells]=speedstart(matrix_cells,vmax)
    %道路初始状态车辆速度初始化
    v_matixcells=zeros(1,length(matrix_cells));
    for i=1:length(matrix_cells)
        if matrix_cells(i)~=0
          v_matixcells(i)=round(vmax*rand(1));
        end
    end
    file:///C:/Users/ADMINI~1/AppData/Local/Temp/OICE_AB637FBD-4383-407C-BF25-A059B729D42F.0/msohtmlclip1/01/clip_image002.jpg

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏1 支持支持0 反对反对0 微信微信
    compass        

    0

    主题

    7

    听众

    34

    积分

    升级  30.53%

  • TA的每日心情
    郁闷
    2014-2-9 17:14
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    自我介绍
    我是男生
    此帖仅作者可见

    使用道具 举报

    0

    主题

    8

    听众

    25

    积分

    升级  21.05%

  • TA的每日心情
    无聊
    2014-2-11 02:55
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    自我介绍
    大学生
    此帖仅作者可见

    使用道具 举报

    poi998 实名认证       

    1

    主题

    6

    听众

    90

    积分

    升级  89.47%

  • TA的每日心情
    慵懒
    2014-2-8 04:41
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    群组哈尔滨工业大学建模团

    此帖仅作者可见

    使用道具 举报

    wang52y        

    6

    主题

    8

    听众

    319

    积分

    升级  6.33%

  • TA的每日心情

    2015-3-21 19:41
  • 签到天数: 92 天

    [LV.6]常住居民II

    自我介绍
    感谢您在百忙之中审阅我的自荐书,这对一个即将迈出校门的学子而言,将是一份莫大的鼓励。相信您在给予我一个机会的同时,您也多一份选择!即将走向社会的我怀着一颗热忱的心

    社区QQ达人

    群组2013电工杯A题讨论群组

    群组2013年电工杯B题讨论群

    群组物联网工程师培训

    此帖仅作者可见

    使用道具 举报

    1

    主题

    8

    听众

    44

    积分

    升级  41.05%

  • TA的每日心情
    开心
    2014-2-10 01:08
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    自我介绍
    你好
    此帖仅作者可见

    使用道具 举报

    冰大        

    0

    主题

    9

    听众

    16

    积分

    升级  11.58%

  • TA的每日心情
    奋斗
    2015-2-9 12:49
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    自我介绍

    社区QQ达人

    此帖仅作者可见

    使用道具 举报

    0

    主题

    8

    听众

    174

    积分

    升级  37%

  • TA的每日心情
    开心
    2015-6-7 15:14
  • 签到天数: 131 天

    [LV.7]常住居民III

    自我介绍
    哈哈

    群组2013电工杯A题讨论群组

    此帖仅作者可见

    使用道具 举报

    outarc        

    1

    主题

    8

    听众

    23

    积分

    升级  18.95%

  • TA的每日心情
    开心
    2014-8-1 09:16
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    自我介绍
    wu
    此帖仅作者可见

    使用道具 举报

    wtw        

    1

    主题

    8

    听众

    113

    积分

    升级  6.5%

  • TA的每日心情
    开心
    2014-12-4 23:08
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    自我介绍
    数学爱好者
    此帖仅作者可见

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-5-7 10:38 , Processed in 0.804298 second(s), 108 queries .

    回顶部