数字商品
教育 / 知识
2023 研究生数学建模竞赛(A题)建模秘籍&文章代码思路大全
数学建模小秘籍 · 2 · 0
商品介绍
铛铛!小秘籍来咯!
进阶版已来!小秘籍团队20+人联手打造的精华内容,有需求的同学可以点击以下链接了解~
(进阶版)2023 数学建模高教社杯 研赛(A题)建模秘籍&文章代码思路大全
小秘籍希望大家都能轻松建模呀,研赛也会持续给大家放松思路滴~
抓紧小秘籍,我们出发吧~
来看看研赛A题的题目~
## 问题重述
背景:
- WLAN网络多个节点共享信道,使用CSMA/CA协议进行分布式接入
- 同频AP部署密集时存在同频干扰问题
- 节点间是否互听和并发传输成功与否是建模的关键
问题1:
- 2个BSS场景,AP间RSSI强,互听
- 并发传输时SIR低,碰撞失败
- 建模求解系统吞吐量
问题2:
- 2个BSS场景,AP间RSSI强,互听
- 并发传输时SIR高,传输成功
- 建模求解系统吞吐量
问题3:
- 2个BSS场景,AP间RSSI弱,不互听
- 存在10%包丢率
- 信号包和干扰包时间上交叠则失败
- 建模求解系统吞吐量
问题4:
- 3个BSS场景,部分AP互听部分不互听
- 并发传输成功与否按SIR判断
- 建模求解系统吞吐量
总体思路是建立马尔可夫链模型,计算节点发送概率和碰撞概率,根据时隙类型计算吞吐量。请指正我如有任何理解错误的地方。
## 问题1
针对问题1的两BSS互听场景,建模的具体思路如下:
1. 建立马尔可夫链模型
- 定义状态转移矩阵,包含退避计数器和退避阶数两个状态
- 编写程序求解马尔可夫链的稳态概率分布
2. 求解节点发送概率τ和碰撞概率p
- 根据稳态概率分布,求出b00
- 代入公式求解τ
- 代入公式求解p
3. 计算时隙长度
- 空闲时隙长度为一个slotTime
- 成功传输时隙长度为帧长+SIFS+ACK+DIFS
- 碰撞时隙长度为数据帧长+DIFS+ACK超时时间
4. 计算系统吞吐量
- 根据物理层速率和平均时隙长度计算系统吞吐量
- 并发传输时视为碰撞时隙
5. 编写程序实现上述过程,调参求解
6. 编写仿真程序验证结果
通过上述建模过程,我可以对两BSS互听场景下的系统吞吐量进行评估。如果有任何疑问,非常欢迎指正和讨论。
```python
import numpy as np
# 参数设置
slotTime = 9e-6
SIFS = 16e-6
DIFS = 43e-6
ACK = 32e-6
phyHeader = 13.6e-6
macHeader = 240e-9
ACKTimeout = 65e-6
payload = 1500*8/455.8e6
rate = 455.8e6
CW_min = 16
CW_max = 1024
maxRetries = 32
# 求解稳态概率
def get_b00(p, CW_min, CW_max, maxRetries):
r = maxRetries
m = np.log2(CW_max/CW_min)
if r <= m:
b00 = (2*(1-p)*(1-2*p))/((1-2*p)*(1 - p**(r+1)) + CW_min*(1-p)*(1-(2*p)**(r+1)))
```
## 问题二
针对问题2的两BSS互听场景,建模思路如下:
1. 建立马尔可夫链模型描述节点随机退避过程
- 定义状态转移矩阵,包含退避计数器和退避阶数两个状态
- 求解马尔可夫链的稳态概率分布$\pi$,得到$b_{0,0}$
2. 求解节点发送概率$\tau$和碰撞概率$p$
- $\tau = b_{0,0}\frac{1-p^{r+1}}{1-p}$
- $p = 1-(1-\tau)^{N-1}$
3. 计算时隙长度
- 空闲时隙长度$T_e$为一个slotTime
- 成功传输时隙长度$T_s$为帧长+SIFS+ACK+DIFS
- $T_s = \text{PHY头} + \text{MAC头} + \text{payload} + \text{SIFS} + \text{ACK} + \text{DIFS}$
4. 计算系统吞吐量
- $S = \frac{\text{payload}\times \text{rate}}{T_s\times\tau + T_e\times(1-\tau)}$
5. 并发传输视为成功传输时隙
问题2中指定并发传输时SIR较高,可以认为并发传输都成功。也就是说,当两个AP的传输时间上存在交叠时,不会视为碰撞时隙,而是认为都是成功的传输。
所以在计算平均时隙长度时,并发传输的情况可以视为成功传输时隙,不需要计算碰撞时隙的长度。
6. 求解吞吐量S
根据问题2的条件,系统吞吐量S的计算公式为:
$S = \frac{\text{payload}\times \text{rate}}{T_s\times\tau + T_e\times(1-\tau)}$
其中:
- payload: 数据帧的有效载荷,单位比特
- rate: 物理层速率,单位bps
- $\tau$: 节点发送概率
- $T_s$: 成功传输时隙长度
- $T_e$: 空闲时隙长度
将各参数带入公式,可以求解出系统吞吐量S。
**代码:**
```python
import numpy as np
# 参数设置
slotTime = 9e-6
SIFS = 16e-6
DIFS = 43e-6
ACK = 32e-6
phyHeader = 13.6e-6
macHeader = 240e-9
payload = 1500*8/455.8e6
rate = 455.8e6
CW_min = 16
CW_max = 1024
maxRetries = 32
# 求解稳态概率b00
def get_b00(p, CW_min, CW_max, maxRetries):
r = maxRetries
m = np.log2(CW_max/CW_min)
if r <= m:
b00 = (2*(1-p)*(1-2*p))/((1-2*p)*(1 - p**(r+1)) + CW_min*(1-p)*(1-(2*p)**(r+1)))
```
## 问题三
针对问题3的两BSS不互听场景,建模思路:
1. 建立马尔可夫链模型描述节点随机退避过程
- 定义状态转移矩阵,包含退避计数器和退避阶数两个状态
- 求解马尔可夫链的稳态概率分布$\pi$,得到$b_{0,0}$
2. 求解节点发送概率$\tau$和碰撞概率$p$
- $\tau = b_{0,0}\frac{1-p^{r+1}}{1-p}$
- $p = 1-(1-\tau)^{N-1}$
3.加入信道质量导致的数据丢包概率$P_e$
根据问题描述,当仅有一个AP发送数据时,即使没有邻区BSS干扰,由于信道质量变化也会导致一定概率Pe的包丢失。
4. 当信号包和干扰包时间上交叠时,传输失败
- 发生交叠的概率为$\tau^2$
- 这是两BSS不互听的关键。当两个AP的传输时间上存在交叠时,根据SIR较小的假设,传输一定会失败。
可以统计到,交叠发生的概率为τ^2,其中τ是节点的发送概率。
5. 计算吞吐量
- $S = \frac{\text{payload}\times \text{rate}}{(1-P_e)\tau T_s + [(1-\tau)^2+P_e\tau+(1-P_e)\tau^2]T_e}$
其中$T_s$为成功传输时隙长度,$T_e$为空闲时隙长度。
根据以上分析,吞吐量计算公式的各项含义是:
(1-Pe)τTs: 计算单BSS成功传输概率
(1-τ)^2: 计算两BSS不交叠的概率
Peτ: 计算单BSS失败概率
(1-Pe)τ^2: 计算两BSS交叠但都成功的概率
**代码:**
```python
import numpy as np
# 参数设置
# ...省略与问题1、2相同部分
Pe = 0.1 # 信道质量导致的丢包率
# 求解稳态概率b00
def get_b00(p, CW_min, CW_max, maxRetries):
r = maxRetries
m = np.log2(CW_max/CW_min)
if r <= m:
b00 = (2*(1-p)*(1-2*p))/((1-2*p)*(1 - p**(r+1)) + CW_min*(1-p)*(1-(2*p)**(r+1)))
else:
b00 = (2*(1-p)*(1-2*p))/((1-2*p)*(1 - p**(r+1)) + CW_min*(1 - (2*p)**(m+1))*(1-p) + CW_max*2**m*p**(m+1)*(1-p**(r-m))*(1-2*p))
return b00
# 求解τ和p
def get_tau_p(n, b00):
tau = b00 * (1 - (0.5)**n)/(1-(0.5))
p = 1 - (1-tau)**(n-1)
return tau, p
# 计算时隙长度
def get_slotTime(phyHeader, macHeader, payload, SIFS, DIFS, ACK):
T_s = phyHeader + macHeader + payload + SIFS + ACK + DIFS
```
## 问题四
1. 分别为每个BSS建立独立的马尔可夫链模型,包含退避计数器和退避阶数两个状态
2. 求解每个BSS的稳态概率分布π,得到各自的b00
3. 分别求解每个BSS的节点发送概率τ和碰撞概率p
- τ = b00*(1-pr+1)/(1-p)
- p = 1-(1-τ)N-1
4. 分析BSS之间的干扰关系
- AP1和AP3不互听,可能并发传输
- AP2与两者均互听
5. 计算并发传输的成功概率
根据题目,AP1和AP3不互听,可能会同时或先后发送数据并发传输。并发时,接收端的成功与否与SIR相关。题目给出AP1和AP3并发传输时SIR较大,可以认为传输都成功。
所以可以得到AP1和AP3的并发传输成功概率为:
P_success = τ_1 * τ_3
其中τ_1和τ_3分别是AP1和AP3的发送概率。
6. 计算整体网络的平均时隙长度
需要考虑三种时隙情况:
(1) 单BSS成功传输时隙
(2) 单BSS内碰撞时隙
(3) AP1和AP3并发传输成功时隙
将三种时隙的长度与对应的概率相乘,可以得到整体网络的平均时隙长度。
然后综合三个BSS的参数即可计算出整体网络的吞吐量。
7. 综合各BSS参数,计算整体网络吞吐量
```python
# 参数设置
# 三个BSS的参数
CW_min1 = 16
CW_max1 = 1024
CW_min2 = 32
CW_max2 = 1024
CW_min3 = 16
CW_max3 = 1024
maxRetries1 = 6
maxRetries2 = 5
maxRetries3 = 32
# 求解每个BSS的稳态概率b00
def get_b00(p, CW_min, CW_max, maxRetries):
r = maxRetries
m = np.log2(CW_max/CW_min)
if r <= m:
b00 = (2*(1-p)*(1-2*p))/((1-2*p)*(1 - p**(r+1)) + CW_min*(1-p)*(1-(2*p)**(r+1)))
```完整代码见代码文件
进阶版已来!小秘籍团队20+人联手打造的精华内容,有需求的同学可以点击以下链接了解~
(进阶版)2023 数学建模高教社杯 研赛(A题)建模秘籍&文章代码思路大全
小秘籍希望大家都能轻松建模呀,研赛也会持续给大家放松思路滴~
抓紧小秘籍,我们出发吧~
来看看研赛A题的题目~
## 问题重述
背景:
- WLAN网络多个节点共享信道,使用CSMA/CA协议进行分布式接入
- 同频AP部署密集时存在同频干扰问题
- 节点间是否互听和并发传输成功与否是建模的关键
问题1:
- 2个BSS场景,AP间RSSI强,互听
- 并发传输时SIR低,碰撞失败
- 建模求解系统吞吐量
问题2:
- 2个BSS场景,AP间RSSI强,互听
- 并发传输时SIR高,传输成功
- 建模求解系统吞吐量
问题3:
- 2个BSS场景,AP间RSSI弱,不互听
- 存在10%包丢率
- 信号包和干扰包时间上交叠则失败
- 建模求解系统吞吐量
问题4:
- 3个BSS场景,部分AP互听部分不互听
- 并发传输成功与否按SIR判断
- 建模求解系统吞吐量
总体思路是建立马尔可夫链模型,计算节点发送概率和碰撞概率,根据时隙类型计算吞吐量。请指正我如有任何理解错误的地方。
## 问题1
针对问题1的两BSS互听场景,建模的具体思路如下:
1. 建立马尔可夫链模型
- 定义状态转移矩阵,包含退避计数器和退避阶数两个状态
- 编写程序求解马尔可夫链的稳态概率分布
2. 求解节点发送概率τ和碰撞概率p
- 根据稳态概率分布,求出b00
- 代入公式求解τ
- 代入公式求解p
3. 计算时隙长度
- 空闲时隙长度为一个slotTime
- 成功传输时隙长度为帧长+SIFS+ACK+DIFS
- 碰撞时隙长度为数据帧长+DIFS+ACK超时时间
4. 计算系统吞吐量
- 根据物理层速率和平均时隙长度计算系统吞吐量
- 并发传输时视为碰撞时隙
5. 编写程序实现上述过程,调参求解
6. 编写仿真程序验证结果
通过上述建模过程,我可以对两BSS互听场景下的系统吞吐量进行评估。如果有任何疑问,非常欢迎指正和讨论。
```python
import numpy as np
# 参数设置
slotTime = 9e-6
SIFS = 16e-6
DIFS = 43e-6
ACK = 32e-6
phyHeader = 13.6e-6
macHeader = 240e-9
ACKTimeout = 65e-6
payload = 1500*8/455.8e6
rate = 455.8e6
CW_min = 16
CW_max = 1024
maxRetries = 32
# 求解稳态概率
def get_b00(p, CW_min, CW_max, maxRetries):
r = maxRetries
m = np.log2(CW_max/CW_min)
if r <= m:
b00 = (2*(1-p)*(1-2*p))/((1-2*p)*(1 - p**(r+1)) + CW_min*(1-p)*(1-(2*p)**(r+1)))
```
## 问题二
针对问题2的两BSS互听场景,建模思路如下:
1. 建立马尔可夫链模型描述节点随机退避过程
- 定义状态转移矩阵,包含退避计数器和退避阶数两个状态
- 求解马尔可夫链的稳态概率分布$\pi$,得到$b_{0,0}$
2. 求解节点发送概率$\tau$和碰撞概率$p$
- $\tau = b_{0,0}\frac{1-p^{r+1}}{1-p}$
- $p = 1-(1-\tau)^{N-1}$
3. 计算时隙长度
- 空闲时隙长度$T_e$为一个slotTime
- 成功传输时隙长度$T_s$为帧长+SIFS+ACK+DIFS
- $T_s = \text{PHY头} + \text{MAC头} + \text{payload} + \text{SIFS} + \text{ACK} + \text{DIFS}$
4. 计算系统吞吐量
- $S = \frac{\text{payload}\times \text{rate}}{T_s\times\tau + T_e\times(1-\tau)}$
5. 并发传输视为成功传输时隙
问题2中指定并发传输时SIR较高,可以认为并发传输都成功。也就是说,当两个AP的传输时间上存在交叠时,不会视为碰撞时隙,而是认为都是成功的传输。
所以在计算平均时隙长度时,并发传输的情况可以视为成功传输时隙,不需要计算碰撞时隙的长度。
6. 求解吞吐量S
根据问题2的条件,系统吞吐量S的计算公式为:
$S = \frac{\text{payload}\times \text{rate}}{T_s\times\tau + T_e\times(1-\tau)}$
其中:
- payload: 数据帧的有效载荷,单位比特
- rate: 物理层速率,单位bps
- $\tau$: 节点发送概率
- $T_s$: 成功传输时隙长度
- $T_e$: 空闲时隙长度
将各参数带入公式,可以求解出系统吞吐量S。
**代码:**
```python
import numpy as np
# 参数设置
slotTime = 9e-6
SIFS = 16e-6
DIFS = 43e-6
ACK = 32e-6
phyHeader = 13.6e-6
macHeader = 240e-9
payload = 1500*8/455.8e6
rate = 455.8e6
CW_min = 16
CW_max = 1024
maxRetries = 32
# 求解稳态概率b00
def get_b00(p, CW_min, CW_max, maxRetries):
r = maxRetries
m = np.log2(CW_max/CW_min)
if r <= m:
b00 = (2*(1-p)*(1-2*p))/((1-2*p)*(1 - p**(r+1)) + CW_min*(1-p)*(1-(2*p)**(r+1)))
```
## 问题三
针对问题3的两BSS不互听场景,建模思路:
1. 建立马尔可夫链模型描述节点随机退避过程
- 定义状态转移矩阵,包含退避计数器和退避阶数两个状态
- 求解马尔可夫链的稳态概率分布$\pi$,得到$b_{0,0}$
2. 求解节点发送概率$\tau$和碰撞概率$p$
- $\tau = b_{0,0}\frac{1-p^{r+1}}{1-p}$
- $p = 1-(1-\tau)^{N-1}$
3.加入信道质量导致的数据丢包概率$P_e$
根据问题描述,当仅有一个AP发送数据时,即使没有邻区BSS干扰,由于信道质量变化也会导致一定概率Pe的包丢失。
4. 当信号包和干扰包时间上交叠时,传输失败
- 发生交叠的概率为$\tau^2$
- 这是两BSS不互听的关键。当两个AP的传输时间上存在交叠时,根据SIR较小的假设,传输一定会失败。
可以统计到,交叠发生的概率为τ^2,其中τ是节点的发送概率。
5. 计算吞吐量
- $S = \frac{\text{payload}\times \text{rate}}{(1-P_e)\tau T_s + [(1-\tau)^2+P_e\tau+(1-P_e)\tau^2]T_e}$
其中$T_s$为成功传输时隙长度,$T_e$为空闲时隙长度。
根据以上分析,吞吐量计算公式的各项含义是:
(1-Pe)τTs: 计算单BSS成功传输概率
(1-τ)^2: 计算两BSS不交叠的概率
Peτ: 计算单BSS失败概率
(1-Pe)τ^2: 计算两BSS交叠但都成功的概率
**代码:**
```python
import numpy as np
# 参数设置
# ...省略与问题1、2相同部分
Pe = 0.1 # 信道质量导致的丢包率
# 求解稳态概率b00
def get_b00(p, CW_min, CW_max, maxRetries):
r = maxRetries
m = np.log2(CW_max/CW_min)
if r <= m:
b00 = (2*(1-p)*(1-2*p))/((1-2*p)*(1 - p**(r+1)) + CW_min*(1-p)*(1-(2*p)**(r+1)))
else:
b00 = (2*(1-p)*(1-2*p))/((1-2*p)*(1 - p**(r+1)) + CW_min*(1 - (2*p)**(m+1))*(1-p) + CW_max*2**m*p**(m+1)*(1-p**(r-m))*(1-2*p))
return b00
# 求解τ和p
def get_tau_p(n, b00):
tau = b00 * (1 - (0.5)**n)/(1-(0.5))
p = 1 - (1-tau)**(n-1)
return tau, p
# 计算时隙长度
def get_slotTime(phyHeader, macHeader, payload, SIFS, DIFS, ACK):
T_s = phyHeader + macHeader + payload + SIFS + ACK + DIFS
```
## 问题四
1. 分别为每个BSS建立独立的马尔可夫链模型,包含退避计数器和退避阶数两个状态
2. 求解每个BSS的稳态概率分布π,得到各自的b00
3. 分别求解每个BSS的节点发送概率τ和碰撞概率p
- τ = b00*(1-pr+1)/(1-p)
- p = 1-(1-τ)N-1
4. 分析BSS之间的干扰关系
- AP1和AP3不互听,可能并发传输
- AP2与两者均互听
5. 计算并发传输的成功概率
根据题目,AP1和AP3不互听,可能会同时或先后发送数据并发传输。并发时,接收端的成功与否与SIR相关。题目给出AP1和AP3并发传输时SIR较大,可以认为传输都成功。
所以可以得到AP1和AP3的并发传输成功概率为:
P_success = τ_1 * τ_3
其中τ_1和τ_3分别是AP1和AP3的发送概率。
6. 计算整体网络的平均时隙长度
需要考虑三种时隙情况:
(1) 单BSS成功传输时隙
(2) 单BSS内碰撞时隙
(3) AP1和AP3并发传输成功时隙
将三种时隙的长度与对应的概率相乘,可以得到整体网络的平均时隙长度。
然后综合三个BSS的参数即可计算出整体网络的吞吐量。
7. 综合各BSS参数,计算整体网络吞吐量
```python
# 参数设置
# 三个BSS的参数
CW_min1 = 16
CW_max1 = 1024
CW_min2 = 32
CW_max2 = 1024
CW_min3 = 16
CW_max3 = 1024
maxRetries1 = 6
maxRetries2 = 5
maxRetries3 = 32
# 求解每个BSS的稳态概率b00
def get_b00(p, CW_min, CW_max, maxRetries):
r = maxRetries
m = np.log2(CW_max/CW_min)
if r <= m:
b00 = (2*(1-p)*(1-2*p))/((1-2*p)*(1 - p**(r+1)) + CW_min*(1-p)*(1-(2*p)**(r+1)))
```完整代码见代码文件
同店推荐
包含文件 · 5 · 275.3 KB
- 01_问题2.py 1.4 KB
- 02_问题1.py 1.5 KB
- 03_问题4.py 1.4 KB
- 04_问题3.py 1.3 KB
- 05_A代码+思路.pdf 269.6 KB
支付金额
¥14.24