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

server/2024/9/23 18:27:51/

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.ppmy.cn/server/120914.html

相关文章

【CSS Tricks】在css中尝试一种新的颜色模型HSL

目录 引言浏览器支持性HSL介绍HSL相较于RGB的优势在哪?HSL在网页设计的应用场景如何用代码转换hslRGB转HSLHSL转RGBHEX格式的互转 总结 引言 本篇不会对rgb颜色模型或是hsl颜色模型的显色原理进行深入的探究,仅从前端开发角度去论述在工作中选择哪种比较…

U盘显示未被格式化的全面解析与数据救援策略

一、现象直击:U盘显示未被格式化的困境 在日常的数字生活中,U盘作为便携的存储工具,承载着大量重要数据。然而,当您满怀期待地将U盘插入电脑,却迎面碰上“未被格式化”的警告时,无疑是一场突如其来的数据危…

基于机器学习的注意力缺陷/多动障碍 (ADHD)(python论文+代码)HYPERAKTIV

简述 医疗保健领域的机器学习研究往往缺乏完全可重复性和可比性所需的公共数据。由于患者相关数据附带的隐私问题和法律要求,数据集往往受到限制。因此,许多算法和模型发表在同一主题上,没有一个标准的基准。因此,本文提出了一个公…

红外图像绝缘子识别数据集

红外图像绝缘子识别数据集,数据集一共919张图片,标注为voc格式,可以转yolo格式 数据集名称 红外图像绝缘子识别数据集 (Infrared Insulator Recognition Dataset, IIRD) 数据集描述 IIRD是一个专为电气工程领域设计的小规模红外图像数据集…

【贪心算法】贪心算法二

贪心算法二 1.最长递增子序列2.递增的三元子序列3.最长连续递增序列 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃😃 1.最长递增子序列 题目链…

word批量裁剪图片,并调整图片大小,不锁定纵横比

在word中有若干图片待处理,裁剪出指定内容,调整成指定大小。如下是待处理的图片: 这时,选择视图,选择宏,查看宏 选择创建宏 添加cut_picture代码如下,其中上、下、左、右裁剪的橡塑尺寸根据自己…

解决Echarts:宽度100%,渲染的宽度却是100px

为什么我们宽度设置了100%&#xff0c;结果变为了100px&#xff1f; 源码这里没有获取到clientWidth&#xff0c;会将设置的width:100%转换称100px 解决办法&#xff1a; <div ref"numberPieRef"></div>let numberPieRef ref(null); let myChart nu…

电脑串口和手机蓝牙BLE串口数据包通信调试工具

1&#xff0c;支持HEX收发 2&#xff0c;支持文本收发 3&#xff0c;支持自定义按钮发送自定义命令和数据包 4&#xff0c;支持自定义解析包内任意位置1~4字节转int并显示 5&#xff0c;自定义json举例说明 [ {"name":"1234命令","type":"b…