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