【前情提要】有可能写的不对,发出来想做个纪念,也算是一种分享。
雷达干扰决策是干扰方在侦察雷达信息的基础上,通过观测敌方雷达模式的变化,选择合适的干扰目标,合理地分配干扰资源,并根据雷达的工作模式选择对应干扰样式的过程。
基于强化学习的雷达干扰决策的具体过程为:
干扰方先侦察雷达辐射信号、提取雷达特征并识别雷达工作模式。然后根据工作模式的威胁等级,同时观测雷达前后工作模式的变化得到的干扰收益,可以选择针对当前雷达工作模式的干扰样式并实施干扰。雷达受到干扰后,因其自身的抗干扰措施,具备实时更新工作模式的能力。
基于强化学习的雷达干扰决策模型如下:
强化学习的基本要素为一个四元组(X,A,P,R),其中X表示外界环境的状态空间,A是Agent的动作空间,P是状态转移概率矩阵,R是即时回报矩阵。在基于深度强化学习的雷达干扰决策模型里,雷达对应是环境,雷达在收到干扰方实施干扰后,我们考虑雷达通过改变工作模式进行抗干扰。
在强化学习算法中,有以下四个要素:
- 环境模型(model):对环境信息的完整描述,包括:状态转移概率矩阵、即时回报矩阵等。
- 策略(policy):从状态空间到动作措施的映射,(,) 表示在状态s下选择动作a的概率。
- 回报或奖励(reward):环境对Agent采取动作后的响应。
- 价值函数(value function):计算状态 s t s_t st或状态-动作对 < s t , a t >
<st,at>的累积回报,是从长远的角度考察某个状态或状态-动作对的好坏。
这里,强化学习的目标就是最大化Agent接收到的延迟会报,而强化学习算法的目的就是对价值函数进行估计。此外,强化学习算法一般要求环境状态满足马尔可夫性,即环境在t+1时刻的响应仅依赖于其在t时刻的状态及接收到的动作。因此,我们采用的是马尔可夫决策模型。
干扰方无法直接获得雷达状态,而是通过侦察雷达的辐射信号并提取信号的特征,通过工作模式识别方法,获得当前雷达的工作模式,再根据当前的工作模式,以雷达干扰决策算法进行决策,选择干扰样式对雷达实施干扰。
Sarsa算法是一种免模型的使用时序差分求解强化学习控制问题的方法,由于更新一次动作值函数需要用到五个量,即 ( s , a , r , s ′ , a ′ ) \left(s,a,r,s',a'\right) (s,a,r,s′,a′),其中 s s s表示状态state, a a a表示动作action, r r r表示奖励reward,因此被称为sarsa算法。
在迭代的时候,我们首先根据某种算法(如 ϵ \epsilon ϵ-贪婪法)在当前状态 S S S选择一个动作 A A A,系统此时会进入新的状态 S ′ S' S′,同时给我们一个奖励 R R R。然后,在新的状态 S ′ S' S′下,我们再基于某算法(如 ϵ \epsilon ϵ-贪婪法)选择一个动作 A ′ A' A′,但是此时我们并不执行动作 A ′ A' A′,只是用来更新我们的价值函数(Q表),其更新公式为
Q ( S , A ) = Q ( S , A ) + α ( R + γ Q ( S ′ , A ′ ) − Q ( S , A ) ) Q\left(S,A\right)=Q\left(S,A\right)+\alpha\left(R+γQ\left(S',A' \right)-Q\left(S,A\right)\right) Q(S,A)=Q(S,A)+α(R+γQ(S′,A′)−Q(S,A)) 其中, γ \gamma γ是衰减因子, α \alpha α是迭代步长。
Q-Learning算法和sarsa算法都是时序差分方法,它与sarsa算法的主要区别为:在“在状态 S S S执行当前动作 A A A,得到新状态 S ′ S′ S′和奖励 R R R后,直接更新Q表,不需要再选择新的动作 A ’ A’ A’。
ϵ \epsilon ϵ-greedy策略基于一个概率来对探索和利用进行折中:
每次开始实验时,随机一个大于0小于1的值。
如果该值小于 ϵ \epsilon ϵ,以均匀概率随机选取动作,即探索;
否则,以 1 − ϵ 1-\epsilon 1−ϵ的概率选择当前平均回报最高的动作,即利用。
除当前最优动作(贪婪动作)外,其余动作(探索动作)的选择概率相等,而没有利用它们当前所获得的回报信息,使得 Agent 有可能选择一个很“差”的动作,降低学习效率。
本题需要对即时回报矩阵(干扰收益)进行设计。由于考虑的是雷达通过转变工作模式进行抗干扰,因此干扰收益与雷达模式的转变和干扰样式相关。
在雷达处于工作模式 s n s_n sn的情况下,若受到第 m m m种干扰后,工作模式转变为k的概率为 p n k q p_{nk}^q pnkq,那么雷达在受到第 m m m种干扰后的工作模式转移概率矩阵 P m P^m Pm为
其中, 矩阵里的概率满足以下约束条件 ∑ k = 1 N p n k m = 1 \sum_{k=1}^Np_{nk}^m=1\quad k=1∑Npnkm=1
工作模式奖励是指干扰方在实施不同干扰样式后,导致雷达工作模式发生改变,干扰方从中获得的收益。针对雷达不同的工作模式,不同的干扰样式达到的干扰效果不同,因此获得的工作模式转移奖励不同。由题知,干扰方的即时回报矩阵 R t R_t Rt为(行:t 时刻雷达状态,列:t+1 时刻雷达状态)
由于我们干扰方的目的是让雷达处于较低风险值的时候,也就是状态S1识别状态,因此我们设置terminal为S1。
参数设置
state_num = 3; % 3种雷达状态
jam_num = 4; % 4种干扰样式,动作
(在下文代码对应了action_num,也就是采取的干扰动作)
gamma = 0.8; % 衰减因子
alpha = 0.2; % 步长
epsilon = 0.8; % epsilon-greedy策略
episode_max = 10000;
iterative_max = 100;
选用语言:MATLAB
function [Q,time,epi,action,state,reward_list] = sarsa(R,P)
global state_num action_num;
global terminal_state;
global gamma alpha iterative_max episode_max;
tic;
Q = zeros(state_num,action_num);
action = [];
state = [];
reward_list = [];
for epi = 1:episode_max
Q0 = Q; % 上一个episode的Q
is_terminal = false;
step_count = 0;
% 随机选择一个初始状态
start_state = unidrnd(state_num);
S = start_state;
% 使用epsilon-贪婪法在当前状态S的所有可能动作中选取一个动作A
A = choose_action(S,Q);
while ~is_terminal
step_count = step_count +1;
S_ = new_state(S,A,P); % 执行动作,得到新的状态S'
reward = R(S,S_); % 动作A->状态S' 的即时回报
A_ = choose_action(S_,Q); % SARSA对 下一个状态的 动作
% 更新Q表
if S_~= terminal_state % 不是终点
Q_target = reward + gamma * Q(S_,A_);
else % 如果是终点,就没有下一步,直接复制
Q_target = reward;
is_terminal = true;
end
Q(S,A) = Q(S,A) + alpha*(Q_target - Q(S,A));
% 更新状态和动作
S = S_;
A = A_;
action = [action A];
state = [state S];
reward_list = [reward_list reward];
if step_count > iterative_max % 迭代次数过多
break
end
end
if norm(Q-Q0,2)<0.00005
break
end
end
time=toc;
end
function [Q,time,epi,action,state,reward_list] = ql(R,P)
global state_num action_num;
global terminal_state;
global gamma iterative_max alpha episode_max;
Q = zeros(state_num,action_num);
tic;
action = [];
state = [];
reward_list=[];
for epi = 1:episode_max
Q0 = Q; % 上一个episode的Q
is_terminal = false;
step_count = 0;
% 随机选择一个初始状态
start_state = unidrnd(state_num);
S = start_state;
while ~is_terminal
step_count = step_count +1;
% 使用e-贪婪法在当前状态S的所有可能动作中选取一个动作A
A = choose_action(S,Q);
% 执行动作,得到新的状态S'和奖励R
S_ = new_state(S,A,P); % 获得回报,下一个状态
reward = R(S,S_);
% 更新Q表
if S_~= terminal_state % 不是终点
Q_target = reward + gamma * max(Q(S_,:));
else % 如果是终点,就没有下一步,直接复制
Q_target = reward;
is_terminal = true;
end
Q(S,A) = Q(S,A) + alpha*(Q_target - Q(S,A));
% 更新状态
S = S_;
action = [action A];
state = [state S];
reward_list = [reward_list,reward];
if step_count > iterative_max % 迭代次数过多
break
end
end
if norm(Q-Q0,2)<0.00005
break
end
end
time=toc;
end
function [S_ ]= new_state(S,A,P) % 获得回报值和下一个状态
global state_num
% A:干扰动作
% S:现在的状态
% P:状态转移矩阵
prob = P(S,:,A);
S_ = randsrc(1,1,[(1:1:state_num); prob]); % 以一定的概率产生下一个状态
end
(2) 选择动作 ϵ \epsilon ϵ-贪婪算法
function [A] = choose_action(S,Q)
% greedy-policy
global epsilon action_num;
a = rand;
if a > epsilon % epsilon的概论进行探索
A = unidrnd(action_num); % 随机选取一个动作
else % 以1-epsilon的概率进行利用
[~, A] = max(Q(S,:));
end
end
最优策略:3 3 1
运行时间:0.074913
Q表:
0.4271 0.3393 0.5998 0.3074
-0.2900 -0.2750 0.4690 -0.2194
0.2255 -0.1436 0.0820 -0.0037
最优策略: 3 3 1
运行时间: 0.042841
Q表
0.4435 0.3784 0.5998 0.3218
0.0236 0.0714 0.6999 -0.3360
0.2332 0.1087 0.0027 -0.0765
根据最佳策略,进行10步测试得到:
我们设置的算法收敛条件为:两次episode结束后的Q矩阵差异不大,即 ∥ Q e p i − Q e p i − 1 ∥ F < β \Vert Q^{epi}-Q^{epi-1}\Vert_F<\beta ∥Qepi−Qepi−1∥F<β,其中 β \beta β是我们自设的阈值,这里我们设置为 5 × 1 0 − 5 5\times10^{-5} 5×10−5。
Sarsa算法和Q-learning算法收敛时间分别为:0.080820和0.038544,其中Q-learning算法的收敛速度要优于Sarsa算法。
然后,我们绘制了Sarsa算法和Q-Learning算法的每一个episode内的迭代次数和episode的图像。这张图可以用来表示两种算法每次episode的耗费时间。
算法收敛后,得到的最优策略为 < S 1 , J 3 > , < S 2 , J 3 > , < S 3 , J 1 >
到这里,正是内容就结束了。BUT我的结果还是存在一些问题,比如偶尔会出现两种算法的最优策略不同的情况,如下图所示。
但是调试代码我也没有找到解决方案,我分析可能是episode的最大数目不够大造成的。