当前位置: 首页 > article >正文

【24华为杯数模研赛赛题思路已出】国赛B题思路丨附参考代码丨免费分享

2024年华为杯研赛B题解题思路

B题 WLAN组网中网络吞吐量建模

问题1

请根据附件WLAN网络实测训练集中所提供的网络拓扑、业务流量、门限、节点间RSSI的测试基本信息,分析其中各参数对AP发送机会的影响,并给出影响性强弱的顺序。通过训练的模型,预测每个AP的发送机会,即发送数据帧序列的总时长(seq_time),并通过测试集 test_set_1_2ap和test_set_1_3ap(仅提供模型输入信息)预测AP发送数据帧序列的总时长。可按照同频AP个数分类分析和分别建模,也可统一分析和建模。

除了发送机会外,WLAN网络吞吐量还取决于发送时所选用的PHY Rate以及数据帧的比特数。AP给不同STA发送数据所选用的(MCS, NSS),即PHY Rate,受传输方式和干扰情况影响。以两个AP传输一段时间为例,有以下三种情形:

a)仅有同步传输时,两个AP交替抢到信道,偶然同时发送。因此,STA接收数据时的干扰主要来自环境底噪,因而SINR高,AP选用的(MCS, NSS)较高,PHY Rate高。

b)当两个AP总是不互听时,STA接收数据时可能受到较小的邻区干扰和环境底噪。分析时,假设环境底噪可忽略,则STA的SINR为关联AP到该STA的RSSI与邻区AP到该STA的RSSI之差。以图3.1中AP1与AP2为例,AP1发送数据给STA1-2,AP2发送数据给STA2-1,那么STA1-2在接收来自AP1的信号时,受到来自AP2的干扰,其SINR为AP1到STA1-2的RSSI与AP2到STA1-2的RSSI之差,STA2-1同理。AP发送数据选用的(MCS, NSS)与SINR相关。

c)当两个AP的RSSI处于[PD, ED]或[NAV, PD]时,传输中出现由于错过Preamble而导致的异步传输,与同步传输混合。那么在同步传输阶段,STA接收数据时受到的干扰只有环境底噪,在异步传输阶段,干扰来自邻区AP和环境底噪。

可见,AP的AMC所选用的(MCS, NSS)不仅与SINR相关,同时也与AP的传输方式相关。

1.1题目分析

问题 1:分析并预测AP发送机会(发送时长)

分析:

本题要求根据实测数据中的网络拓扑、业务流量、节点间的RSSI信息等,分析哪些因素对AP发送机会的影响,并通过训练模型预测AP发送数据的帧序列总时长(seq_time)。这里的“发送机会”可以通过AP发送数据时长来表征。由于WLAN中AP竞争信道资源,随机回退机制和信道条件(RSSI、CCA门限)对AP的发送机会影响很大。

初步思路:

  1. 数据预处理:提取影响发送机会的关键参数,如RSSI、信道门限、流量类型等。需要处理并清洗数据,尤其是RSSI信息。
  2. 特征分析:利用相关分析或统计方法,分析不同特征(RSSI、业务流量、信道门限等)对发送时长的影响,得出特征的重要性排序。
  3. 模型构建:可以选择机器学习算法(如随机森林、XGBoost)进行建模,训练模型预测AP的发送时长。由于AP数量不同,可能需要对同频AP数量进行分类建模。
  4. 模型验证:通过测试集对模型进行验证,评估预测精度。

1.2解题思路

1. 问题分析与特征选择

我们要根据WLAN的实际测量数据,分析影响AP发送机会的因素,并建立模型来预测AP的发送时长。首先,从数据集可以获得的主要特征包括:

  • RSSI (Received Signal Strength Indication):表示接收信号强度,是影响信道质量的重要因素。
  • 协议类型 (TCP/UDP):不同的协议可能影响数据包的发送时机和丢包率。
  • 包长度 (Packet Length):数据包的大小可能影响传输时长。
  • 竞争窗口 (Contention Window):AP竞争信道的时间与AP的发送机会直接相关。
  • NAV(Network Allocator Vector)门限:表示静默时长,可能对AP的信道使用机会产生影响。
  • 干扰情况 (Interference):AP之间的相互干扰影响各自的发送机会。

