2020年认证杯SPSSPRO杯数学建模B题(第二阶段)分布式无线广播全过程文档及程序

2020年认证杯SPSSPRO杯数学建模

B题 分布式无线广播

原题再现:

  以广播的方式来进行无线网通信,必须解决发送互相冲突的问题。无线网的许多基础通信协议都使用了令牌的方法来解决这个问题,在同一个时间段内,只有唯一一个拿到令牌的通信节点才能发送信息,发送完毕后则会将令牌传递给其他节点。但我们考虑这样的一个无线网:每个通信节点都是低功率的发射器,并且在进行着空间上的低速连续运动 (无法预知运动方向及其改变的规律),所以对一个节点而言,只有和它距离在一定范围之内的节点才能收到它的信号,而且节点会 (在未声明的情况下) 相互接近或远离。每个节点需要不定期地、断续地发送信息,但会时刻保持收听信息。发送和收听工作可以同时进行。在这个通信网络中,完全没有网络的基础设施,而且每个节点只需要把自己的信息广播出去,需要此条信息的节点只需要被动收听即可,并不需要点对点地持续交换信息。所有信息只能使用同一个频率发送,一旦有两个或多个节点的广播发生冲突,能同时收听到它们的节点就都能监听到冲突。
  第二阶段问题: 我们假设每条信息 (广播) 发送时所需的时间是不等长的,但都是某个最小时间单位 (不妨设为秒) 的整数倍。请建立合理的数学模型并解决如下问题。
  1. 假设对每个节点来说,发送信息所需的时间都服从泊松分布,但不同节点对应的泊松分布的参数 λ 不同,而且互相并不知道参数。那么以怎样的策略自动调整重发的时间段,才能使网络的整体通信效率尽可能高?
  2. 如果每个节点待发送的信息都分成两类,一类信息发送时所需的时间服从泊松分布,另一类所需的时间则服从幂律分布,这个改变对重发策略有什么影响?

整体求解过程概述(摘要)

  针对问题一,首先根据题中通信节点发送信息的无规律性,将连续的时间离散化,以此为基础分析每个单位时间节点上的网络系统状态,并根据通信节点的广播有效距离将冲突分为:有效冲突和无效冲突。接着设计内置算法的三种冲突重发方案:随机生成等待、等差递增等待和截断二进制指数退避。然后分类通信节点状态,并根据真实网络运行分析出通信节点状态相互转换规律,由此建立起通信模型。利用蒙特卡洛仿真实现该通信模型。求解模型时,借助 matlab 实现三种内置算法,考虑发送信息时间的泊松分布,作为输入仿真参数之一实现仿真过程。将广播来源率作为自变量,通信效率指标作为因变量,得到三种通信效率指标随广播来源率的变化,对比分析发现方案三(截断二进制指数退避)网络通信效率最佳。最后结合模型求解结果比较,在现有模型的基础上加以改进,设计自学习算法,动态调整参数,以适应当前的网络状态,提高系统的效率。
  针对问题二,首先分析两类发送信息特性,根据通信节点发送信息的无规律性将通信节点再分类为两类简化计算。然后结合现实网络发送信息时长特性,设置两类分布参数。接着用第一问中的通信模型及蒙特卡洛仿真,得出内置算法中三种冲突重发方案的网络通信效率随两类信息发送量比的变化对比,最后分析发现仍是方案三(截断二进制指数退避)网络通信效率最佳。最后通过实验进一步探究信息发送时长分布对网络通信效率的影响,发现整个网络信息发送时长的期望与网络通信效率成正相关,有力地验证了模型的合理性。

