Cohort Intelligence (CI)

Cohort Intelligence

In past few years, a number of methodologies inspired from the biological and natural systems have been proposed for solving complex optimization problems including evolutionary algorithms (EAs), swarm optimization (SO), and ant colony optimization algorithms, among others. These methods are becoming increasingly popular because of their use of simple rules in the process of searching for optimal solutions to computational problems. 

In the same spirit, a new optimization technique referred to as Cohort Intelligence (CI) has recently been developed by Kulkarni et al. in 2013. CI is based on artificial intelligence (AI) concepts. It attempts to model the behavior often observed in a self-organizing system in which candidates in a cohort interact and compete with one another in order to achieve shared goals. Each candidate tries to improve its own behavior by observing the behavior of every other candidate in that cohort. Each candidate in the cohort follows a certain behavior which may result in the improvement of its own behavior. When a candidate attempts to follow a given behavior characterized by certain qualities, it often adopts such qualities in a manner that may improve its own goal. In this way, candidates in the cohort learn from one another which, in time, helps improve the behavior of the entire group. The cohort’s behavior as a whole is said to have reached saturation (convergence) if, over a considerable number of learning attempts, the individual behavior of all candidates does not improve considerably making it difficult to distinguish between them. In other words, the difference between the individual behaviors of the candidates becomes insignificant.

Graphical Illustration of Cohort Intelligence Procedure

%% Application of CI for Sphere, Griewank and Rosenbrock functionclear clctic
%% Initialize number of candidates C in the cohort, and set up interval reduction factor rc = 3;  % number of candidates  r = 0.9 ; % interval reduction factormax_iterations = 50; % maximum number of iterations
%% Define function parameters and initialize the variablesn = 2;   % number of dimensions     upper_bound = 5.12;     % Upper bound of the defined functionlower_bound = -5.12;    % Lower bound of the defined function range = upper_bound - lower_bound; % original range calculationx = (upper_bound -lower_bound).*rand(c,n) + lower_bound;% random value generation     
%% Calculate the probability associated with the behavior being followed by every candidate in the cohort
 for cnt_iterations = 1:max_iterations % loop for max iterations    for cnt_candi = 1:c         fun(cnt_candi,:)= spheref(x(cnt_candi,1:n)); % *********call either Sphere, Griewank and Rosenbrock function **********     end    prob = fun.^-1/sum(fun.^-1);% probability pc1,...,pcm
%% Using roulette wheel approach every candidate selects behavior to follow from within the C available choices    for cnt_candi = 1:c        c_follow(cnt_candi) = RouletteWheelSelection(prob); %  Roulette Wheel    end      new_matrix = x(c_follow,:); % new matrix generation
%% Every candidate shrinks/expands the sampling interval of every quality i based on whether condition of saturation is satisfied    range = r * range; % range reduced by reduction factor r    new_range =  range/2;       %% Every candidate forms new behaviors by sampling the qualities from within the updated sampling intervals    for cnt_candi = 1:c        for cnt_variables = 1:n        new_lower_bound = max(new_matrix(cnt_candi,cnt_variables)+ new_range,new_range); % updated new lower bound        new_upper_bound = min(new_matrix(cnt_candi,cnt_variables)- new_range,new_range); % updated new upper bound        x(cnt_candi,cnt_variables) = (new_upper_bound- new_lower_bound)*rand(1,1) +  new_lower_bound; % updated random value generation        end    end    %% Storing the behavior    function_all(:,cnt_iterations) = fun;    x_all(:,:,cnt_iterations) = x;     %% Sphere Function Plot behavior    x1 = lower_bound:1:upper_bound;%for x axis    x2 = lower_bound:1:upper_bound;%for y axis    [X,Y] = meshgrid(x1,x2);    Z = [X.^2+Y.^2];
%% Contour plotfigure(1)        contour(x1,x2,Z);colorbar;hold on        plot3(x(1,1),x(1,2),fun(1),'p','MarkerSize',10,'MarkerFaceColor','r')        plot3(x(2,1),x(2,2),fun(2),'s','MarkerSize',10,'MarkerFaceColor','g')         plot3(x(3,1),x(3,2),fun(1),'d','MarkerSize',10,'MarkerFaceColor','c')         hold offpause(0.5)
%% Mesh Plotfigure(2)        mesh(x1,x2,Z);colorbar;hold on        plot3(x(1,1),x(1,2),fun(1),'*-','MarkerSize',10,'MarkerFaceColor','r')        plot3(x(2,1),x(2,2),fun(2),'*','MarkerSize',10,'MarkerFaceColor','g')         plot3(x(3,1),x(3,2),fun(1),'*','MarkerSize',10,'MarkerFaceColor','c')        hold onpause(0.5)
%% Convergence 2D plotfigure(3)         plot(cnt_iterations,fun(1),'*',cnt_iterations,fun(2),'o',cnt_iterations,fun(3),'+');         xlabel('Learning Attempts','FontSize',12);          ylabel('Behavior','FontSize',12);         title('Convergence plot','FontSize',12);         legend('C1','C2', 'C3', 'C4');         hold onpause(0.5)end
%% Accept the current cohort behavior as final solutiontocfprintf('\n minimum value is = %e',min(fun));

%***************************************************************function [y] = spheref(x)
d = length(x);sum = 0;for ii = 1:d  xi = x(ii); sum = sum + xi^2;end
y = sum;
end
%***************************************************************function [y] = rosen(xx)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ROSENBROCK FUNCTION
%% INPUT:%% xx = [x1, x2, ..., xd]%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
d = length(xx);sum = 0;for ii = 1:(d-1)  xi = xx(ii); xnext = xx(ii+1); new = 100*(xnext-xi^2)^2 + (xi-1)^2; sum = sum + new;end
y = sum;
end
%***************************************************************function [y] = griewank(xx)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% INPUT:%% xx = [x1, x2, ..., xd]%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
d = length(xx);sum = 0;prod = 1;
for ii = 1:d  xi = xx(ii); sum = sum + xi^2/4000; prod = prod * cos(xi/sqrt(ii));end
y = sum - prod + 1;
end
%***************************************************************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;

Cohort Intelligence Flowchart (Kulkarni et al. 2013 and 2015)

Research Team Members:

Anand J Kulkarni (Symbiosis International University, India)

Neha Patankar (North Carolina State University, USA)

Ishaan Kale (Symbiosis International University, India)

Ganesh Krishnasamy (University of Malaya, Malaysia)

Apoorva Shastri (Symbiosis International University, India)

Mandar Sapre (Symbiosis International University, India)

Dipti Kapoor Sarmah (Symbiosis International University, India)

Omkar Kulkarni (Pune University, India)

Shreesh (Symbiosis International University, India)

Kishor (Symbiosis International University, India)

Project: Cohort Intelligence for Obstacle Avoidance of a Swarm of Robots 

Siddharth Basu (Symbiosis International University, India)

Rishi Devarakonda (Symbiosis International University, India)

Siddarth Mehra (Symbiosis International University, India)

Palash Roychowdhury (Symbiosis International University, India)

Prakhar Shrivastava (Symbiosis International University, India)