2. 发送机会的数学描述

AP的发送时长可以通过多个因素的函数来描述。假设AP的发送时长与信道空闲时间、AP间的干扰、竞争窗口、RSSI等因素相关,我们可以将AP发送时长建模为这些变量的函数。

令:

3. 竞争窗口的建模

AP 发送数据之前,需要通过竞争窗口机制进行信道争夺。竞争窗口的大小 CWi 是由AP 的竞争机制决定的,若碰撞发生,则CWi 逐渐增大。

竞争窗口可以描述为:

其中, k 是连续碰撞的次数, CWmin为竞争窗口的最小值。

AP 发送机会与竞争窗口大小成反比:

即,竞争窗口越大,发送机会越小。

4. 干扰的建模

AP 之间的干扰直接影响发送成功率。

假设AP 之间的干扰强度由AP i 和 AP j 的RSSI 之差决定。

干扰强度可以表示为:

当干扰强度较大时,AP 的发送时长将减少,因此:

5. 信道竞争时间的建模

信道竞争时间 Ti 是AP 为争夺信道所用的时间。这个时间由信道的空闲状态决定。当信道空闲时,AP 可以直接发送数据帧。

信道空闲的概率可以通过Poisson 分布建模:

其中,λ是信道繁忙的到达率, t 是时间。

信道空闲时间与AP 发送时长正相关:

6. 模型的构建

综合上述因素,AP i 的发送时长模型可以写为:

其中,α是一个待定系数,结合实际数据进行回归分析确定。

7. 数据处理与建模步骤

数据预处理

    • 处理缺失值,去除异常值。
    • 对连续型变量进行标准化处理(如RSSI、竞争窗口、干扰强度等)。
    • 对分类变量(如协议类型、包长度)进行one-hot编码。

特征选择

    • 使用相关性分析或特征重要性评估,确定对发送时长影响较大的特征。

模型训练

    • 使用多元线性回归、随机森林、XGBoost等机器学习算法对发送时长进行建模。
    • 使用训练数据集进行模型训练,调整参数使得模型预测效果最佳。

模型验证

    • 使用测试集对模型进行验证,评估模型的预测效果,常用指标包括均方误差 (MSE)、R平方等。

结果分析

    • 通过模型得到AP的发送机会(即发送时长),并通过特征重要性分析,得出影响发送时长的主要因素。

8. 模型评估方法

使用累积分布函数 (CDF) 来评估模型精度。计算预测误差,并绘制误差的CDF曲线,取误差为90%时的值作为模型的误差评估值。

1.3参考代码

# 导入必要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler

# 读取数据(替换为你的文件路径)
data = pd.read_csv('/mnt/data/training_set_2ap_loc0_nav82.csv')

# 展示数据基本信息
print(data.info())
print(data.head())

# 选择相关的特征,去掉不必要的列
features = ['test_dur', 'pkt_len', 'pd', 'ed', 'nav', 'ap_from_ap_x_sum_ant_rssi', 
            'sta_from_ap_x_sum_ant_rssi', 'num_ampdu', 'mcs', 'nss', 'per']
target = 'seq_time'

# 去除空值
data = data[features + [target]].dropna()

# 进行特征标准化
scaler = StandardScaler()
X = data[features]
y = data[target]
X_scaled = scaler.fit_transform(X)

# 将数据分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)

# 使用随机森林模型
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 预测
y_pred_train = model.predict(X_train)
y_pred_test = model.predict(X_test)

