gusucode.com > GAVPai_Book_MathworksCntrlFileEx_May2019 > GAVPai_Book_MathworksCntrlFileEx_May2019/DE_Rand4BestDir5_Operator.m

    
function mutated_popln = DE_Rand4BestDir5_Operator(popln, fitness_val,  beta_val, popln_size, individual_length)

%initialization
differential_vec_indx(1:5) = 0;
V_b(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
     
     %set IND the current individual in the population indicated by i
     
     IND = popln(i,:);
     
     % 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 Vb the best individual with the maximal objective function and
     % represent the rest as V1, V2, V3 and V4 defined in equation [6.20]
     
     [~, max_obj_indx] = max( [fitness_val(differential_vec_indx(1)), fitness_val(differential_vec_indx(2)), fitness_val(differential_vec_indx(3)), fitness_val(differential_vec_indx(4)), fitness_val(differential_vec_indx(5))] ); 
     j=1;
     for z=1:5
         if (differential_vec_indx(z) == differential_vec_indx(max_obj_indx)) 
             V_b(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_b(1,:) + beta_val/5 * ( 5*V_b(1,:) - IND - V(1,:)-V(2,:)-V(3,:)-V(4,:));
     
 end