www.gusucode.com > GAVPai_Book_MathworksCntrlFileEx_May2019 > GAVPai_Book_MathworksCntrlFileEx_May2019/DE_Rand5Dir4_Operator.m

    
% Differential evolution  Rand5/Dir4 Operator
function mutated_popln = DE_Rand5Dir4_Operator(popln, f_val,  F_val, popln_size, individual_length)

    % initialization
    differential_vec_indx(1:5) = 0;
    V_star(1,1:individual_length) = 0;
    V(1:4,1:individual_length) = 0;
    mutated_popln(1:popln_size, 1:individual_length) =0;

    for i = 1 : popln_size
     
     % prepare rand_indx, random number indices for each population
     % individual to enable it choose five random individuals from the
     % population, without repeating itself.
     
     rand_indx = randperm(popln_size);
     for t=1:popln_size
         if (rand_indx(t)==i)
             elimx = t;
         end
     end
     rand_indx(elimx)=[];
     
     % select five random individuals from the population
     
     for u=1:5
     differential_vec_indx(u) = rand_indx(u);
     end
     
     % Obtain V* the best individual with the maximal objective function and
     % represent the rest as V1, V2, V3 and V4 defined in equation (5.26)
     
     [~, max_obj_indx] = max( [f_val(differential_vec_indx(1)), f_val(differential_vec_indx(2)), f_val(differential_vec_indx(3)), f_val(differential_vec_indx(4)), f_val(differential_vec_indx(5))] ); 
     j=1;
     for z=1:5
         if (differential_vec_indx(z) == differential_vec_indx(max_obj_indx)) 
             V_star(1,:) = popln(differential_vec_indx(z), :);
         else
             V(j,:) = popln(differential_vec_indx(z),:);
             j=j+1;
         end
     end
     
     
     % obtain trial vector for each of the parent vector individual
     mutated_popln(i,:) = V_star(1,:) + F_val/4 * ( 3*V_star(1,:) - V(1,:)-V(2,:)-V(3,:)-V(4,:));
     
    end 
end