# 模型评估
train_mse = mean_squared_error(y_train, y_pred_train)
test_mse = mean_squared_error(y_test, y_pred_test)
train_r2 = r2_score(y_train, y_pred_train)
test_r2 = r2_score(y_test, y_pred_test)

print(f"训练集均方误差: {train_mse:.4f}, R2: {train_r2:.4f}")
print(f"测试集均方误差: {test_mse:.4f}, R2: {test_r2:.4f}")

# 可视化真实值与预测值的对比
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred_test, alpha=0.6, color='b')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=3)
plt.xlabel('真实发送时长')
plt.ylabel('预测发送时长')
plt.title('真实值与预测值对比')
plt.grid(True)
plt.show()

# 特征重要性
importances = model.feature_importances_
indices = np.argsort(importances)[::-1]
feature_names = np.array(features)

# 可视化特征重要性
plt.figure(figsize=(10, 6))
sns.barplot(x=importances[indices], y=feature_names[indices], palette="coolwarm")
plt.title('特征重要性')
plt.xlabel('重要性得分')
plt.ylabel('特征')
plt.grid(True)
plt.show()

# 信道空闲时间分析 (假设到达率 lambda)
lambda_rate = 0.5
t = np.linspace(0, 10, 100)
P_idle = np.exp(-lambda_rate * t)

# 可视化信道空闲概率
plt.figure(figsize=(8, 5))
plt.plot(t, P_idle, 'b-', label=f'Poisson分布 $\lambda={lambda_rate}$')
plt.fill_between(t, P_idle, alpha=0.3, color='blue')
plt.xlabel('时间')
plt.ylabel('空闲概率')
plt.title('信道空闲概率')
plt.grid(True)
plt.legend()
plt.show()

问题2

请根据附件提供的实测训练集中的测试基本信息,特别是节点间RSSI信息和门限信息,结合问题1中对AP发送机会的分析,对测试中AP发送数据选用最多次数的(MCS, NSS)进行建模,并通过测试集 test_set_2_2ap和test_set_2_3ap(仅提供模型输入信息)预测(MCS, NSS)。(AP在AMC算法下自适应调节发送速率,过程中可能采用多个(MCS, NSS),AMC算法收敛速度快,故其中选用最多次数的(MCS, NSS)反映了SINR水平)。

2.1题目分析

问题 2:预测发送速率使用最多的PHY Rate (MCS NSS)

分析:

本题要求根据节点间的RSSI、信道信息和发送机会分析,预测AP在传输数据时选择的PHY速率(MCS NSS)。WLAN采用自适应调制编码(AMC)算法,根据SINR动态调整PHY速率,影响发送速率的主要因素是RSSI和干扰情况。

初步思路:

  1. 特征提取:重点关注RSSI、信道条件、AP之间的干扰等影响SINR的参数。基于问题1中的发送时长结果,进一步挖掘影响PHY速率的特征。
  2. 模型选择:利用机器学习或回归模型,基于RSSI和干扰情况,预测AP选择的(MCS NSS)。

结果分析:通过对测试集进行预测,验证模型的准确性,评估模型对不同AP之间干扰的适应性。

2.2解题思路

1. 问题分析与特征选择

PHY速率的选择与多个因素相关,尤其是RSSI(接收信号强度)、信道门限、干扰强度等。在WLAN环境中,AP的PHY速率取决于信道质量和干扰条件。因此,主要特征包括:

  • RSSI:接收信号强度指示,是一个关键因素。较高的RSSI通常意味着可以使用更高的PHY速率。
  • 信道门限:包括包检测门限(PD)、能量检测门限(ED)和NAV门限,这些门限会影响信道的可用性和干扰情况。
  • 干扰强度:表示AP之间的相互干扰。较高的干扰会降低AP的PHY速率。

2. 调制编码方案 MCS 与 SINR 关系建模

