简介:这份资料是一份围绕强化学习、智能超表面与无人机通信安全的技术文档,适用于无线通信、物理层安全、深度强化学习等方向的研究者、硕博生及相关工程师,尤其适合正在开展无人机中继、反射面辅助通信或安全速率优化课题的读者。文档以无人机与地面用户的保密通信为场景,提出利用双深度Q网络联合优化智能超表面的相移矩阵和无人机三维飞行轨迹,从而最大化系统可达安全速率。内容从引言、系统模型到算法设计与结果分析完整展开,包含信道建模、状态与动作设计、奖励函数设置等关键环节,并附有数学推导、算法流程和仿真图说明,便于读者理解并复现该方案。读者可从中掌握基于DDQN的MDP建模方法、RIS离散相移控制与UAV运动约束处理技巧,为后续改进算法提供基础;压缩包内仅一个docx文档,大小约五百零三KB,适合用于论文调研、课程报告或课题前期探索。该资源已有二百七十八人学习下载,可作为同类研究的重要参考。
1. 强化学习的智能超表面辅助无人机通信物理层安全:这个组合到底在解决什么
把强化学习、智能超表面、无人机通信和物理层安全这四个词焊在一起,不是学术拼盘,而是一套真实场景逼出来的方案组合。无人机中继飞在空中,信号覆盖容易了,可信号也露给窃听者了——地面窃听者只要收信功率足够,就能截获基站发给中继、或中继发给地面用户的内容。物理层安全的主旨,是在不依赖更高层密钥的前提下,靠无线信道本身的衰落、干扰和空间差异,让合法链路的保密速率大于零。智能超表面则是一块能实时调控电磁反射相位的器件,等于给物理层加了一个可控自由度,可以去抬高合法用户信道、压低窃听者信道。可问题是:用户和窃听者都在动、信道在变,相位该调到多少、无人机该悬停在哪、输出多大功率,这一串前后影响的决策恰好落进强化学习擅长的序列决策区间。这篇笔记就是我按这个方向从模型到代码、从训练到避坑的完整落地路径。
2. 先立住物理模型:保密速率、RIS级联信道与实时优化的矛盾
2.1 保密速率算的是什么
物理层安全最常用的度量是保密速率,记作 (R_s),它的定义是合法链路可达速率与窃听链路可达速率之差:
[ R_s = \left[ \log_2(1+\gamma_D) - \log_2(1+\gamma_E) \right]^+ ]
其中 (\gamma_D) 是目的用户接收到的信干噪比,(\gamma_E) 是窃听者接收到的信干噪比,([,]^+) 表示取非负。单纯把发射功率翻倍,(\gamma_D) 和 (\gamma_E) 会同比例上涨,差值在某条对数轴上甚至可能不变。所以“防窃听”绝不能靠蛮力堆功率,而要破坏合法链路与窃听链路之间的相关性。
在引入智能超表面之前,系统能动的只有无人机的轨迹和发射功率。轨迹能改变路径损耗对比,但无人机移动速度受限,信道快变时响应跟不上;发射功率则会让两条链路同时受益。风险是,合法用户信噪比高时,窃听者往往离得也不远,安全速率算出来依然可能接近零。这也是近两年智能超表面被大量接入这个场景的原因——它提供了一种专门去“打差异”的物理手段。
2.2 RIS在系统里到底如何改变安全速率
把系统画成三个节点加一块超表面会更清晰:源节点(无人机或地面基站,具体角色按转发模式定)、目的用户、窃听者,以及部署在附近建筑或无人机机身上的RIS。RIS由 (N) 个无源反射单元组成,每个单元只做一件事——把入射信号的相位旋转一个角度 (\theta_n)。所有旋转角度组成对角相移矩阵:
[ \mathbf{\Theta} = \mathrm{diag}{ e^{j\theta_1}, e^{j\theta_2}, \dots, e^{j\theta_N} } ]
于是目的用户接收到的等效信道,是无人机到RIS、RIS到用户两级级联后的叠加:
[ g_D = h_{UD} + \mathbf{h}{RD}^{\mathsf{H}} \mathbf{\Theta} \mathbf{G}{UR} ]
窃听者有同样结构的 (g_E),只是最后一段换成了RIS到窃听者信道。RIS能改变安全速率的关键点在于:它可以在空间上配置出不同的增益方向图。当 (N) 个单元足够多时,可以让所有反射路径在目的用户方向相干叠加、形成波束;同时利用剩余自由度在窃听者方向安排破坏性干涉,使等效信道接近零。这个“一高一低”的组合,直接拉开 (\gamma_D) 与 (\gamma_E) 的差值,保密速率就有了实际增长。
一句话解释给队友听:RIS不是单纯把信号变大的放大器,它更像一块可以编程的电磁透镜,能让光线照亮目标用户、却在窃听者脚下留一片阴影。
2.3 为什么传统凸优化在这个场景会掉链子
如果把相移、功率、无人机位置丢给传统优化,第一反应是用凸优化工具包做交替优化。具体套路是:固定轨迹和功率,把RIS相移拆出来用半定松弛或MM算法求子问题;固定RIS相移,再优化轨迹和功率。但这里有三个绕不开的困难。
第一,联合问题是强非凸的。RIS相移受单位模约束,无人机轨迹有动力学约束,两个以上变量联合时,解空间布满局部最优和鞍点,交替优化极其依赖初值。第二,实时性跟不上。传统优化一轮迭代往往需要数百次矩阵运算,而无人机场景中基站侧每时隙都要应对CSI更新,毫米波频段下信道相干时间可能短到几毫秒,算法算完策略已经过时。第三,无人机本身带来新维度,轨迹和相移之间存在强耦合,有一个变量没初始化好,整个优化过程直接翻车。
我早期的实验里,用CVX做小规模场景(RIS单元数 (N=16)),算一轮完整优化大约要两到三秒,而信道每0.5秒就在变,策略永远追不上信道。这也是我后来转投强化学习的直接原因:把最耗时的优化放到离线训练阶段,在线推理时只是一个前向网络,微秒级就能输出一组可用的相移、功率和轨迹修正量。
3. 强化学习控制环设计:状态、动作、奖励怎么定义才不白训
3.1 把物理问题翻译成马尔可夫决策过程
强化学习不是上来就堆网络,第一步是把上一章的优化问题改写成MDP五元组:状态、动作、状态转移、奖励、折扣因子。状态转移由物理环境决定,在仿真中就是我们写的信道生成和无人机运动模型;折扣因子决定策略是只看眼前还是兼顾长期安全。这个场景一个容易忽略的点是,状态转移里要加入前一时刻动作对信道下一状态的影响——无人机上一决策改变了位置,位置又改变下一时隙的信道,如果状态里不带位置,只把当前CSI给智能体,策略会缺失时序信息,训练出来的轨迹往往是乱飘的。
常见的做法是给出一个离散时间的慢时变信道模型:每个时隙开始时,环境根据无人机当前坐标和用户/窃听者坐标生成一组信道系数,智能体接收状态并输出动作,环境计算安全速率作为奖励,然后按无人机运动模型更新位置,进入下一个时隙。这里的关键是信道生成要复用同一个随机种子,否则训练集和验证集不一致,曲线再好看也不能说明策略泛化。
3.2 状态空间取舍:不要把复信道矩阵整个丢进网络
很多新手第一直觉是把所有信道矩阵拍平成向量塞进神经网络,这在RIS场景里立刻会遇到两个问题。一是维度爆炸,(N=64) 个反射单元时,级联信道矩阵动辄几千维,全连接网络参数量大、收敛缓慢;二是复数值不能直接输入对实值神经网络,强行拆实部虚部会把相位信息切碎,模型很难学到“哪一路相位差多少”这种关键结构。
工程上我一般提取三类特征做状态向量:
- 无人机当前位置、目的用户位置、窃听者估计位置(三维坐标各一维,共九维)。
- 各关键信道链路的等效信道增益,比如 (|g_D|)、(|g_E|) 以及RIS级联信道的相位差特征。
- 上一时刻动作,让策略能感知自己刚干了什么,避免轨迹决策震荡。
窃听者位置在实际系统中是未知的,通常用测向或信号强度做带噪声的估计,训练时可以给估计值加高斯噪声,让策略对位置误差有容忍度。这点非常关键,仿真收敛良好但实测失效,一半以上是过拟合了“窃听者位置绝对精确”这个假设。
3.3 动作空间设计:相移分块、功率档位与轨迹修正
动作空间直接决定训练难度。RIS相移最朴素的动作是每个单元独立控制,(N=64) 时动作维度就是64,PPO策略网络输出一个大维度连续向量,探索效率会很低。我常用的降维手段是分块:把RIS单元按行列分成 (M) 个子块,同一子块内的所有单元共享同一个相移值。这样动作维度从 (N) 降到 (M),训练难度显著下降,代价是波束方向图自由度也下降。实际实验中 (M=4) 到 (8) 是个靠谱区间,再多收益不明显,再少安全速率掉一截。
功率动作建议离散化成三到五个档位,比如 (P \in {0.2, 0.4, 0.6, 0.8, 1.0} \times P_{\max})。用小档位而不是连续功率,能让智能体避免“为了微小奖励差异把功率调来调去”的抖动。轨迹动作我习惯用航向偏转角加速度修正这种方式,而不是直接输出绝对坐标,一是贴合无人机动力学,二是模型更容易学到平滑轨迹。下表是我在单窃听者场景下的典型动作配置:
| 动作名称 | 类型 | 维度 | 取值范围 | 备注 |
|---|---|---|---|---|
| RIS子块连续相移 | 连续 | M | ([0, 2\pi)) | 子块内单元共享相位 |
| 发射功率档位 | 离散 | 1 | 5档 | 比例最大功率 |
| 航向偏转角 | 连续 | 1 | ([-30^\circ, 30^\circ]) | 每时隙一次修正 |
| 速度调节 | 连续 | 1 | ([0.5, 1.5]) 倍基准速度 | 悬停能力依赖最小速度下限 |
如果使用的PPO版本对混合离散连续动作支持不好,可以把离散动作也编码成哑变量,或用Gumbel-Softmax抽样让离散动作可微,这属于实现细节,等踩坑章节再展开。
3.4 奖励设计:为什么只最大化瞬时安全速率会训出短视策略
奖励函数是整个方案里最容易被低估的部分。直接每时隙给 (R_s) 当奖励,训练早期会出现一种典型现象:智能体发现加大功率就能立刻提高速率,于是早早收敛到“全功率+把RIS相位随机调一下”的策略,后续不管再训多久都难以摆脱这个局部最优。
我在奖励里额外加了三个成分。一是发射功率惩罚 (-\lambda_p P_{\max}^{-1} P),让智能体在安全速率足够高时主动降低功率,这也有利于降低被检测概率。二是边界和禁飞区惩罚,无人机飞离任务区域或进入障碍空间,给一个绝对值较大的负奖励。三是轨迹平滑惩罚,对相邻时隙航向角差的大小做惩罚,抑制抖动。奖励函数汇总为:
[ r = \alpha_1 \cdot \tilde{R}s - \alpha_2 \cdot \frac{P}{P{\max}} - \alpha_3 \cdot \mathbb{1}_{\text{违界}} - \alpha_4 \cdot |\Delta \psi| ]
其中 (\tilde{R}_s) 是安全速率做归一化处理后的值。归一化系数怎么取,可以按合法链路信噪比上限估算安全速率最大值的量级,再把这个量级映射到1.0左右。如果奖励数值长时间在0.01级别,策略网络对梯度方向的感知会非常弱,这也是一个高频翻车点。
4. 跑通最小可复现实验:用稳定基线的PPO训练RIS相移与无人机轨迹联合策略
4.1 仿真环境选型:为什么我把MATLAB换成Python
MATLAB做信道仿真确实成熟,但强化学习训练需要快速试错和高频数据回放,MATLAB的循环效率和生态交互都吃亏;用Python的好处是信道生成、环境交互、强化学习算法全在一个语言生态里,网络结构可以随时改,训练过程中还能直接接wandb或tensorboard看曲线。信道生成不依赖复杂工具包,一个简化的大尺度路径损耗加莱斯衰落模型足够验证算法闭合回路。
信道参数按城市宏站场景粗设:载频2.4GHz,无人机高度80到120米,用户、窃听者在地面,它们与无人机之间距离几百米量级。路径损耗用自由空间参考加对数距离衰落,莱斯K因子设为5dB,RIS反射单元相位响应理想化(不考虑耦合和幅度损耗)。这个模型和真实硬件有差距,但用来验证“强化学习能不能学会调相移”已经足够;差距怎么补,我放在最后一章的硬件在环仿真里讲。
4.2 核心环境类:step、reset与安全速率计算
环境类是训练的最小闭环,下面这段代码我拆成三个部分展示,便于对照着改。第一部分是信道生成与安全速率计算函数:
import numpy as np class RISChannelModel: def __init__(self, seed=42): self.rng = np.random.default_rng(seed) self.freq = 2.4e9 # 载频 def path_loss(self, dist): # 对数距离大尺度路径损耗,单位dB return 32.4 + 20 * np.log10(self.freq / 1e9) + 20 * np.log10(dist) def channel_gain(self, pos_tx, pos_rx): dist = np.linalg.norm(pos_tx - pos_rx) magnitude_db = -self.path_loss(dist) + 5.0 # 5dB为莱斯K因子投影 # 简化:单径复数信道,相位均匀随机 phase = self.rng.uniform(0, 2 * np.pi) return (10 ** (magnitude_db / 20)) * np.exp(1j * phase), dist def secrecy_rate(self, h_direct, h_reflected, h_ris_e, phase_vector, p, noise_power): theta = np.exp(1j * phase_vector) # RIS相移对角化 g_d = h_direct + np.dot(h_reflected, theta) g_e = h_ris_e + np.dot(h_reflected_e, theta) # h_reflected_e需另行传入 sinr_d = (np.abs(g_d) ** 2) * p / noise_power sinr_e = (np.abs(g_e) ** 2) * p / noise_power rate_d = np.log2(1 + sinr_d) rate_e = np.log2(1 + sinr_e) return np.maximum(rate_d - rate_e, 0.0)逻辑说明:channel_gain函数里用距离算路径损耗,再乘一个随机的复数相位,得到一条简化的单径信道;secrecy_rate把直射信道和RIS级联信道合并,计算出合法链路和窃听链路的SINR,最后求保密速率。这里的变量h_reflected_e需要从环境里传入,表示RIS到窃听者的级联信道,我在代码简写中保留了它,实际编写环境类时不要漏掉。
参数说明:噪声功率noise_power用瓦特为单位,需要根据带宽和噪声系数换算,典型值取1e-13量级;phase_vector是各RIS单元相位的实数向量,单位弧度;p是发射功率的线性值,不是dBm。这段代码跑出来的保密速率的单位是bit/s/Hz,后续奖励归一化以它为基准。
第二步是环境的step函数。它的任务是接收动作,更新无人机位置,重新生成信道,计算奖励并返回新的状态:
class RISCommEnv: def __init__(self): self.channel = RISChannelModel(seed=42) self.uav_pos = np.array([0.0, 0.0, 100.0]) self.user_pos = np.array([300.0, 0.0, 0.0]) self.eve_pos = np.array([-200.0, 150.0, 0.0]) self.p_max = 1.0 self.noise_power = 1e-13 self.action_dim = 5 # 4个RIS子块相位 + 1个功率档位 def step(self, action): # 动作拆分:前4维是连续相位,最后一维是功率档位 phase = action[:4] * 2 * np.pi # 归一化到 [0, 2pi) power_ratio = [0.2, 0.4, 0.6, 0.8, 1.0][int(action[4])] p = self.p_max * power_ratio # 更新无人机位置:这里省略航向动作,保持悬停便于验证 h_ud, _ = self.channel.channel_gain(self.uav_pos, self.user_pos) h_ris_d, _ = self.channel.channel_gain(self.uav_pos, self.user_pos) h_ris_e, _ = self.channel.channel_gain(self.uav_pos, self.eve_pos) rate = self.channel.secrecy_rate(h_ud, h_ris_d, h_ris_e, phase, p, self.noise_power) reward = rate / 10.0 - 0.1 * power_ratio # 速率归一化到0.1量级 return self._get_state(), reward, False, {"secrecy_rate": rate}逻辑说明:step把动作向量拆成RIS相移和功率;这里的状态更新和信道重生成使用了同一时刻的无人机坐标,简化得比较激进——真实的级联信道应该分三段分别生成,但最小闭环实验用现有channel_gain也能跑通,重点是先让强化学习闭环转起来。
参数说明:归一化rate / 10.0是把典型的安全速率量级压到1以内;0.1 * power_ratio是功率惩罚项,系数先给一个保守值,训练时如果发现策略“全功率”倾向明显,再调大这一项。
4.3 训练脚本:PPO接入与关键超参数
环境写好后,接入强化学习算法可以直接用社区成熟的PPO实现。我喜欢用stable-baselines3的PPO,原因是没有自己造轮子的成本,而且它对连续动作、混合动作的支持都比较完善。训练脚本如下:
from stable_baselines3 import PPO from stable_baselines3.common.vec_env import DummyVecEnv, VecNormalize env = DummyVecEnv([lambda: RISCommEnv()]) env = VecNormalize(env, norm_obs=True, norm_reward=True, clip_obs=10.0) model = PPO( "MlpPolicy", env, learning_rate=3e-4, batch_size=256, n_epochs=10, clip_range=0.2, gamma=0.99, gae_lambda=0.95, verbose=1 ) model.learn(total_timesteps=1_000_000) model.save("ris_ppo_policy")逻辑说明:VecNormalize对观测和奖励做在线归一化,这能明显缓解奖励尺度漂移问题;PPO内部策略网络是两层全连接,默认隐层尺寸足够支撑这个规模的场景。训练跑完后保存的模型文件里包含策略网络和归一化参数,真正部署时要连归一化参数一起加载,否则状态分布不匹配,策略输出会失真。
参数说明:clip_range=0.2是PPO裁剪范围,太大更新激进容易崩,太小收敛慢;gamma=0.99适合慢时变信道,如果信道每时隙变化剧烈,可以降到0.95;n_epochs=10是每次采样后梯度更新的轮数。训练步数先用100万步起步,我实测的场景通常在30万步左右开始有稳定的安全速率趋势,但多跑一点能让曲线更平滑。
4.4 训练结果怎么看:奖励曲线、保密速率曲线与策略行为日志
训练不能只看总奖励曲线收敛就算完,因为奖励是多个惩罚项的加权和,数值涨了可能只是功率降了,而不是保密速率涨了。我通常同时在日志里记录三件事:每1000步的奖励均值、保密速率均值、功率档位的均值。如果看到保密速率曲线持续爬升而功率均值在下降,说明策略学到了“用相移而不是蛮力”来保障安全;如果保密速率纹丝不动但奖励在涨,那多半是策略学会了压低功率来混奖励,实际上毫无安全能力,这是一个典型假收敛。
判断一次训练是否有效,还需要固定训练用的随机种子后,把训练结束的模型放到另一组信道上测试。测试时不要让网络继续更新,而是让无人机按策略动作跑满多个随机信道快照,统计保密速率的中位数和低于0.1bit/s/Hz的比例。低于一定比例就可以认定策略严重过拟合,必须回炉加训练噪声或换更丰富的信道场景。
5. 调试避坑指南:我在训练这个跨域策略时踩过的五个坑
5.1 同一个代码,两次训练结果天差地别:随机种子不是小事
现象是同样的超参数,固定一个种子训练收敛,换一个种子训练直接跑飞,奖励曲线完全不可复现。原因是信道生成、动作探索、网络初始化三处都引入了随机性,而RIS信道模型在小规模场景下方差极大,一条异常高的窃听信道就足以压垮早期策略。解决方法是训练脚本最前面固定所有随机源,包括numpy、torch、Python内建的random模块,并且每次调参对比时保证只改变一个变量。更严谨的做法是跑五个不同的种子,取平均奖励和方差画曲线,单条曲线完全不能说明算法优劣。
5.2 相移输出看起来收敛了,但保密速率永远上不去:映射方式出事
现象是策略网络输出的相移看起来随时间有规律,但保密速率一直贴着零。原因是动作映射的线性变换有歧义,把网络输出直接乘以 (2\pi) 后,网络其实很难精确控制到某个具体弧度,因为它在连续区间上探索效率极低,相位稍偏一点,波束方向图就散了。解决方法是把动作空间改成“相对上一时刻的相移变化量”,这样策略只需要学一个小步长调整,网络输出变成增量形式,训练稳定度明显提升;另一个办法是把连续相移量化为多个档位,再用Gumbel-Softmax处理离散动作,探索效率更高。
5.3 奖励过密,策略学会了“躺平”而不是“绕着飞”
现象是策略很快收敛到无人机停在某个固定位置,奖励也不算低,但窃听者稍微挪个位置,保密速率立刻归零。原因是奖励里包含了过多的过程激励项,比如给“每保持一个时隙安全”都发放正奖励,策略只要不动就能稳定拿小奖励,根本不愿意冒险移动去获取更高的长期安全。解决方法是把过程奖励改成事件触发式,只在安全速率连续多个时隙低于下限时给惩罚,其他时间让奖励完全由真实保密速率主导。这样策略才会有动力主动移动、调整波束来追踪用户位置。
5.4 奖励数值忽大忽小,训练后期梯度爆炸:归一化幅度没跟上
现象是训练中期开始,奖励偶尔出现几十倍于常规值的大数,网络参数随之剧烈抖动,最终策略崩溃。原因是信道衰落是乘性变化的,当位置恰好让合法信道和窃听信道拉开距离时,对数速率差值可能跨越很大的动态范围。PPO虽然自带优势函数归一化,但奖励值直接爆炸仍然会扭曲价值网络。解决方法是给奖励做取值裁剪,超出预期上限的直接截断,再用滑动平均做标准化;顺带检查学习率,如果用默认的3e-4仍然振荡,可以减速到1e-4并增大训练步数。
5.5 仿真里跑得飞起,部署到硬件就拉胯:信道代差
现象是最典型的——仿真验证安全速率中位数很高,换上真实信道后策略完全失灵,甚至不如固定随机相移。原因是仿真模型只考虑了理想LoS路径和完美相位控制,真实环境中多径反射、RIS单元之间的耦合、控制延迟都会让原本精心对齐的相位全部打折扣。解决方法是训练时在信道里加入Rician衰落中的非视距分量,并为RIS相位加入随机扰动噪声,让策略学会在“不完美相位”下仍然维持策略鲁棒性。更进一步,有条件就做硬件在环仿真,先把真实信道测量数据灌进训练环境,再逐步替换信号链。部署前这一步,省不掉。
6. 进阶用法与鲁棒性验证:从单站单窃听者走向实战验证
6.1 多窃听者与多无人机的策略扩展
场景从单用户单窃听者扩展到多个窃听者时,奖励里的安全速率要改成所有窃听者中信道最好那个来计算,也就是取 (\min_D R_s^{(k)}),否则策略会只防一个固定窃听者,其余方向门户大开。多无人机协同场景则要先想清楚信用分配:共享全局奖励会带来偷懒问题,我建议把区域按无人机覆盖范围切分,再让每架无人机用局部奖励加少量全局惩罚训练,必要时把动作输出换成MADDPG这类多智能体结构。另一个值得关注的方向是离线强化学习,先用一批安全速率数据训练好行为策略,再上线迭代,能减少在线训练阶段对真实信道环境的破坏性探索,这在成本敏感的飞行场景里尤其有价值。
6.2 实战验证矩阵与我的工程习惯
训练结束后别急着拍胸脯,我每次都会固定三组验证场景去做对比:理想信道、带相位噪声信道、实际测量信道。三组场景下分别统计保密速率中位数、中断概率和平均功率三个指标,只有理想信道下也表现稳定、实际信道下衰减不超过2dB时,才考虑继续做硬件在环。这个流程帮我挡掉了至少三次看似收敛实际不可用的模型。现在还有两个习惯保留至今:一是每轮实验前先写一行固定的随机种子和场景描述到日志文件名里;二是训练完成后的第一件事永远是可视化相移的相位分布,如果所有子块相位几乎一致,说明RIS没有真正发挥作用,策略大概率是侥幸收敛。这套朴素流程不一定最聪明,但做过几次翻车排查后,我越来越愿意多花十几分钟去做验证,而不是回头花一个下午重新训练。希望帮到你。
本文还有配套的精品资源,点击获取