问题分析:

  问题一分析
  对于问题一,根据题中通信节点发送信息的无规律性,将连续的时间离散化,以此为基础分析每个单位时间节点上的网络系统状态。接着由题中要求:对一个节点而言,只有和它距离在一定范围之内的节点才能收到它的信号,而且节点会 (在未声明的情况下) 相互接近或远离,将冲突分为:有效冲突和无效冲突,再针对冲突设计内置算法的三种冲突重发方案:随机生成等待、等差递增等待和截断二进制指数退避。然后分类通信节点状态,并根据真实网络运行分析出通信节点状态相互转换规律,建立起通信模型。利用蒙特卡洛仿真实现该通信模型。最后求解模型,借助 matlab 实现三种内置算法,考虑发送信息时间的泊松分布,作为输入仿真参数之一实现仿真过程。将广播来源率作为自变量,通信效率指标作为因变量,探究三种通信效率指标随广播来源率的变化,分析比较三种冲突重发方案的网络通信效率。最后结合模型求解结果分析,在现有模型的基础上加以改进,设计自学习算法,动态调整参数,以适应当前的网络状态,提高系统的效率。

  问题二分析
  对于问题二,首先分析两类发送信息特性,根据通信节点发送信息的无规律性将通信节点再分类为两类以简化计算。然后结合现实网络发送信息时长特性,设置两类分布参数。接着用第一问中的通信模型及蒙特卡洛仿真,得出内置算法中三种冲突重发方案的网络通信效率随两类信息发送量比的变化对比,分析三种冲突重发方案的网络通信效率。最后通过实验进一步探究信息发送时长分布对网络通信效率的影响以验证模型的合理性。

模型假设:

  1. 所有通信节点都只在单位时间节点上发送信息;
  2. 低功率发射器,忽略电磁波的传播时延;
  3. 通信节点在上一次广播还未发送或还未发送完时,不会需要发下一次广播;
  4. 信息的发送不考虑处理时延与排队时延,即总时延等于传播时延与发送时延之和;
  5. 所有的节点都拥有同样的内置算法,并拥有一个校准过的高精度时钟;
  6. 所有节点能正常运行,不会出现故障。

论文缩略图:

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

1. function[a1,a2,a3]=communicate(source,plan,self,s,f)
2.
3. %source(m*n)矩阵表示 m 个节点,n 个广播来源的时间点
4. %pointer(m*1)矩阵表示 m 个节点,每个节点当前已有广播来源的序号
5. %cache(m*4)矩阵表示 m 个节点,第一列表示下次重发时间点,第二列表示当前已
经重发次数,第三列表示当前缓冲区个数,第四列表示连续性(冲突置 1,发送置 0),
第五列表示其发送时间符合的分布(0 泊松分布,1 幂律分布,2 期望,3 方差),
第六列表示其分布参数

