2023 研究生数学建模竞赛(A题)建模秘籍&文章代码思路大全
数字商品 教育 / 知识

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)))
```完整代码见代码文件

同店推荐

包含文件 · 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