⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ga_gaaa.asv

📁 基于GAACA的协同多目标攻击空战决策算法
💻 ASV
字号:
%遗传算法
% function [out]=GA1(in)

clear all;
close all;
tic
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                % 参数设置 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M1 = 4;  
M2 = 4;
M3 = 4;    % 我方各载机所携带的武器数

total_W = M1+M2+M3;        % 总的武器数12
total_T = 10;                 % 总的目标数10

% 迎击武器单一命中概率,行为目标,列为武器 
PP = [0.10  0.05  0.36  0.73  0.21  0.70  0.02  0.85  0.90  0.10  0.08  0.50 ;
      0.56  0.56  0.75  0.31  0.38  0.06  0.33  0.32  0.95  0.37  0.50  0.87;
      0.80  0.25  0.21  0.67  0.40  0.20  0.12  0.50  0.45  0.60  0.30  0.60;
      0.40  0.17  0.10  0.52  0.23  0.80  0.75  0.73  0.50  0.80  0.08  0.10;
      0.32  0.20  0.43  0.26  0.45  0.15  0.62  0.85  0.95  0.01  0.90  0.70;
      0.20  0.10  0.82  0.32  0.30  0.40  0.03  0.34  0.26  0.69  0.70  0.87;
      0.96  0.58  0.75  0.80  0.01  0.63  0.27  0.10  0.72  0.23  0.01  0.07;
      0.40  0.67  0.50  0.91  0.34  0.54  0.90  0.22  0.65  0.23  0.90  0.92;
      0.03  0.42  0.15  0.32  0.40  0.30  0.74  0.58  0.85  0.90  0.30  0.55;
      0.15  0.75  0.62  0.45  0.56  0.80  0.61  0.76  0.10  0.06  0.35  0.50];    
% 目标对飞机的威胁评估因子,行为飞机,列为目标  
TH = [0.20  0.40  0.62  0.35  0.40  0.20  0.2943  0.3466  0.2708  0.3320 ;
      0.5390  0.4881  0.4521  0.3418  0.3829  0.4652  0.2562  0.3463  0.2935  0.2548 ;
      0.5541  0.5402  0.4976  0.4765  0.4921  0.5654  0.3178  0.3735  0.3012  0.3030 ];   
  
% 求每个目标对我机群的总威胁,即TH每列求和     
TH_Z  = zeros(1,total_T);
for i = 1:total_T
    for j = 1:3
        TH_Z(i) = TH_Z(i)+TH(j,i);
    end
end                                    
% 对目标进行排序,按照其对我机群的威胁从大到小,输出为敌机序号
mb_px = mbpx(TH_Z,total_T);          
%[order,index]=sort(TH_Z);
%index
weapon = [1:total_W];          % 武器列表

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                % 初始化种群 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
popsize=80;                        %种群规模
len=total_W;                       %染色体长度
maxgen=100;                         %最大迭代次数
pcross=0.72;                        %交叉概率
pmutation=0.08;                    %变异概率

%初始化种群
for popsiz=1:popsize
    t_num = total_W;     % 目标数
    target = [1:total_T,mb_px(1:(total_W-total_T))];   % 目标列表;每机一个多余导弹加分给威胁最大的目标
    for l=1:total_W
        m = rand_function(1,t_num);                    % 产生一个1-t_num之间的随机数
        pop(popsiz,l)=target(m);                       % 列数即12个武器,依次排列
        target = [target(1:m-1),target(m+1:t_num)];    % 将目标列表中的第m个排除
        t_num = t_num-1;                               % 目标个数减去1
    end
end        

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                %遗传结束条件 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
mingen=15;              %最小迭代次数
gen_min_tatio=0.02;     %子群体最小进化率
gen_die=5;              %子群体进化率小于最小进化率的可容忍进化代数
t=0;                    %子群体进化率小于最小进化率的当前代数
        
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                % 迭代寻优 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for gen=1:maxgen                   %执行至设定的代数终止
    [mpop,npop]=size(pop);         %取种群矩阵的行数和列数,即种群规模和染色体长度
    
cost = zeros(1,mpop); %失败威胁值初始化
 %%%%%%%%%%%% 计算每个方案的失败威胁概率和  %%%%%%%%%%%%%%
  for m=1:mpop  
    for kk = 1:npop             
        cost(m) = cost(m)+TH_Z(pop(m,kk))*(1-PP(pop(m,kk),kk)); %每个目标分一个导弹
    end 
         
    for i = 1:npop-1                 
        for j = i+1:npop
            if pop(m,i)==pop(m,j)       %当有一个目标分配两个导弹时
               cost(m) = cost(m)-TH_Z(pop(m,i))*(1-PP(pop(m,i),i))-TH_Z(pop(m,j))*(1-PP(pop(m,j),j))...
                        +TH_Z(pop(m,i))*(1-PP(pop(m,i),i))*(1-PP(pop(m,j),j));
            end
        end
    end
 
 c=10;                      %适配值函数f(x)中的常数c
 f(m)=c/(0.001+cost(m));           %第m个方案的适配值函数值   
 
  end
  
%保存每一代最好的结果
 [cost_order,cost_index]=sort(cost);
 cost_min(gen)=cost_order(1);
 result(gen,:)=pop(cost_index(1),:);  
 
%结束的条件判断 
 
      if (gen>mingen)&((cost_min(gen-1)-cost_min(gen))<gen_min_tatio*cost_min(gen-1))
          t=t+1;
      else
          t=0;
      end

  
     if t>=gen_die
        break;
     end

    %轮盘选择
    selectpop=select2(f,pop);
    %交叉操作策略B
    crosspop=crossover2(pcross,selectpop); 
    %逆转变异操作
    pop=mutation2(pmutation,crosspop);

end  

%%%%%  输出最优分配  %%%%%
time1=toc;   %测CPU时间
gen
cost_min(gen);   %遗传结束时的最好评估值结果

MM = 10;    % 蚂蚁数m 
for k=1:MM     %得到前MM个最好值
pop_choose(k,:)=pop(cost_index(k),:);
end
cost_min_2=ant3_10_GAAA(pop_choose);  %转向蚁群寻优

% final_result = result(gen,:);  %排序结果
load parameter
time=time1+time2  %CPU总耗时
die=gen+nc        %总代数
cost=[cost_min,cost_min_2];   %最优解序列
min=cost(die+1)

 T=[1:(die+1)];   %画图
plot(T,cost);
xlabel('迭代次数');
ylabel('最佳评估值');
%plot(T,result(:,1));
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -