• 系统仿真(五):校园时间消耗系统仿真报告


    一、仿真目标

     目标系统:每天早上第一节课,学生从宿舍到教室的时间消耗系统
     主要研究目标:给出疫情防控常态化场景下的时间开销预估和优化建议

    二、 已知条件

    1. 结合作业一可得表1中不同地点状态下的时间消耗拟合函数。
    表1 已知拟合时间数据

    在这里插入图片描述

    1. 校园地图如图1所示
      在这里插入图片描述
    图1 校园地图

    三、实现过程

      该系统目标为实现学生群体日常从宿舍到教室之间时间统筹消耗仿真系统,构建过程采用反推方法。整体流程如图2所示:
    在这里插入图片描述在这里插入图片描述

    图2 校园活动过程整体流程图

      以动态图展示整体仿真效果较为清晰,并可视为每个时间点在不同位置的人数是固定的,不同位置状态地点如表2所设。
      以7:00~10:00为时间范围,每分钟为间隔,共180分钟,设公寓五、七为初始地点,人数固定(设为2000)。单独个体经历完整过程中,到达不同地点时的时间点加1,离开的时间点减1人,设置总时间线变量Timeline(左侧1表示7:01,180表示10:00)。

    表2 不同位置或状态下的代号标识

    在这里插入图片描述

      针对时间开销预估问题以及不同性别等,将学生设定为包含id、StartTime、sex、floor、leaveTime、allSpendTime等属性的类。以起床时间为StartTime,离开不同地点时间为leaveTime,最终将allSpendTime所有数据求和取平均计算可得学生在整个流程中的平均消耗时间。
      最后将Timeline中数据依次传递给图像可展现出动态仿真图。

    四、 实验结果

      最终每个分钟时间点不同地点状态下的Timeline人数如图3所示。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    图3 取时间1~ 10,100~ 109,170~180三个时间段的人数展示为例

    在这里插入图片描述

    图4 动态可视化展示校园不同时间点人数
      图4中,绿色圆点代表五公寓、浅蓝色圆点代表七公寓、深蓝色圆点代表一食堂、黄色圆点代表超市、黑色圆点代表菜鸟驿站邮局、橘色圆点代表二食堂、红色圆点代表第一教学以及蓝色线条代表学生的路程。在这段时间内,五公寓和七公寓的人数越来越少,教学楼的人数越来也多,同时在这一段时间中,一食堂、二食堂、超市和菜鸟驿站的人数在慢慢变多然后稳定一段时间,最后变少。

      最终时间开销预估取五次平均如表3所示(单位:分钟)

    表3 随机选五次时间开销取平均

      五次取平均得每天早上第一节课,学生从宿舍到教室的时间平均花费38.82分钟。

    五、建议

      在疫情防控常态化的场景下,可以尽量采用错高峰就餐外出的方式,减少学生的聚众数量,同时,在疫情严重的时间段,可以采用线上教学,不堂食的策略,减少人员走动,在极端条件下,学生可以足不出户,采用志愿者送餐模式。

    附录

    Main.m

    clc;clear;
    close all;
    
    variableInit();
    generateStudentNum = 2700;
    global studentNum;
    global timeFrame;
    
    %1、公寓内男女起床、洗漱时间
    wakeupTimeBoy = normrnd(7.633,0.7822,1,generateStudentNum); 
    wakeupTimeGirl = normrnd(7.567,0.4761,1,generateStudentNum);
    washTimeBoy = gamrnd(0.05682,0.05188,1,generateStudentNum);
    washTimeGirl = normrnd(0.2886,0.1428,1,generateStudentNum);
    timeBoy = sort(wakeupTimeBoy+washTimeBoy); 
    timeBoy = timeBoy(timeBoy>=7&timeBoy<=10); 
    timeBoy = timeBoy(1:studentNum);
    timeGirl = sort(wakeupTimeGirl+washTimeGirl);
    timeGirl = timeGirl(timeGirl>=7&timeGirl<=10);
    timeGirl = timeGirl(1:studentNum);
    
    Timeline = zeros(timeFrame,10);%总时间线
    for n=1:timeFrame 
        Timeline(n,5)=studentNum;
        Timeline(n,7)=studentNum;
    end
    for n=1:studentNum 
        stu(n) = student;
        stu(n).id = n;
        stu(n).sex = 0;
        stu(n).StartTime = timeBoy(n);
        stu(studentNum+n) = student;
        stu(studentNum+n).id = studentNum+n;
        stu(studentNum+n).sex = 1;
        stu(studentNum+n).StartTime = timeGirl(n);
    end
    %2、乘坐电梯
    stu = elevator(stu,studentNum);
    
    for n=1:studentNum
        [Timeline] = manageTimeline(stu(n),Timeline,5,-1);
        [Timeline] = manageTimeline(stu(studentNum+n),Timeline,7,-1); 
    end
    %3、食堂,超市,邮局,路程时间消耗
    for n=1:studentNum*2 %食堂直接使用的第一次拟合函数
        proba =  round(rand());%12食堂概率各为50%
        if proba == 0 %先去食堂一
            Timeline = manageTimeline(stu(n),Timeline,1,1);
            stu(n) = canteenFit(stu(n));
            Timeline = manageTimeline(stu(n),Timeline,1,-1);
            if unifrnd(0,1)<0.03
                Timeline = manageTimeline(stu(n),Timeline,3,1);
                stu(n) = marketOrExpress(stu(n));
                Timeline = manageTimeline(stu(n),Timeline,3,-1);
            end
            if unifrnd(0,1)<0.01 
                Timeline = manageTimeline(stu(n),Timeline,4,1);
                stu(n) = marketOrExpress(stu(n));
                Timeline = manageTimeline(stu(n),Timeline,4,-1);
            end
            Timeline = manageTimeline(stu(n),Timeline,6,1);
            stu(n) = road(stu(n),6);
            Timeline = manageTimeline(stu(n),Timeline,6,-1);
        else
            if unifrnd(0,1)<0.03
                Timeline = manageTimeline(stu(n),Timeline,3,1);
                stu(n) = marketOrExpress(stu(n));
                Timeline = manageTimeline(stu(n),Timeline,3,-1);
            end
            if unifrnd(0,1)<0.01
                Timeline = manageTimeline(stu(n),Timeline,4,1);
                stu(n) = marketOrExpress(stu(n));
                Timeline = manageTimeline(stu(n),Timeline,4,-1);
            end
            Timeline = manageTimeline(stu(n),Timeline,8,1);
            stu(n) = road(stu(n),8);
            Timeline = manageTimeline(stu(n),Timeline,8,-1);
            Timeline = manageTimeline(stu(n),Timeline,2,1);
            stu(n) = canteenFit(stu(n));
            Timeline = manageTimeline(stu(n),Timeline,2,-1);
            Timeline = manageTimeline(stu(n),Timeline,9,1);
            stu(n) = road(stu(n),9);
            Timeline = manageTimeline(stu(n),Timeline,9,-1);
        end
        Timeline = manageTimeline(stu(n),Timeline,10,1);
        Timeline = manageTimeline(stu(n),Timeline,10,1);
        stu(n).allSpendTime = stu(n).leaveTime-stu(n).StartTime;
    	 allTime = allTime + stu(n).allSpendTime;
    end
    
    averageSpendTime = (allTime/(studentNum*2))*60
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90

    canteenFit.m

    function student = canteenFit(student)
        canteenWaitingTime = gamrnd(12.2526,3.825)/60;%拟合的等待时间
        if student.sex == 0
            consumeTime = canteenWaitingTime + 8.25;
        else
            consumeTime = canteenWaitingTime + 8.45;%等待加上吃饭时间
        student.leaveTime = student.leaveTime + consumeTime/60;
    %     end
    End
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    elevator.m

    function [stu] = elevator(stu,studentNum)%电梯函数返回一个总时间线的值 (时间、状态、人数)
        Event_queue_boy = [];%事件队列
        Event_queue_girl = [];
    
        N=8;%楼层数
        student_num = studentNum;
        
        for n=1:student_num
            stu(n).floor = unidrnd(N); %floor=1 2 3 4 5 6 7 8 9
            stu(n+student_num).floor = unidrnd(N); 
          	stu(n).leaveTime = 0;%离开电梯时间
          	stu(n+student_num).leaveTime = 0;%离开电梯时间
            if stu(n).floor == 1
                stu(n).leaveTime = stu(n).StartTime;
            else
                Event_queue_boy = insert_Event_queue(Event_queue_boy, stu(n).StartTime, 1,stu(n).id);
            end
            if stu(n+student_num).floor == 1
                stu(n+student_num).leaveTime = stu(n+student_num).StartTime;
            else
                Event_queue_girl = insert_Event_queue(Event_queue_girl, stu(n+student_num).StartTime, 1,stu(n+student_num).id);
            end
        end
        stuboy = stu(1:studentNum);
        stugirl = stu(studentNum+1:2*studentNum);
        stuboy = elevatorRun(stuboy,Event_queue_boy);
        stugirl = elevatorRun(stugirl,Event_queue_girl);
        stu = [stuboy,stugirl];
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    marketOrExpress.m

    function student = marketOrExpress(student)
        supermarketWaitingTime = exprnd(67.667)+normrnd(31.5185,12.6979);
    %等待时间+结账时间/查找快递+取快递
        student.leaveTime = student.leaveTime + supermarketWaitingTime/60;
    end
    manageTimeline.m
    function [Timeline] = manageTimeline(student,Timeline,number,arriveOrLeave)
        leaveTime =  floor((student.leaveTime-7)*60);
        timeFrame= 180;
        for i = leaveTime:timeFrame-1
            Timeline(i+1,number) = Timeline(i+1,number)+arriveOrLeave;
        end
    end
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    dreamweaver网页设计作业制作 小米商城官网商城购物网页设计 WEB静态网页作业模板 大学生个人购物商城网页代码 dw个人网页作业
    VR赋能红色教育,让爱国主义精神永放光彩
    软件开发定律:布鲁克定律
    EMQX 入门教程⑤——安全认证 | 使用 HTTP 的密码认证,设备登录鉴权
    vue3的一些注意事项
    Spring Boot2.7生成用于登录的图片验证码
    数字化时代,企业为什么需要商业智能BI?
    NVMe SSD 学习总结:01 SSD技术演进(从SATA SSD 到NVMe SSD)
    MySQL数据库用户管理
    git强制推送代码教程
  • 原文地址:https://blog.csdn.net/qq_36318271/article/details/125040916