第【16】期--基于深度强化学习的RIS-MISO系统下联合波束成形与相移优化方法-python完整代码+参考文献
摘要
可重构智能表面(RIS)凭借其可编程调控无线信号传播的能力,被认为是第六代(6G)移动通信系统的关键技术之一。本文针对RIS辅助的多用户下行MISO系统,研究基站发射波束赋形矩阵与RIS相位偏移矩阵的联合设计问题,目标是在发射功率和单位模约束下最大化系统总速率。提出一种基于深度强化学习(DRL)的求解框架。将问题建模为马尔可夫决策过程(MDP),采用深度确定性策略梯度(DDPG)算法,通过试错交互与环境学习。状态由发射功率、接收功率、上一时刻动作及信道状态构成;动作为待优化的两个矩阵(实虚部分离);奖励为当前总速率,网络输出后通过归一化层严格满足物理约束。
仿真结果表明所提算法有效性
1 研究背景
- 6G与RI的兴起
为实现更智能、更绿色的第六代移动通信(6G),业界提出了可重构智能表面(RIS) 技术。RIS由大量低成本、低功耗的可编程超材料单元构成,能够独立调控入射电磁波的相位、幅度、频率甚至轨道角动量,从而“定制”无线传播环境。 - RIS辅助MIMO系统的优化难题
在RIS辅助的下行多用户MISO系统中,需要联合优化基站的发射波束赋形矩阵与RIS的相位偏移矩阵,以提升系统总速率、能量效率或覆盖范围。该联合优化问题通常是非凸、高维、带单位模约束的,传统数学方法(如交替优化、半定松弛、流形优化)计算复杂度高、依赖精确信道模型、收敛性能受初始值影响大。 - 人工智能与深度强化学习的契机
近年来,深度强化学习在复杂无线通信系统优化中展现出巨大潜力。DRL通过智能体与环境的试错交互,直接学习最优策略,无需显式数学建模,适合处理非凸、高维、动态变化的优化问题。
2 系统与问题建模

- 一个配备 M 根天线的基站
- 一个配备 N 个反射单元的 被动RIS
- K个单天线用户
-
- BS 与用户之间的直射链路被完全阻挡,信号仅通过 RIS 反射传输
令G表示基站波束成形矩阵 ,Φ表示RIS的相移矩阵, H1表示从基站到RIS的信道矩阵,hk表示从RIS到用户k的信道向量,则第k个用户的接收信号为
信干噪比为
- BS 与用户之间的直射链路被完全阻挡,信号仅通过 RIS 反射传输
优化目标为最大化多用户的和速率,考虑功率约束和被动RIS,问题为

- 目标函数是非凸的,RIS单位模约束也是非凸的
- 大多数已有工作采用交替优化,缺点为交替迭代可能慢、依赖初始值、且不能保证全局最优
3 强化学习方法
1关键设计,马尔可夫决策过程:**
- 状态:所有的信道状态信息CSI: H1,hk;各个用户的发射波束成形;各个用户的接收功率;上一时刻的的动作;
1、CSI是问题的核心参数:虽然在固定环境下信道不变,但智能体需要知道信道才能推断何种动作能产生高奖励。
2、上一时刻的动作:使智能体知道当前解的“位置”,便于做微小调整。没有历史动作,网络只能依赖当前功率间接推断,效率更低。
3、功率信息:反映当前波束赋形和相位偏移对每个用户的信号与干扰的影响,是计算奖励的基础。 - 动作:一般为待优化的变量,为波束成形和相移矩阵G和Φ;
- 奖励:即优化问题的目标函数。
值得注意的是:
- 1、信道、波束、相移均为复数,通过,而神经网络的输入必须是实数。将复数拆分为实部和虚部,可以保留完整的相位与幅度信息。文中做了拆解:
-
-

2、 考虑到功率约束和单位模约束是连续性优化变量,传统的DQN无法是贪心策略,无法输出连续性动作,故采用了DDPG
3、功率约束有上限,相移约束是0-2pi,正好在actor网络的输出时做上限的限制,这样设计完美等价于原始优化问题的两个约束条件了,不需要在奖励函数里面额外新增违反约束的惩罚了。
3.2 经典的DDPG算法
定义好MDP后,直接把MDP过程丢进经典的DDPG算法中,没啥额外的设计。


4 仿真结果
| 参数 | 描述 | 取值 |
|---|---|---|
γ |
未来奖励的折扣因子(discount rate) | 0.99 |
μc |
训练 Critic 网络的学习率(learning rate) | 0.001 |
μa |
训练 Actor 网络的学习率 | 0.001 |
τc |
目标 Critic 网络的更新率(软更新系数) | 0.001 |
τa |
目标 Actor 网络的更新率 | 0.001 |
λc |
训练 Critic 网络学习率的衰减率 | 0.00001 |
λa |
训练 Actor 网络学习率的衰减率 | 0.00001 |
D |
经验回放缓冲区(replay buffer)大小 | 100000 |
N |
总训练 episodes 数 | 5000 |
T |
每个 episode 的最大时间步数 | 20000 |
W |
每次采样的小批量(mini-batch)大小 | 16 |
U |
目标网络与训练网络的同步步数间隔 | 1 |
仿真基本围绕不同的系统建模参数与DDPG参数修改,进行验证。


