比赛链接:“华为杯”第二十届中国研究生数学建模竞赛
本仿真程序是基于MATLAB R2021a 进行开发的,基于MATLAB 的面向对象编程工具,将每个 AP
封装为了一个类,并采用元组传递拓扑关系。所有 AP
通过一个 Simulator
类进行管理与交互, AP
将自己的行为抽象为事件, Simulator
将循环遍历所有AP 的事件,并按照时间顺序从前向后执行。
本程序只需改动 main.m
文件的参数配置,即可对不同场景进行仿真。
主脚本为 main.m
函数,问题一的运行示例如下代码所示。
每个 AP
类通过结构体 simu_conf
进行构造,其中 mbps, simulator, r, p_e
是必选参数, W_min, W_max
是可选参数。
构造完 AP
后,将它们组成一个元组,同时传入参数 topoAP2AP,topoAP2STA
,这两个参数定义了网络的拓扑关系,该代码对应了问题一的场景。
simulator.Init
初始化仿真, simulator.RunAll
执行仿真, simulator.PlotAllEvent
将绘制事件的时序图, simulator.PlotThroughput
将统计每个AP 的吞吐量、碰撞概率。
- ApState.m:用于定义AP的状态,包括退避状态,其他人发包时HOLD等待状态,SEND发送状态。
- Callback.m:代表事件对应的回调函数,包含触发时间,执行内容。
- EventState.m:用于记录事件的状态,用于仿真输出。
- Events.m:事件的状态,用三元组
(起始时间, 终止时间, 状态)
来定义一个事件。 - Simulator.m:用于与各AP的事件与状态交互,实现整个仿真程序的运行。
- AP.m:用于定义每个AP的行为逻辑和状态,与仿真器实现交互。
- calculate_1.m:计算第一问的冲突概率和系统吞吐
- calculate_2.m:计算第二问的冲突概率和系统吞吐
- calculate_3.m:计算第三问的冲突概率和系统吞吐
- calculate_4_1.m:计算第四问情况一的冲突概率和系统吞吐
- calculate_4_2_3.m:计算第四问情况二和情况三的冲突概率和系统吞吐
- calculate_4_4.m:计算第四问情况四的冲突概率和系统吞吐
- result_1.mat:第一问的计算结果
- result_2.mat:第二问的的计算结果
- result_3.mat:第三问的的计算结果
- result_4_1.mat:第四问情况一的计算结果
- result_4_2_3.mat:第四问情况二和情况三的计算结果
- result_4_4.mat:第四问情况四的计算结果
通过Mathematica用于求解多元方程计算第四问四种情况下的冲突概率。
simulator.m是画每一章的仿真事件图与吞吐量曲线图,对应代码内的第五部分第六部分,执行main.m文件并修改每问相应的参数即可绘制。 为确保main.m文件中最大仿真时间固定在2e6,不必为每次画两张图修改参数,这里将simulator.m中92行x轴范围限定在10000。如有修改可写回原形。
q3_therotical_value_bar.m与q4_therotical_value_bar.m分别导入result_3,result_4_1,result_4_2_3,result_4_4数据,其分别为第三题,第四题第一种情况,二三种情况和第四种情况中理论值的解。绘制柱状图。
q3_simu_bar.m、q4_simu_bar.m是在运行完simulator.m的基础上记录每组数据,将其写入3×3的数组中绘制柱状图代码。
一等奖(华为专项二等奖) 成绩公示网址