6. %send(m*1)表示 m 个节点,当前节点剩余发送时间点
7.
8. %设置环境
9. m=100; %节点数
10. %n=5000; %来源数(不一定都用得上)
11. %s=1; %轻载或重载
12. %t_z=50; %一次发送占用的时间数
13. k_=10; %截断
14. n_=16; %丢弃指标
15. %plan=0; %方案 3
16.
17. %初始化
18. chongtu=0;
19. diuqi=0;
20. t_sum=100000; %总的模拟时间数(在当前时间点处理下个时间间隔的过程)
21. t_now=1; %当前时间数
22. %source=fun1(m,n,s);
23. pointer=ones(m,1); %表示下一个要来的广播是多少号
24. cache=zeros(m,6)+fun3(m,f,s); %s 表示幂律占比,中间参数表示问题,只要占比
为 0 就是第一问
25. send=zeros(m,1);
26. channel=zeros(t_sum,1)-1; %用于记录信道状态
27.
28. %开始循环
29. for i=1:t_sum
30. send_now=sum(send~=0);
31. channel(i,1)=send_now;
32. %当前信道被占用
33. if send_now>=1
34. %当前信道只被一个节点占用
35. if send_now==1
36. %更新 send 矩阵
37. send=send-1;
38. send(send==-1)=0;
39.
40. %当前信道被多个节点占用(即发生冲突)
41. elseif send_now>=2
42. %调用退避函数,并清零 send 矩阵
43.
[cache,send,diuqi]=tuibi(plan,cache,send,t_now,k_,n_,diuqi,self,channel)
;
44. chongtu=chongtu+1;
45. end
46.
47. %当前信道未被占用
48. elseif send_now==0
49. for j=1:m
50. if cache(j,1)==0
51. if cache(j,3)>0
52. send(j,1)=t_z(cache(j,5),cache(j,6));
53. cache(j,3)=cache(j,3)-1;
54. if cache(j,4)==0
55. cache(j,2)=0;
56. elseif cache(j,4)==1
57. cache(j,4)=0;
58. end
59. end
60. end
61. end
62. send=send-1;
63. send(send==-1)=0;
64. end
65.
66. %最后更新 t_now 和 cache
67. [cache_t,pointer,cache]=fun2(source,pointer,cache,t_now);
68. cache=cache+[zeros(m,2),cache_t,zeros(m,3)];
69. t_now=t_now+1;
70. end
71.
72. a1=sum(channel==1)/t_sum;
73. a2=diuqi/sum(pointer);
74.
75. count=0;
76. for i=1:t_sum
77. if channel(i,1)>=2
78. count=count+channel(i,1);
79. elseif channel(i,1)==1
80. if i~=0
81. if channel(i-1)~=1
82. count=count+1;
83. end
84. end
85. end
86. end
87. a3=sum(channel(channel>=2))/count;
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/290622.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity 2022 版本 寻路 NavMesh

官方教程地址 https://docs.unity3d.com/Packages/com.unity.ai.navigation1.1/manual/index.html 首先装包 先给地图 和 阻挡 设置为静态 然后给地上行走的地方 添加组件 可以直接bake 然后会显示蓝色的可行走路径 player 添加插件 然后给角色添加脚本 using System.Co…

MySQL基础篇(一)SQL

视频地址: 黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括 SQL,全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一 标准。 一、SQL通用语…

ImportError: DLL load failed while importing imaging: 找不到指定的模块

24.1 ImportError: DLL load failed while importing imaging: 找不到指定的模块 参考:https://zhuanlan.zhihu.com/p/662305030?utm_id0 说明:Pillow 与pillow都可以,不区分首字母大小写 第一步:查看是否有pillow 1)…

AI:117-基于机器学习的环境污染影响评估

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

vue3+Ts+Hook的方式实现商城核心功能sku选择器

前言 Hooks是React等函数式编程框架中非常受欢迎的工具,随着VUE3 Composition API 函数式编程风格的推出,现在也受到越来越多VUE3开发者的青睐,它让开发者的代码具有更高的复用度且更加清晰、易于维护。 本文将通过CRMEB商城商品详情sku选择…

【完整思路】2023 年中国高校大数据挑战赛 赛题 B DNA 存储中的序列聚类与比对

2023 年中国高校大数据挑战赛 赛题 B DNA 存储中的序列聚类与比对 任务 1.错误率和拷贝数分析:分析“train_reads.txt”和“train_reference.txt”数据集中的错误率(插入、删除、替换、链断裂)和序列拷贝数。 2.聚类模型开发:开发…

Vue3+TS+ElementPlus的安装和使用教程【详细讲解】

前言 本文简单的介绍一下vue3框架的搭建和有关vue3技术栈的使用。通过本文学习我们可以自己独立搭建一个简单项目和vue3的实战。 随着前端的日月更新,技术的不断迭代提高,如今新vue项目首选用vue3 typescript vite pinia……模式。以前我们通常使用…

【教学类-43-15】 20240103 (5宫格数独:内存数据不够计算) 不重复的基础模板数量:未知

背景需求: 测试5宫格有多少种不重复的基础模板(只测试所有的25数字一组有多少个) # 测试11*11格,2*2一共4套3*3 宫格目的:数独14 5宫格有不同的基础模板 作者:阿夏 时间:2024年01月04日 13:…

