资源简介

给出了范围是[1,16]的1600多个数据,这些数据都是随机无规律出现,运用遗传算法来进行数据预测。

资源截图

代码片段和文件信息

function [in_put_newcountpredictflag] = GA(in_putout_put) 

%%
outerinternum = 100 ;     % 最外层迭代次数
internum = 50 ;            % 选择 交叉 迭代次数
mutation_P = 0.03  ;       % 变异概率

for outerinter=1:outerinternum
    % 统计1-16 每个数字出现的次数及概率
    count=zeros(116) ;   % 计数
    for i=1:length(in_put)
         count( in_put(i) ) = count( in_put(i) ) +1 ;   % 每个数字出现次数
    end

    P = count./sum(count)   ;       % 每个数字出现的概率
    [temp_Pind_P] = sort(P) ;
    Cumsum_P = cumsum(temp_P)  ;    % 计算累积概率
    Cumsum_P = [0 Cumsum_P]  ; 
    
    X = []  ;           % 通过选择 交叉 变异 产生的100个新数据
    X_bin = []  ;       % 转换为二进制
   for inter =1:internum
        %% 轮盘赌选择
        rnd = rand() ;
        ind = find(Cumsum_P>=rnd)  ;
        ind = ind(1) -1 ;
        chrom1 = ind_P(ind)   ;        % 选择第一个染色体

        while 1
            rnd = rand() ;
            ind = find(Cumsum_P>=rnd)  ;
            ind = ind(1) -1 ;
            chrom2 = ind_P(ind)   ;    % 选择第二个染色体
            if chrom1~=chrom2          % 保证这两个染色体不同
                break 
            end
        end
        %% 交叉
        chrom1_bin = ‘0000‘ ;          % 二进制长度:4  char
        temp = dec2bin(chrom1-1)  ;    % 转换为二进制  char
        chrom1_bin( end:-1:end+1-length(temp) ) = temp(end:-1:1)  ;  % 高位补0

        chrom2_bin = ‘0000‘ ;          % 二进制长度:4  char
        temp = dec2bin(chrom2-1)  ;    % 转换为二进制  char
        chrom2_bin( end:-1:end+1-length(temp) ) = temp(end:-1:1)  ;  % 高位补0

        % 0|000 交叉
        new_chrom1_bin = [ chrom1_bin(1) chrom2_bin(2:end) ] ;
        new_chrom2_bin = [ chrom2_bin(1) chrom1_bin(2:end) ] ;

        X_bin = [X_bin new_chrom1_bin new_chrom2_bin] ;   % 保存为二进制
   end
   %% 变异
    for i=1:4:length(X_bin)
        if rand()<=mutation_P
            X_bin(i) = num2str(1- str2num(X_bin(i)))   ;      % 0-1 变异 取反
        end
    end
    for i=3:4:length(X_bin)
        if rand()<=mutation_P
            X_bin(i) = num2str(1- str2num(X_bin(i)))   ;      % 0-1 变异 取反
        end
    end
    % X_bin 再转换为十进制(最后加1)
    for i=1:4:length(X_bin)
        temp_bin = X_bin(i:i+3) ;
        temp = bin2dec(temp_bin) + 1 ;   % 二进制转十进制
        X = [Xtemp]  ;
    end
    
    %% 更新输入
    in_put = X  ;         % 将新产生的100个数据作为输入
end

%% 循环多次后,最终的数据结果
in_put_new = in_put  ;
% 统计1-16 每个数字出现的次数及概率
count=zeros(116) ;   % 计数
for i=1:length(in_put_new)
   count( in_put_new(i) ) = count( in_put_new(i) ) +1 ;   % 每个数字出现次数
end

[max_count ind] = max(count)  ;

predict = ind(1)  ;      % 预测结果

if predict==out_put
    flag = 1 ;
else
    flag = 0 ;
end

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2014-05-19 10:08  GA 1\
     目录           0  2014-05-18 15:20  GA 1\data\
     文件        1089  2014-05-18 15:20  GA 1\data\data.mat
     文件       75776  2014-05-18 15:20  GA 1\data\一维实验数据.xls
     文件        2859  2014-05-22 17:01  GA 1\GA.m
     文件        1129  2014-05-22 17:02  GA 1\GA_main.m
     目录           0  2014-06-06 08:52  GA 1\result\
     文件         478  2014-05-22 17:06  GA 1\result\实验结果.csv
     文件       18944  2014-06-06 08:52  GA 1\result\实验结果.xls
     文件         749  2014-05-22 17:06  GA 1\result\实验运行时间.csv
     文件       17920  2014-06-06 08:52  GA 1\result\实验运行时间.xls
     文件         884  2014-05-18 15:20  GA 1\遗传算法.txt

评论

共有 条评论