PHY速率受信干噪比(SINR, Signal to Interference plus Noise Ratio)的影响,SINR反映了信号与干扰加噪声的比率。PHY速率通常随着SINR的增加而提升。

3. PHY速率的建模

PHY速率由MCS(调制和编码方案)和NSS(空间流数量)共同决定。我们需要分别建立MCS和NSS的预测模型,基于RSSI、SINR、干扰等特征预测它们的值。

MCS选择模型

  • MCS反映了调制方案和编码率,决定了PHY速率的精细程度。可以将MCS建模为RSSI和SINR的函数:
  • 假设MCS随SINR线性增长,MCS阶数与SINR成正比:

其中, k 和 b 是待定的回归系数。

此公式表明,随着SINR 的增加,AP 可以选择更高的MCS 阶数。

NSS 选择模型

NSS表示空间流的数量。NSS的选择受RSSI和干扰情况影响。

NSS与RSSI和干扰强度的非线性关系可以用Sigmoid函数建模:

这个公式表明,当RSSI较高且干扰较小时,AP可以使用更多的空间流。

4. 信道干扰与PHY 速率的关系

AP 之间的干扰会直接影响PHY 速率。

假设AP 之间的干扰强度与RSSI 的差值成正比:

5. PHY 速率的整体建模

综合以上分析,PHY 速率与RSSI、SINR 和干扰强度的关系可以总结为:

6. 模型验证

通过对模型的回归分析,可以验证预测MCS 和NSS 的效果。

利用均方误差(MSE)和R^2 系数对模型进行评估:

2.3参考代码

# 导入必要的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler

# 读取数据(请替换为你的数据路径)
data = pd.read_csv('/mnt/data/training_set_2ap_loc0_nav82.csv')

# 展示数据基本信息
print(data.info())
print(data.head())

# 选择相关的特征
features = ['rssi', 'pd', 'ed', 'nav', 'interference', 'protocol']  # 假设数据集中有这些特征
target_mcs = 'mcs'  # MCS作为目标变量
target_nss = 'nss'  # NSS作为目标变量

# 去除空值
data = data[features + [target_mcs, target_nss]].dropna()

# 进行特征标准化
scaler = StandardScaler()
X = data[features]
y_mcs = data[target_mcs]
y_nss = data[target_nss]
X_scaled = scaler.fit_transform(X)

# 分割训练集和测试集
X_train, X_test, y_train_mcs, y_test_mcs = train_test_split(X_scaled, y_mcs, test_size=0.3, random_state=42)
X_train_nss, X_test_nss, y_train_nss, y_test_nss = train_test_split(X_scaled, y_nss, test_size=0.3, random_state=42)

# 使用随机森林回归模型预测MCS
model_mcs = RandomForestRegressor(n_estimators=100, random_state=42)
model_mcs.fit(X_train, y_train_mcs)

# 预测MCS
y_pred_mcs_train = model_mcs.predict(X_train)
y_pred_mcs_test = model_mcs.predict(X_test)

# 使用随机森林回归模型预测NSS
model_nss = RandomForestRegressor(n_estimators=100, random_state=42)
model_nss.fit(X_train_nss, y_train_nss)

# 预测NSS
y_pred_nss_train = model_nss.predict(X_train_nss)
y_pred_nss_test = model_nss.predict(X_test_nss)

# 评估MCS模型
train_mse_mcs = mean_squared_error(y_train_mcs, y_pred_mcs_train)
test_mse_mcs = mean_squared_error(y_test_mcs, y_pred_mcs_test)
train_r2_mcs = r2_score(y_train_mcs, y_pred_mcs_train)
test_r2_mcs = r2_score(y_test_mcs, y_pred_mcs_test)

print(f"MCS模型 - 训练集均方误差: {train_mse_mcs:.4f}, R²: {train_r2_mcs:.4f}")
print(f"MCS模型 - 测试集均方误差: {test_mse_mcs:.4f}, R²: {test_r2_mcs:.4f}")