【Echarts实践案例】如何在线图上标记一个非轴线上的点

需求背景: 当前有一个趋势图,横坐标表示灯泡平均使用时长,纵坐标表示灯泡平均使用温度。现在需要在当前坐标系下标记一个正在使用中的灯泡的时长及温度(趋势图表示的是计算出的平均温度,所以当前灯泡的温度可能不会在…

算法导论复习——CHP22 基本图算法

图的表示 邻接矩阵和邻接表 稀疏图一般用邻接表表示(稀疏图:边数|E|远小于的图 ) 稠密图更倾向于用邻接矩阵表示 (稠密图:边数|E|接近的图) 邻接矩阵可用于需要快速判断任意两个结点之间是否有边相连的应用场景。 如果用邻…

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想)

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想) 一.安装依赖二、主要代码 预览效果链接: https://github.com/501351981/vue-office 插件文档链接: https://501351981.github.io/vue-office/examples/d…

使用(?<!pattern) 负向后行断言正则表达式提取一个双引号开头和结尾的字符串

如下是一段java代码,我想用正则表达从中提取代码中的字符串 cond_buffer.append(" ORDER BY \"name\" \"").append(join(order_by_column,"\","));java是通过前后用双引号包含定义字符串的。但简单使用正则表达式".…

Kubernetes Gateway API V1.0:您应该切换吗?

自Kubernetes Gateway API 发布 v1.0以来已经过去两个多月了,这标志着其一些关键 API 已经进入普遍可用状态。 去年,当网关 API升级为测试版时,我曾写过有关该 API的文章,但一年后,问题仍然存在。您是否应该从 Ingres…

Python----matplotlib库

目录 plt库的字体: plt的操作绘图函数: plt.figure(figsizeNone, facecolorNone): plt.subplot(nrows, ncols, plot_number): plt.axes(rect): plt.subplots_adjust(): plt的读取和显示相关函数: plt库的基础图…

Python内置类属性__module__属性的使用教程

概要 在Python中,每个对象都有一些内置的属性,这些属性提供了有关对象的一些信息。其中一个内置属性是__module__属性。__module__属性是一个字符串,它表示定义了类或函数的模块的名称。在本篇文章中,我们将详细介绍__module__属…

随机森林,Random Forests Classifiers/Regressor

目录 介绍: 一、 Random Forests Classifiers(离散型) 1.1 数据处理 1.2建模 1.3特征值权值分析 1.4 特征值的缩减 二、Random Forests Regressor(连续型) 2.1数据处理 2.2建模 2.3调参 介绍: …

数据库:基础SQL知识+SQL实验1

&#xff08;1&#xff09;基础知识&#xff1a; 1.创建数据库&#xff1a; CREATE DATABASE <database_name> 2.删除数据库&#xff1a; DROP DATABASE <database_name> 3.相关数据类型&#xff1a; [1] 字符串类型 CHAR(n)&#xff1a;固定长度的字符数据…

基于ssm的《数据库系统原理》课程平台的设计与实现论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

[蓝桥杯学习]​树上差分

差分 前缀和 sum_i sum_i-1 a_i 差分 diff_i a_i - a_i-1 差分的好处 点的差分 问题引入 解决问题 要用到差分的思想&#xff0c;每次从叶子向上的回溯&#xff0c;会让父结点子结点的cnt值&#xff0c;但是仅仅这样&#xff0c;还不行 回溯的过程中&#xff0c;LCA被…

【Midjourney】AI绘画新手教程(一)登录和创建服务器,生成第一幅画作

一、登录Discord 1、访问Discord官网 使用柯學尚网&#xff08;亲测非必须&#xff0c;可加快响应速度&#xff09;访问Discord官方网址&#xff1a;https://discord.com 选择“在您的浏览器中打开Discord” 然后&#xff0c;注册帐号、购买套餐等&#xff0c;在此不做缀述。…