【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)

【前情提要】有可能写的不对,发出来想做个纪念,也算是一种分享。

目录

  • 实验原理
    • 雷达干扰决策
      • 基于强化学习的干扰决策
    • 时序差分强化学习
      • Sarsa算法
      • Q-learning算法
    • Epsilon-greedy算法
  • 实验步骤和内容
    • 实验分析
    • 参数设置
    • 具体实现
  • 实验结果
    • sarsa
    • Q-Learning
    • 分析

实验原理

雷达干扰决策

基于强化学习的干扰决策

雷达干扰决策是干扰方在侦察雷达信息的基础上,通过观测敌方雷达模式的变化,选择合适的干扰目标,合理地分配干扰资源,并根据雷达的工作模式选择对应干扰样式的过程。
基于强化学习的雷达干扰决策的具体过程为:

干扰方先侦察雷达辐射信号、提取雷达特征并识别雷达工作模式。然后根据工作模式的威胁等级,同时观测雷达前后工作模式的变化得到的干扰收益,可以选择针对当前雷达工作模式的干扰样式并实施干扰。雷达受到干扰后,因其自身的抗干扰措施,具备实时更新工作模式的能力。

基于强化学习的雷达干扰决策模型如下:

【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第1张图片
强化学习的基本要素为一个四元组(X,A,P,R),其中X表示外界环境的状态空间,A是Agent的动作空间,P是状态转移概率矩阵,R是即时回报矩阵。在基于深度强化学习的雷达干扰决策模型里,雷达对应是环境,雷达在收到干扰方实施干扰后,我们考虑雷达通过改变工作模式进行抗干扰。

在强化学习算法中,有以下四个要素:

  1. 环境模型(model):对环境信息的完整描述,包括:状态转移概率矩阵、即时回报矩阵等。
  2. 策略(policy):从状态空间到动作措施的映射,(,) 表示在状态s下选择动作a的概率。
  3. 回报或奖励(reward):环境对Agent采取动作后的响应。
  4. 价值函数(value function):计算状态 s t s_t st或状态-动作对 < s t , a t > <st,at>的累积回报,是从长远的角度考察某个状态或状态-动作对的好坏。

这里,强化学习的目标就是最大化Agent接收到的延迟会报,而强化学习算法的目的就是对价值函数进行估计。此外,强化学习算法一般要求环境状态满足马尔可夫性,即环境在t+1时刻的响应仅依赖于其在t时刻的状态及接收到的动作。因此,我们采用的是马尔可夫决策模型。

  • 假设雷达共有N种状态,将第 n n n种工作模式记作 s n s_n sn,则雷达的状态集合可以表示为 S = { s 1 , . . . s n , . . . , s N } S=\left\{s_1,...s_n,...,s_N\right\} S={s1,...sn,...,sN},雷达状态可以是雷达的工作模式,如搜索、跟踪、识别等。

干扰方无法直接获得雷达状态,而是通过侦察雷达的辐射信号并提取信号的特征,通过工作模式识别方法,获得当前雷达的工作模式,再根据当前的工作模式,以雷达干扰决策算法进行决策,选择干扰样式对雷达实施干扰。

  • 假设可实施的干扰样式共有M种,第 m m m种干扰样式记作 j m j_m jm,总的干扰样式集合为 J = { j 1 , . . . j m , . . . , j M } J=\left\{j_1,...j_m,...,j_M\right\} J={j1,...jm,...,jM},常用的干扰样式有压制干扰、欺骗干扰等。干扰方的干扰收益可以通过雷达工作模式的改变估计干扰收益,将干扰收益记作 R R R

时序差分强化学习

Sarsa算法

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算法。
【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第2张图片在迭代的时候,我们首先根据某种算法(如 ϵ \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 α是迭代步长。

算法总结:
【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第3张图片

Q-learning算法

Q-Learning算法和sarsa算法都是时序差分方法,它与sarsa算法的主要区别为:在“在状态 S S S执行当前动作 A A A,得到新状态 S ′ S′ S和奖励 R R R后,直接更新Q表,不需要再选择新的动作 A ’ A’ A

算法总结:
【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第4张图片

Epsilon-greedy算法

ϵ \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
【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第5张图片其中, 矩阵里的概率满足以下约束条件 ∑ k = 1 N p n k m = 1 \sum_{k=1}^Np_{nk}^m=1\quad k=1Npnkm=1

工作模式奖励是指干扰方在实施不同干扰样式后,导致雷达工作模式发生改变,干扰方从中获得的收益。针对雷达不同的工作模式,不同的干扰样式达到的干扰效果不同,因此获得的工作模式转移奖励不同。由题知,干扰方的即时回报矩阵 R t R_t Rt为(行:t 时刻雷达状态,列:t+1 时刻雷达状态)

【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第6张图片
由于我们干扰方的目的是让雷达处于较低风险值的时候,也就是状态S1识别状态,因此我们设置terminal为S1。

参数设置

【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第7张图片参数设置
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

  1. sarsa
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
  1. Q-Learning
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
  1. 子函数
    (1)获得新的状态
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

实验结果

sarsa

最优策略: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

【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第8张图片根据最佳策略,进行10步测试得到:
【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第9张图片

Q-Learning

最优策略: 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

【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第10张图片根据最佳策略,进行10步测试得到:
【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第11张图片
我们设置的算法收敛条件为:两次episode结束后的Q矩阵差异不大,即 ∥ Q e p i − Q e p i − 1 ∥ F < β \Vert Q^{epi}-Q^{epi-1}\Vert_F<\beta QepiQepi1F<β,其中 β \beta β是我们自设的阈值,这里我们设置为 5 × 1 0 − 5 5\times10^{-5} 5×105

分析

Sarsa算法和Q-learning算法收敛时间分别为:0.080820和0.038544,其中Q-learning算法的收敛速度要优于Sarsa算法。
然后,我们绘制了Sarsa算法和Q-Learning算法的每一个episode内的迭代次数和episode的图像。这张图可以用来表示两种算法每次episode的耗费时间。

【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第12张图片算法收敛后,得到的最优策略为 < S 1 , J 3 > , < S 2 , J 3 > , < S 3 , J 1 > ,, <S1,J3>,<S2,J3>,<S3,J1>

到这里,正是内容就结束了。BUT我的结果还是存在一些问题,比如偶尔会出现两种算法的最优策略不同的情况,如下图所示。
但是调试代码我也没有找到解决方案,我分析可能是episode的最大数目不够大造成的。
【又一个作业】基于强化学习的雷达干扰样式选择(MATLAB实现)_第13张图片

你可能感兴趣的:(matlab,强化学习)