# 评估NSS模型
train_mse_nss = mean_squared_error(y_train_nss, y_pred_nss_train)
test_mse_nss = mean_squared_error(y_test_nss, y_pred_nss_test)
train_r2_nss = r2_score(y_train_nss, y_pred_nss_train)
test_r2_nss = r2_score(y_test_nss, y_pred_nss_test)

print(f"NSS模型 - 训练集均方误差: {train_mse_nss:.4f}, R²: {train_r2_nss:.4f}")
print(f"NSS模型 - 测试集均方误差: {test_mse_nss:.4f}, R²: {test_r2_nss:.4f}")

# MCS预测可视化
plt.figure(figsize=(10, 6))
plt.scatter(y_test_mcs, y_pred_mcs_test, alpha=0.6, color='g')
plt.plot([y_test_mcs.min(), y_test_mcs.max()], [y_test_mcs.min(), y_test_mcs.max()], 'r--', lw=3)
plt.xlabel('真实MCS值')
plt.ylabel('预测MCS值')
plt.title('MCS真实值与预测值对比')
plt.grid(True)
plt.show()

# NSS预测可视化
plt.figure(figsize=(10, 6))
plt.scatter(y_test_nss, y_pred_nss_test, alpha=0.6, color='b')
plt.plot([y_test_nss.min(), y_test_nss.max()], [y_test_nss.min(), y_test_nss.max()], 'r--', lw=3)
plt.xlabel('真实NSS值')
plt.ylabel('预测NSS值')
plt.title('NSS真实值与预测值对比')
plt.grid(True)
plt.show()

# 可视化MCS的特征重要性
importances_mcs = model_mcs.feature_importances_
indices_mcs = np.argsort(importances_mcs)[::-1]
feature_names = np.array(features)

plt.figure(figsize=(10, 6))
sns.barplot(x=importances_mcs[indices_mcs], y=feature_names[indices_mcs], palette="viridis")
plt.title('MCS特征重要性')
plt.xlabel('重要性得分')
plt.ylabel('特征')
plt.grid(True)
plt.show()

# 可视化NSS的特征重要性
importances_nss = model_nss.feature_importances_
indices_nss = np.argsort(importances_nss)[::-1]

plt.figure(figsize=(10, 6))
sns.barplot(x=importances_nss[indices_nss], y=feature_names[indices_nss], palette="viridis")
plt.title('NSS特征重要性')
plt.xlabel('重要性得分')
plt.ylabel('特征')
plt.grid(True)
plt.show()


http://www.kler.cn/a/319682.html

相关文章:

  • 【postman】怎么通过curl看请求报什么错
  • 云安全之云计算基础
  • React Native 全栈开发实战班 - 核心组件与导航
  • 服务jar包增加高斯数据库驱动jar包
  • Wireshark中的length栏位
  • catchadmin-webman 宝塔 部署
  • 应用层 I(C/S模型、P2P模型、域名系统DNS)【★★】
  • can not run elasticsearch as root
  • 【前端】ES6:Proxy代理和Reflect对象
  • 【百日算法计划】:每日一题,见证成长(020)
  • 如何查看线程
  • 项目第一弹:RabbitMQ介绍
  • C语言之预处理详解(完结撒花)
  • JAVA链表
  • 网站在线客服插件配置
  • Stable Diffusion的高分辨率修复(Hires.fix)
  • 嵌入式单片机中can总线调试方法
  • 漏洞扫描工具使用
  • vulnhub(11):derpnstink(hydra爆破用户名和密码、验证的文件上传)
  • 多表查询。
  • 以太坊客户端Geth的介绍与搭建
  • (PySpark)RDD实验实战——取一个数组的中间值
  • 求一个数的因子数(c语言)
  • C语言 | Leetcode C语言题解之第416题分割等和子集
  • 自然场景文本定位系统源码分享
  • MFC -文件类控件