Cohort Intelligence MATLAB Code for Optimization of EDM


MATLAB Code of Cohort Intelligence Algorithm with Alienation variation for Optimization of Surface Roughness (Ra), Material Removal Rate (MRR), and Pecentage Relative Electrode Wear Rate (REWR) of EDM Process
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%clear allclcticc = 5;  % number of candidatesn = 4;   % number of dimensionsupper_bound = [12.5 55 160 60];     lower_bound = [7.5 45 50 40];
max_iterations = 1500;for cnt_runs = 1:1x = (upper_bound - lower_bound).*rand(c,n) + lower_bound; % random value generationrange = upper_bound - lower_bound;                       % original range calculationcnt_iterations =1;        while (cnt_iterations <= max_iterations) % loop for max iterations%            if cnt_iterations < 200               r = 0.99;%            else%                r = 0.8;%            end                       for cnt_candi = 1:c            Fun(cnt_candi,:)= Ra_EDM(x(cnt_candi,1:n)); % call objective function here          end                 inverse_F = Fun.^-1;                     % 1/fxn         denominator_pc = sum(inverse_F,1);     %denominator calucated((1/fx(c1)+...+1/fx(cn)) for probability calculation                 for cnt_pc = 1:c            prob1(cnt_pc,1) = inverse_F(cnt_pc,1)/denominator_pc; % probability pc1,...,pcm         end                 pcsum = sum(prob1);  % checking cummulative sum = 1?                         [prob , c_follow1] = sort(prob1,'descend');         for cnt_candi = 1:c            c_unfollow(cnt_candi) = RouletteWheelSelection(prob1); %  Roulette Wheel            c_unfollow1(cnt_candi) = c_unfollow(cnt_candi);        end         for cnt_candi = 1:c                          c_unfollow1(cnt_candi)=[];             msize = numel(c_unfollow1);             idx = randperm(msize);             c_follow(cnt_candi)= c_unfollow1(idx(1:1));             c_unfollow1= c_unfollow;%             ww(cnt_candi,:) =  find(cnt_candi~=c_unfollow(cnt_candi));          end                 [M,I] = min(Fun);            Fbest(1,:) = M(1, :);            xvect_best(:,:) = x(I(1),:);                   % x vector for all best         new_matrix = x(c_follow,:); % new matrix generation          range = r*range;                for cnt_column = 1:n            if abs(range(cnt_column))> 1e-8               new_range =  range/2;              else              new_range =  1e-8;              end            end              for cnt_row = 1:c            for cnt_column = 1:n                 new_lower_bound(cnt_row,cnt_column) = new_matrix(cnt_row,cnt_column)- new_range(cnt_column);                 new_upper_bound(cnt_row,cnt_column) = new_matrix(cnt_row,cnt_column)+ new_range(cnt_column);            end               end              for cnt_row = 1:c            for cnt_column = 1:n                 if new_lower_bound(cnt_row,cnt_column) < lower_bound(1,cnt_column)                      new_lower_bound(cnt_row,cnt_column) = lower_bound(1,cnt_column);                 end                     if new_upper_bound(cnt_row,cnt_column) > upper_bound(1,cnt_column)                     new_upper_bound(cnt_row,cnt_column) = upper_bound(1,cnt_column) ;                 end              end                end                  x = (new_upper_bound -new_lower_bound).*rand(c,n) + new_lower_bound;        x(c,:) = xvect_best;        if (cnt_iterations <= max_iterations)               function_all(:,cnt_iterations) = abs(Fbest);               cnt_all (cnt_iterations) = cnt_iterations;               x_all(:,:,cnt_iterations) =  x;               end               hold on;               cnt_iterations = cnt_iterations + 1;    end%     if (rem(cnt_iterations,1)==0)%         stop_1=1;%     end%     if (rem(cnt_iterations,1)==0)%         stop_1=1;%     end%     figure(1)%                  xlabel('Learning attempts','FontSize',12)%                  ylabel('Behavior','FontSize',12)%                plot(cnt_all,function_all(1,:),'k*');%                plot(cnt_all,function_all(2,:),'ko');%                plot(cnt_all,function_all(3,:),'k+');%                plot(cnt_all,function_all(4,:),'k.');%                plot(cnt_all,function_all(5,:),'ks');%                legend ('candi1','candi2','candi3','candi4','candi5');% %              %pause(2);% %                hold on;%            %  % %     endtoc;time_elapsed = toc; end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MATLAB Code of Cohort Intelligence Algorithm with Follow Best variation for Optimization of Surface Roughness (Ra), Material Removal Rate (MRR), and Pecentage Relative Electrode Wear Rate (REWR) of EDM Process
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear allclcticc = 5;  % number of candidatesn = 4;   % number of dimensionsupper_bound = [12.5 55 160 60];     lower_bound = [7.5 45 50 40];
max_iterations = 700;for cnt_runs = 1:1x = (upper_bound - lower_bound).*rand(c,n) + lower_bound; % random value generationrange = upper_bound - lower_bound;                       % original range calculationcnt_iterations = 1;        while (cnt_iterations <= max_iterations) % loop for max iterations%            if cnt_iterations < 20%               r = 0.99;% %            else              r = 0.95;%            end                       for cnt_candi = 1:c            Fun(cnt_candi,:)= Ra_EDM(x(cnt_candi,1:n)); % call objective function here          end                 inverse_F = Fun.^-1;                     % 1/fxn         denominator_pc = sum(inverse_F,1);     %denominator calucated((1/fx(c1)+...+1/fx(cn)) for probability calculation                 for cnt_pc = 1:c            prob1(cnt_pc,1) = inverse_F(cnt_pc,1)/denominator_pc; % probability pc1,...,pcm         end                 pcsum = sum(prob1);  % checking cummulative sum = 1?         for cnt_candi = 1:c            c_follow(cnt_candi) = RouletteWheelSelection(prob1); %  Roulette Wheel         end                 [prob , c_follow1] = sort(prob1,'ascend');        for i = 1:c            c_follow(i)= c_follow1(c);        end                    [M,I] = min(Fun);            Fbest(1,:) = M(1, :);            xvect_best(:,:) = x(I(1),:);                     new_matrix = x(c_follow,:); % new matrix generation          range = r*range;                for cnt_column = 1:n            if abs(range(cnt_column))> 1e-16               new_range =  range/2;              else              new_range =  1e-16;              end            end              for cnt_row = 1:c            for cnt_column = 1:n                 new_lower_bound(cnt_row,cnt_column) = new_matrix(cnt_row,cnt_column)- new_range(cnt_column);                 new_upper_bound(cnt_row,cnt_column) = new_matrix(cnt_row,cnt_column)+ new_range(cnt_column);            end               end              for cnt_row = 1:c            for cnt_column = 1:n                 if new_lower_bound(cnt_row,cnt_column) < lower_bound(1,cnt_column)                      new_lower_bound(cnt_row,cnt_column) = lower_bound(1,cnt_column);                 end                     if new_upper_bound(cnt_row,cnt_column) > upper_bound(1,cnt_column)                     new_upper_bound(cnt_row,cnt_column) = upper_bound(1,cnt_column) ;                 end              end                end                  x = (new_upper_bound -new_lower_bound).*rand(c,n) + new_lower_bound;                        if (cnt_iterations <= max_iterations)               function_all(:,cnt_iterations) = abs(Fbest);               cnt_all (cnt_iterations) = cnt_iterations;               x_all(:,:,cnt_iterations) =  x;               end               hold on;               cnt_iterations = cnt_iterations + 1;    end%     if (rem(cnt_iterations,1)==0)%         stop_1=1;%     end%     if (rem(cnt_iterations,1)==0)%         stop_1=1;%     end%     figure(1)%                  xlabel('Learning attempts','FontSize',12)%                  ylabel('Behavior','FontSize',12)%                plot(cnt_all,function_all(1,:),'k*');%                plot(cnt_all,function_all(2,:),'ko');%                plot(cnt_all,function_all(3,:),'k+');%                plot(cnt_all,function_all(4,:),'k.');%                plot(cnt_all,function_all(5,:),'ks');%                   legend ('candi1','candi2','candi3','candi4','candi5');% %                 % %                %pause(2);% %                hold on;%            %  % %     end

toc;
time_elapsed = toc;
 end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MATLAB Code of Cohort Intelligence Algorithm with Follow Better variation for Optimization of Surface Roughness (Ra), Material Removal Rate (MRR), and Pecentage Relative Electrode Wear Rate (REWR) of EDM Process
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear allclcticc = 5;  % number of candidatesn = 4;   % number of dimensionsupper_bound = [12.5 55 160 60];     lower_bound = [7.5 45 50 40];
max_iterations = 1100;for cnt_runs = 1:1x = (upper_bound - lower_bound).*rand(c,n) + lower_bound; % random value generationrange = upper_bound - lower_bound;                       % original range calculationcnt_iterations =1;        while (cnt_iterations <= max_iterations) % loop for max iterations%            if cnt_iterations < 20%               r = 0.99;% %            else              r = 0.99;%            end                       for cnt_candi = 1:c            Fun(cnt_candi,:)= Ra_EDM(x(cnt_candi,1:n)); % call objective function here          end                 inverse_F = Fun.^-1;                     % 1/fxn         denominator_pc = sum(inverse_F,1);     %denominator calucated((1/fx(c1)+...+1/fx(cn)) for probability calculation                 for cnt_pc = 1:c            prob1(cnt_pc,1) = inverse_F(cnt_pc,1)/denominator_pc; % probability pc1,...,pcm         end                 pcsum = sum(prob1);  % checking cummulative sum = 1?         for cnt_candi = 1:c            c_follow(cnt_candi) = RouletteWheelSelection(prob1); %  Roulette Wheel         end                 [prob , c_follow1] = sort(prob1,'ascend');        for i = 1:c-1            c_follow(i)= c_follow1(i+1);        end            for i = c             c_follow(i)= c_follow1(i);          end         [M,I] = min(Fun);            Fbest(1,:) = M(1, :);            xvect_best(:,:) = x(I(1),:);                   % x vector for all best         new_matrix = x(c_follow,:); % new matrix generation          range = r*range;                for cnt_column = 1:n            if abs(range(cnt_column))> 1e-16               new_range =  range/2;              else              new_range =  1e-16;              end            end              for cnt_row = 1:c            for cnt_column = 1:n                 new_lower_bound(cnt_row,cnt_column) = new_matrix(cnt_row,cnt_column)- new_range(cnt_column);                 new_upper_bound(cnt_row,cnt_column) = new_matrix(cnt_row,cnt_column)+ new_range(cnt_column);            end               end              for cnt_row = 1:c            for cnt_column = 1:n                 if new_lower_bound(cnt_row,cnt_column) < lower_bound(1,cnt_column)                      new_lower_bound(cnt_row,cnt_column) = lower_bound(1,cnt_column);                 end                     if new_upper_bound(cnt_row,cnt_column) > upper_bound(1,cnt_column)                     new_upper_bound(cnt_row,cnt_column) = upper_bound(1,cnt_column) ;                 end              end                end                  x = (new_upper_bound -new_lower_bound).*rand(c,n) + new_lower_bound;                      if (cnt_iterations <= max_iterations)               function_all(:,cnt_iterations) =  abs(Fbest);               cnt_all (cnt_iterations) = cnt_iterations;               x_all(:,:,cnt_iterations) =  x;               end               hold on;               cnt_iterations = cnt_iterations + 1;    end%     if (rem(cnt_iterations,1)==0)%         stop_1=1;%     end%     if (rem(cnt_iterations,1)==0)%         stop_1=1;%     end%     figure(1)%                  xlabel('Learning attempts','FontSize',12)%                  ylabel('Behavior','FontSize',12)%                plot(cnt_all,function_all(1,:),'k*');%                plot(cnt_all,function_all(2,:),'ko');%                plot(cnt_all,function_all(3,:),'k+');%                plot(cnt_all,function_all(4,:),'k.');%                plot(cnt_all,function_all(5,:),'ks');%                   legend ('candi1','candi2','candi3','candi4','candi5');% %                %pause(2);% %                hold on;%            %  % %     end
toc;time_elapsed = toc; end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MATLAB Code of Cohort Intelligence Algorithm with ROulette Wheel variation for Optimization of Surface Roughness (Ra), Material Removal Rate (MRR), and Pecentage Relative Electrode Wear Rate (REWR) of EDM Process
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear allclcticc = 5;  % number of candidatesn = 4;   % number of dimensionsupper_bound = [12.5 55 160 60];     lower_bound = [7.5 45 50 40];r = 0.99;max_iterations = 500;for cnt_runs = 1:1x = (upper_bound - lower_bound).*rand(c,n) + lower_bound; % random value generationrange = upper_bound - lower_bound;                       % original range calculationcnt_iterations = 1;        while (cnt_iterations <= max_iterations) % loop for max iterations                     for cnt_candi = 1:c            Fun(cnt_candi,:)= Ra_EDM(x(cnt_candi,1:n)); % call objective function here          end                 inverse_F = Fun.^-1;                     % 1/fxn         denominator_pc = sum(inverse_F,1);     %denominator calucated((1/fx(c1)+...+1/fx(cn)) for probability calculation                 for cnt_pc = 1:c            prob(cnt_pc,1) = inverse_F(cnt_pc,1)/denominator_pc; % probability pc1,...,pcm         end                 pcsum = sum(prob);  % checking cummulative sum = 1?                            for cnt_candi = 1:c            c_follow(cnt_candi) = RouletteWheelSelection(prob);          end                 [M,I] = min(Fun);            Fbest(1,:) = M(1, :);            xvect_best(:,:) = x(I(1),:);                   % x vector for all best         new_matrix = x(c_follow,:); % new matrix generation          range = r*range;                for cnt_column = 1:n            if abs(range(cnt_column))> 1e-16               new_range =  range/2;              else              new_range =  1e-16;              end            end              for cnt_row = 1:c            for cnt_column = 1:n                 new_lower_bound(cnt_row,cnt_column) = new_matrix(cnt_row,cnt_column)- new_range(cnt_column);                 new_upper_bound(cnt_row,cnt_column) = new_matrix(cnt_row,cnt_column)+ new_range(cnt_column);            end               end              for cnt_row = 1:c            for cnt_column = 1:n                 if new_lower_bound(cnt_row,cnt_column) < lower_bound(1,cnt_column)                      new_lower_bound(cnt_row,cnt_column) = lower_bound(1,cnt_column);                 end                     if new_upper_bound(cnt_row,cnt_column) > upper_bound(1,cnt_column)                     new_upper_bound(cnt_row,cnt_column) = upper_bound(1,cnt_column) ;                 end              end                end                  x = (new_upper_bound -new_lower_bound).*rand(c,n) + new_lower_bound;        x(c,:) = xvect_best;                                    if (cnt_iterations <= max_iterations)               function_all(:,cnt_iterations) = abs(Fbest);               cnt_all (cnt_iterations) = cnt_iterations;               x_all(:,:,cnt_iterations) =  x;               end               hold on;               cnt_iterations = cnt_iterations + 1;    end%     if (rem(cnt_iterations,1)==0)%         stop_1=1;%     end%     if (rem(cnt_iterations,1)==0)%         stop_1=1;%     end%     figure(1)%                  xlabel('Learning attempts','FontSize',12)%                  ylabel('Behavior','FontSize',12)%                plot(cnt_all,function_all(1,:),'k*');%                plot(cnt_all,function_all(2,:),'ko');%                plot(cnt_all,function_all(3,:),'k+');%                plot(cnt_all,function_all(4,:),'k.');%                plot(cnt_all,function_all(5,:),'ks');%                   legend ('candi1','candi2','candi3','candi4','candi5');% %                %pause(2);% %                hold on;%            %  % %     endtoc;time_elapsed = toc; end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MATLAB Code of Multi- Cohort Intelligence Algorithm for Optimization of Surface Roughness (Ra), Material Removal Rate (MRR), and Pecentage Relative Electrode Wear Rate (REWR) of EDM Process
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Multi-Cohort Intelligence: An Intra- and Inter-group Learning and Competing Behavior %%%% Apoorva Shastri and Anand J Kulkarni %%% -------------------------------------------------------------------------% INITIALIZATION% -------------------------------------------------------------------------
close allclear allclcc = 5; % number of candidates     n = 4; % number of variablesk = 3; % number of cohortsupper_bound1 = 12.5; % upper bound of variable 1     lower_bound1 = 7.5;  % lower bound of variable 1upper_bound2 = 55;  % upper bound of variable 2    lower_bound2 = 45; % lower bound of variable 2upper_bound3 = 150;   % upper bound of variable 3    lower_bound3 = 50;   % lower bound of variable 3upper_bound4 = 60;  % upper bound of variable 4    lower_bound4 = 40;  % lower bound of variable 4r = 0.99;            % interval reduction factormax_iterations = 700;tk = 10; %quality variations for nonpool tpool = 5; %quality variations for poolZtkpool = 15;
for cnt_runs = 1:1    x1 = (upper_bound1 -lower_bound1).*rand(c,1,k) + lower_bound1;% variable value generationx2 = (upper_bound2 -lower_bound2).*rand(c,1,k) + lower_bound2;% variable value generationx3 = (upper_bound3 -lower_bound3).*rand(c,1,k) + lower_bound3;% variable value generationx4 = (upper_bound4 -lower_bound4).*rand(c,1,k) + lower_bound4;% variable value generationx = cat(2,x1,x2,x3,x4);range1 = upper_bound1 -lower_bound1; % original range calculation for variable 1range2 = upper_bound2 -lower_bound2; % original range calculation for variable 2range3 = upper_bound3 -lower_bound3; % original range calculation for variable 3range4 = upper_bound4 -lower_bound4; % original range calculation for variable 4
upper_bound = cat(2,upper_bound1,upper_bound2,upper_bound3,upper_bound4);lower_bound = cat(2,lower_bound1,lower_bound2,lower_bound3,lower_bound4);tic; for cnt_iterations=1:max_iterations % creating a pool of best candidates      for cnt_cohort = 1:k            for cnt_candi = 1:c              Fun(cnt_candi,:,cnt_cohort) = Ra_EDM(x(cnt_candi,:,cnt_cohort))% call objective function here            end      end                 [M,I] = min(Fun);            Fbest = M;            pool(1,:) = M(1, :);            poolZ = pool';            In(1,:) = I(1, :);                         for cnt_cohort = 1:k                xvect_best1(:,:,cnt_cohort) = x(In(1,cnt_cohort),:,cnt_cohort);                   % x vector for all best candidates                        [x_nonpool(:,:,cnt_cohort),PS]= removerows(x(:,:,cnt_cohort),[I(cnt_cohort)]);             [fun_non_pool_X(:,:,cnt_cohort),PS]= removerows(Fun(:,:,cnt_cohort),[I(cnt_cohort)]);             end                              A(:,:) =  xvect_best1(1, :);               xvect_best = vec2mat(A,n);  %  xvect_best_final cell generated for concatenation
% -------------------------------------------------------------------------% procedure for tk% ------------------------------------------------------------------------- for cnt_cohort = 1:k      inverse_F(:,:,cnt_cohort) = fun_non_pool_X(:,:,cnt_cohort).^-1;                     % 1/fxn       denominator_pc(:,1,cnt_cohort) = sum(inverse_F(:,:,cnt_cohort),1);     %denominator calucated((1/fx(c1)+...+1/fx(cn)) for probability calculation              prob(:,1,cnt_cohort) = inverse_F(:,1,cnt_cohort)/denominator_pc(:,1,cnt_cohort); % probability pc1,...,pcm           for cnt_candi = 1:c-1        c_follow(cnt_candi) = RouletteWheelSelection(prob(:,1,cnt_cohort)); %  Roulette Wheel     end             nmatrix = x_nonpool(c_follow,:,cnt_cohort); % new matrix generation    new_matrix{1,cnt_cohort} = nmatrix; end  %% range reduced by reduction factor r        range1 = r * range1;        range2 = r * range2;       range3 = r * range3;       range4 = r * range4;       new_range1 =  range1/2;       new_range2 =  range2/2;       new_range3 =  range3/2;       new_range4 =  range4/2;            new_range = cat(2,new_range1,new_range2,new_range3,new_range4);     new_range(new_range <= 10^-22)= 10^-30;
for cnt_cohort = 1: k    for cnt_candi = 1:c-1        for cnt_variables = 1:n            new_upper_bound_tk = new_matrix{cnt_cohort}(:,cnt_variables)+ new_range(:,cnt_variables); %new upper bound generation                                                                                   new_lower_bound_tk = new_matrix{cnt_cohort}(:,cnt_variables)- new_range(:,cnt_variables); %new lower bound generation                              new_upper_bound_tk(new_upper_bound_tk > upper_bound(:,cnt_variables)) = upper_bound(:,cnt_variables); %checking for original upper limit                  new_lower_bound_tk(new_lower_bound_tk < lower_bound(:,cnt_variables)) = lower_bound(:,cnt_variables); %checking for original lower limit                                  for cnt_tk = 1:tk                   n_x(cnt_tk,cnt_variables)= (new_upper_bound_tk(cnt_candi,1)- new_lower_bound_tk(cnt_candi,1)) * rand(1,1) +  new_lower_bound_tk(cnt_candi,1);                 end        end
            x_tk{cnt_cohort} = n_x;    end  end     % -------------------------------------------------------------------------% -------------------------------------------------------------------------% procedure for tpool% -------------------------------------------------------------------------for cnt_cohort = 1:k      inverse_F_poolZ = poolZ.^-1;                     % 1/fxn       denominator_pc_tpoolZ = sum(inverse_F_poolZ,1);     %denominator calucated((1/fx(c1)+...+1/fx(cn)) for probability calculation              prob_tpoolZ= inverse_F_poolZ/denominator_pc_tpoolZ; % probability pc1,...,pcm          for cnt_candi = 1:c-1        c_follow_tpoolZ(cnt_candi) = RouletteWheelSelection(prob_tpoolZ); %  Roulette Wheel    end
        nmatrix_tpool = xvect_best(c_follow_tpoolZ,:);% new matrix generation                new_matrix_tpool{1,cnt_cohort} = nmatrix_tpool;     end           for cnt_cohort = 1: k    for cnt_candi = 1:c-1        for cnt_variables = 1:n            new_upper_bound_tpool = new_matrix_tpool{cnt_cohort}(:,cnt_variables)+ new_range(:,cnt_variables);%new upper bound generation                                                                            new_lower_bound_tpool = new_matrix_tpool{cnt_cohort}(:,cnt_variables)- new_range(:,cnt_variables);%new lower bound generation                              new_upper_bound_tpool(new_upper_bound_tpool  > upper_bound(:,cnt_variables)) = upper_bound(:,cnt_variables);%checking for original upper limit                  new_lower_bound_tpool( new_lower_bound_tpool < lower_bound(:,cnt_variables)) = lower_bound(:,cnt_variables);%checking for original lower limit                            for cnt_tpool = 1:tpool                   x_tp(cnt_tpool,cnt_variables)= (new_upper_bound_tpool(cnt_candi,1)- new_lower_bound_tpool(cnt_candi,1)) * rand(1,1) +  new_lower_bound_tpool(cnt_candi,1);                 end        end                      x_tpool{cnt_cohort} = x_tp;    endend
           for cnt_cohort = 1:k               for cnt_candi = 1:c-1                 x_tpool_tk{cnt_candi,cnt_cohort} = cat(1,x_tk{1,cnt_cohort}, x_tpool{1,cnt_cohort});               end           end
               for cnt_cohort = 1:k               for cnt_candi = 1:c-1                          y(:,:,cnt_cohort)= x_tpool_tk{cnt_candi,cnt_cohort};      for cnt_tkpool = 1:tkpool       Fun1(cnt_tkpool,:) = Ra_EDM(y(cnt_tkpool,:)); %call objective function here      end                                        [Mf,If] = min(Fun1);             Fmin(cnt_candi,:,cnt_cohort) = Mf;              xbest = (y(If,:,cnt_cohort));             xi(cnt_candi,:,cnt_cohort) = xbest;                end      end           for cnt_cohort = 1:k          F_x(:,:,cnt_cohort) = cat(1, Fmin(:,:,cnt_cohort), Fbest(:,:,cnt_cohort));     end                     A1(:,:) =  F_x(:, :);            Fun1_all = reshape(A1,tkpool,1);              [f,I] = min(F_x);                        f_final(1,:) = f(1, :);                       f_final_out =  f_final'
             minima = min(f_final_out)                          for cnt_cohort = 1:k          x(:,:,cnt_cohort) = cat(1, xi(:,:,cnt_cohort), xvect_best1(:,:,cnt_cohort));             end                           function_all(:,cnt_iterations) =  f_final_out;           function_all_plot(:,cnt_iterations) =  Fun1_all;                     hold on;          cnt_itera_p(cnt_iterations)= cnt_iterations; end %% Multi-CI convergence plot          for cnt_1 = 1:5   fun_cohort1(cnt_1,:)= function_all_plot(cnt_1,:) end  for cnt_2 = 6:10   fun_cohort2(cnt_2,:)= function_all_plot(cnt_2,:) end  for cnt_3 = 11:15    fun_cohort3(cnt_3,:)= function_all_plot(cnt_3,:)  end   if (rem(cnt_iterations,1) == 0)               stop_1 = 1;            end
         if (rem(cnt_iterations,1) == 0)            stop_1 = 1;        end
             figure(1)            xlabel('Learning attempts','FontSize',12)           ylabel('Function values','FontSize',12) plot(cnt_itera_p,function_all(1,:),'k'); legend('cohort1'); plot(cnt_itera_p,function_all(2,:),'k--'); legend('cohort2'); plot(cnt_itera_p,function_all(3,:),'k:'); legend('cohort3'); toc; time_elapsed = toc;  end
end

%%%%%%%%%%%%%%%%%%%%%%% Roulette Wheel Selection Code %%%%%%%%%%%%%%%%%%%%
function choice = RouletteWheelSelection(prob) total = cumsum(prob); p = rand() * total(end); leader = -1; for index = 1:length(total)   if (total(index) > p)     leader = index;     break;   end end choice = leader;
%%%%%%%%%%%%%%%%%%%%% Objective Functions %%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%% Ra %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function y = Ra_EDM(x)y= 31.547-0.618*x(1)-0.438*x(2)+0.059*x(3)-0.59*x(4)+0.019*x(1)*x(4)+0.0075*x(2)*x(4);end
%%%%%%%%%%%%%%%%%%%%%%%%%%% MRR %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function y = MRR(x)y= -(-253.15+39.7*x(1)+4.277*x(2)+1.569*x(3)-1.375*x(4)-0.0059*(x(3)*x(3))-0.536*x(1)*x(2))end
%%%%%%%%%%%%%%%%%%%%%  REWR  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function y = REWR(x)y1 = (196.564) - (24.19*x(1)) - (3.135*x(2)) - (1.781*x(3)) + (0.153*x(4))+ (0.464*x(1)*x(2)) + (0.158*x(1)*x(3)) + (0.025*x(1)*x(4)) + (0.029*x(2)*x(3)) - (0.017*x(2)*x(4)) - (0.003385*x(1)*x(2)*x(3));y2 = (0.093*x(1)^2) + (0.001491*x(3)^2) + (0.005265*x(4)^2);y = abs(y1+y2);end