关键的环境设计代码:
import numpy as np
class RIS_MISO(object):
def __init__(self,
num_antennas,
num_RIS_elements,
num_users,
channel_est_error=False,
AWGN_var=1e-2,
channel_noise_var=1e-2):
self.M = num_antennas
self.L = num_RIS_elements
self.K = num_users
self.channel_est_error = channel_est_error
assert self.M == self.K
self.awgn_var = AWGN_var
self.channel_noise_var = channel_noise_var
power_size = 2 * self.K
channel_size = 2 * (self.L * self.M + self.L * self.K)
self.action_dim = 2 * self.M * self.K + 2 * self.L
self.state_dim = power_size + channel_size + self.action_dim
self.H_1 = None
self.H_2 = None
self.G = np.eye(self.M, dtype=complex)
self.Phi = np.eye(self.L, dtype=complex)
self.state = None
self.done = None
self.episode_t = None
def _compute_H_2_tilde(self):
return self.H_2.T @ self.Phi @ self.H_1 @ self.G
def reset(self):
self.episode_t = 0
self.H_1 = np.random.normal(0, np.sqrt(0.5), (self.L, self.M)) + 1j * np.random.normal(0, np.sqrt(0.5),
(self.L, self.M))
self.H_2 = np.random.normal(0, np.sqrt(0.5), (self.L, self.K)) + 1j * np.random.normal(0, np.sqrt(0.5),
(self.L, self.K))
init_action_G = np.hstack((np.real(self.G.reshape(1, -1)), np.imag(self.G.reshape(1, -1))))
init_action_Phi = np.hstack(
(np.real(np.diag(self.Phi)).reshape(1, -1), np.imag(np.diag(self.Phi)).reshape(1, -1)))
init_action = np.hstack((init_action_G, init_action_Phi))
Phi_real = init_action[:, -2 * self.L:-self.L]
Phi_imag = init_action[:, -self.L:]
self.Phi = np.eye(self.L, dtype=complex) * (Phi_real + 1j * Phi_imag)
power_t = np.real(np.diag(self.G.conjugate().T @ self.G)).reshape(1, -1) ** 2
H_2_tilde = self._compute_H_2_tilde()
power_r = np.linalg.norm(H_2_tilde, axis=0).reshape(1, -1) ** 2
H_1_real, H_1_imag = np.real(self.H_1).reshape(1, -1), np.imag(self.H_1).reshape(1, -1)
H_2_real, H_2_imag = np.real(self.H_2).reshape(1, -1), np.imag(self.H_2).reshape(1, -1)
self.state = np.hstack((init_action, power_t, power_r, H_1_real, H_1_imag, H_2_real, H_2_imag))
return self.state
def _compute_reward(self, Phi):
reward = 0
opt_reward = 0
for k in range(self.K):
h_2_k = self.H_2[:, k].reshape(-1, 1)
g_k = self.G[:, k].reshape(-1, 1)
x = np.abs(h_2_k.T @ Phi @ self.H_1 @ g_k) ** 2
x = x.item()
G_removed = np.delete(self.G, k, axis=1)
interference = np.sum(np.abs(h_2_k.T @ Phi @ self.H_1 @ G_removed) ** 2)
y = interference + (self.K - 1) * self.awgn_var
rho_k = x / y
reward += np.log(1 + rho_k) / np.log(2)
opt_reward += np.log(1 + x / ((self.K - 1) * self.awgn_var)) / np.log(2)
return reward, opt_reward
def step(self, action):
self.episode_t += 1
action = action.reshape(1, -1)
G_real = action[:, :self.M ** 2]
G_imag = action[:, self.M ** 2:2 * self.M ** 2]
Phi_real = action[:, -2 * self.L:-self.L]
Phi_imag = action[:, -self.L:]
self.G = G_real.reshape(self.M, self.K) + 1j * G_imag.reshape(self.M, self.K)
self.Phi = np.eye(self.L, dtype=complex) * (Phi_real + 1j * Phi_imag)
power_t = np.real(np.diag(self.G.conjugate().T @ self.G)).reshape(1, -1) ** 2
H_2_tilde = self._compute_H_2_tilde()
power_r = np.linalg.norm(H_2_tilde, axis=0).reshape(1, -1) ** 2
H_1_real, H_1_imag = np.real(self.H_1).reshape(1, -1), np.imag(self.H_1).reshape(1, -1)
H_2_real, H_2_imag = np.real(self.H_2).reshape(1, -1), np.imag(self.H_2).reshape(1, -1)
self.state = np.hstack((action, power_t, power_r, H_1_real, H_1_imag, H_2_real, H_2_imag))
reward, opt_reward = self._compute_reward(self.Phi)
done = opt_reward == reward
return self.state, reward, done, None
def close(self):
pass

5 总结
1、首次(2020年)将将DRL用于RIS辅助多用户MISO系统中的联合波束赋形与相位偏移设计。
2、drl的设计比较简单高效,便于进行深度强化学习进行无线通信资源分配的研究入门。
3、后续研究优化方向可从csi无法实时获取,时变信道,网络结构,多智能体协同等等角度优化。
参考文献:
.Huang, R. Mo and C. Yuen, “Reconfigurable Intelligent Surface Assisted Multiuser MISO Systems Exploiting Deep Reinforcement Learning,” in IEEE Journal on Selected Areas in Communications, vol. 38, no. 8, pp. 1839-1850, Aug. 2020, doi: 10.1109/JSAC.2020.3000835.
更多推荐


所有评论(0)