蚁群聚类算法及其源码[matlab] 代码是可以执行的

源代码在线查看: 蚁群聚类算法及其源码[matlab].txt

软件大小: 6 K
上传用户: mengcong18
关键词: matlab 蚁群聚类 算法 源码
下载地址: 免注册下载 普通下载 VIP

相关代码

				程序代码: (代码标记  [code]...[/code]  )
				
				上周忙着看公钥算法,基础要补的太多,看得晕晕的~~周末去了一趟河北,和博士一起去的,看到久违的“鸭子”,呵呵,大家改变都不大,鸭子现在做sp,我正好感兴趣,但他做的是固话的sp,主要是语音服务方面,呵呵,话题扯远了,于是我就没时间看我的ACO了。不知怎么的,我按照“晃晃悠悠”的提示进行改动,但我的fitness值始终没有收敛,用uci的iris的dataset,效果不好,准确率也不高,fitness值达到了280多,不知道咋回事。干脆把算法放到这里,各位有兴趣的朋友一起讨论一下,但要申明这是转自晃晃悠悠的blog:
				
				% Ant Colony Optimization for the Clustering 
				% Reference : An ant colony approach for clustering
				%
				% Author : Du Yi 
				% 
				% Copyright : http://dy1981.yculblog.com/
				%
				% Data : 31/03/06
				
				clc;
				clear;
				% N = number_of_test_sample; 
				N =150;
				% n = number_of_attribute_of_test_sample; 
				n = 4;
				% K = number_of_cluster; 
				K = 3;
				% R = number_of_ants; 
				R = 10;
				% t_max = MaxIterations; 
				t_max = 1000;
				% X = test_sample_matrix;
				X = [
				 5.1 3.5 1.4 0.2  
				4.9 3.0 1.4 0.2  
				4.7 3.2 1.3 0.2  
				4.6 3.1 1.5 0.2  
				5.0 3.6 1.4 0.2  
				5.4 3.9 1.7 0.4  
				4.6 3.4 1.4 0.3  
				5.0 3.4 1.5 0.2  
				4.4 2.9 1.4 0.2  
				4.9 3.1 1.5 0.1  
				5.4 3.7 1.5 0.2  
				4.8 3.4 1.6 0.2  
				4.8 3.0 1.4 0.1  
				4.3 3.0 1.1 0.1  
				5.8 4.0 1.2 0.2  
				5.7 4.4 1.5 0.4  
				5.4 3.9 1.3 0.4  
				5.1 3.5 1.4 0.3  
				5.7 3.8 1.7 0.3  
				5.1 3.8 1.5 0.3  
				5.4 3.4 1.7 0.2  
				5.1 3.7 1.5 0.4  
				4.6 3.6 1.0 0.2  
				5.1 3.3 1.7 0.5  
				4.8 3.4 1.9 0.2  
				5.0 3.0 1.6 0.2  
				5.0 3.4 1.6 0.4  
				5.2 3.5 1.5 0.2  
				5.2 3.4 1.4 0.2  
				4.7 3.2 1.6 0.2  
				4.8 3.1 1.6 0.2  
				5.4 3.4 1.5 0.4  
				5.2 4.1 1.5 0.1  
				5.5 4.2 1.4 0.2  
				4.9 3.1 1.5 0.1  
				5.0 3.2 1.2 0.2  
				5.5 3.5 1.3 0.2  
				4.9 3.1 1.5 0.1  
				4.4 3.0 1.3 0.2  
				5.1 3.4 1.5 0.2  
				5.0 3.5 1.3 0.3  
				4.5 2.3 1.3 0.3  
				4.4 3.2 1.3 0.2  
				5.0 3.5 1.6 0.6  
				5.1 3.8 1.9 0.4  
				4.8 3.0 1.4 0.3  
				5.1 3.8 1.6 0.2  
				4.6 3.2 1.4 0.2  
				5.3 3.7 1.5 0.2  
				5.0 3.3 1.4 0.2  
				7.0 3.2 4.7 1.4  
				6.4 3.2 4.5 1.5  
				6.9 3.1 4.9 1.5  
				5.5 2.3 4.0 1.3  
				6.5 2.8 4.6 1.5  
				5.7 2.8 4.5 1.3  
				6.3 3.3 4.7 1.6  
				4.9 2.4 3.3 1.0  
				6.6 2.9 4.6 1.3  
				5.2 2.7 3.9 1.4  
				5.0 2.0 3.5 1.0  
				5.9 3.0 4.2 1.5  
				6.0 2.2 4.0 1.0  
				6.1 2.9 4.7 1.4  
				5.6 2.9 3.6 1.3  
				6.7 3.1 4.4 1.4  
				5.6 3.0 4.5 1.5  
				5.8 2.7 4.1 1.0  
				6.2 2.2 4.5 1.5  
				5.6 2.5 3.9 1.1  
				5.9 3.2 4.8 1.8  
				6.1 2.8 4.0 1.3  
				6.3 2.5 4.9 1.5  
				6.1 2.8 4.7 1.2  
				6.4 2.9 4.3 1.3  
				6.6 3.0 4.4 1.4  
				6.8 2.8 4.8 1.4  
				6.7 3.0 5.0 1.7  
				6.0 2.9 4.5 1.5  
				5.7 2.6 3.5 1.0  
				5.5 2.4 3.8 1.1  
				5.5 2.4 3.7 1.0  
				5.8 2.7 3.9 1.2  
				6.0 2.7 5.1 1.6  
				5.4 3.0 4.5 1.5  
				6.0 3.4 4.5 1.6  
				6.7 3.1 4.7 1.5  
				6.3 2.3 4.4 1.3  
				5.6 3.0 4.1 1.3  
				5.5 2.5 4.0 1.3  
				5.5 2.6 4.4 1.2  
				6.1 3.0 4.6 1.4  
				5.8 2.6 4.0 1.2  
				5.0 2.3 3.3 1.0  
				5.6 2.7 4.2 1.3  
				5.7 3.0 4.2 1.2  
				5.7 2.9 4.2 1.3  
				6.2 2.9 4.3 1.3  
				5.1 2.5 3.0 1.1  
				5.7 2.8 4.1 1.3  
				6.3 3.3 6.0 2.5  
				5.8 2.7 5.1 1.9  
				7.1 3.0 5.9 2.1  
				6.3 2.9 5.6 1.8  
				6.5 3.0 5.8 2.2  
				7.6 3.0 6.6 2.1  
				4.9 2.5 4.5 1.7  
				7.3 2.9 6.3 1.8  
				6.7 2.5 5.8 1.8  
				7.2 3.6 6.1 2.5  
				6.5 3.2 5.1 2.0  
				6.4 2.7 5.3 1.9  
				6.8 3.0 5.5 2.1  
				5.7 2.5 5.0 2.0  
				5.8 2.8 5.1 2.4  
				6.4 3.2 5.3 2.3  
				6.5 3.0 5.5 1.8  
				7.7 3.8 6.7 2.2  
				7.7 2.6 6.9 2.3  
				6.0 2.2 5.0 1.5  
				6.9 3.2 5.7 2.3  
				5.6 2.8 4.9 2.0  
				7.7 2.8 6.7 2.0  
				6.3 2.7 4.9 1.8  
				6.7 3.3 5.7 2.1  
				7.2 3.2 6.0 1.8  
				6.2 2.8 4.8 1.8  
				6.1 3.0 4.9 1.8  
				6.4 2.8 5.6 2.1  
				7.2 3.0 5.8 1.6  
				7.4 2.8 6.1 1.9  
				7.9 3.8 6.4 2.0  
				6.4 2.8 5.6 2.2  
				6.3 2.8 5.1 1.5  
				6.1 2.6 5.6 1.4  
				7.7 3.0 6.1 2.3  
				6.3 3.4 5.6 2.4  
				6.4 3.1 5.5 1.8  
				6.0 3.0 4.8 1.8  
				6.9 3.1 5.4 2.1  
				6.7 3.1 5.6 2.4  
				6.9 3.1 5.1 2.3  
				5.8 2.7 5.1 1.9  
				6.8 3.2 5.9 2.3  
				6.7 3.3 5.7 2.5  
				6.7 3.0 5.2 2.3  
				6.3 2.5 5.0 1.9  
				6.5 3.0 5.2 2.0  
				6.2 3.4 5.4 2.3  
				5.9 3.0 5.1 1.8  
				   ];
				
				% INITIALIZATION 
				
				% pheromone trails 
				c = 10^-2;
				tau = ones(N,K) * c;
				%tau = [
				%    0.014756 0.015274 0.009900;
				%    0.015274 0.009900 0.014756;
				%    0.015274 0.014756 0.009900;
				%    0.009900 0.015274 0.014756;
				%    0.014756 0.015274 0.009900;
				%    0.009900 0.014756 0.015274;
				%    0.009900 0.020131 0.009900;
				%    0.015274 0.014756 0.009900;
				%];
				% probability  threshold q
				q = 0.9;
				% evaporation rate
				rho = 0.1;
				% fitness function
				best_solution_function_value = inf;
				
				t = 1; 
				while ((t 				   
				% SEND R ANTS EACH WITH EMPTY SOLUTION STRING,S =============================
				% solution string : every ant construction solution and fitness function
				solution_string = zeros(R,N+1);
				
				% COMPUTE R SOLUTION 
				
				for i = 1 : R            
				   % solution_string(1,1:N) = randint(1,N,[1,K]);
				    r = rand(1,N);              %construct solution Si using pheromone trail
				    for g = 1 : N
				        if r(g) < q
				            tau_max = max(tau(g,:));
				            Cluster_number = find(tau(g,:)==tau_max);
				            solution_string(i,g) = Cluster_number(1);    %%%%%%%%%%%%% 1--i
				        else
				            sum_p = sum(tau(g,:)); 
				            p = tau(g,:) / sum_p; 
				            for u = 2 : K 
				                p(u) = p(u) + p(u-1); 
				           end
				           rr = rand; 
				           %Cluster_number = K;
				           for s = 1 : K 
				               if (rr 				                   Cluster_number = s;
				                   solution_string(i,g) = Cluster_number;  %%%%%%%%%%%%%  1--i
				                   break; 
				               end 
				           end
				       end
				   end
				   
				   % compute weights(weight) of all test samples and cluster centers(cluster_center)
				   
				   weight = zeros(N,K);
				   for h = 1:N
				       Cluster_index = solution_string(i,h);            %%%%%%%%%%%%%  1--i
				       weight(h,Cluster_index) = 1;
				   end
				   
				   cluster_center = zeros(K,n);
				   for j = 1:K
				       for v = 1:n
				           sum_wx = sum(weight(:,j).*X(:,v));
				           sum_w = sum(weight(:,j));
				           if sum_w==0
				             cluster_center(j,v) =0
				              continue;
				          else
				           cluster_center(j,v) = sum_wx/sum_w;
				       end
				       end
				   end
				   
				   % computer clustering metric and 
				   % assign it as objective function value Fi of solution ,Si
				   
				  F = 0;
				  for j= 1:K
				      for ii = 1:N
				          Temp=0;
				          if solution_string(i,ii)==j;                 %%%%%%%%%%%%%  1--i
				              for v = 1:n
				                  Temp = ((abs(X(ii,v)-cluster_center(j,v))).^2)+Temp;
				              end
				              Temp = sqrt(Temp);
				          end
				          F = (Temp)+F;
				      end
				  end
				
				   solution_string(i,end) = F;                        %%%%%%%%%%%%%  1--i
				  
				end %for i = 1 : R 
				
				% select best L solutions out of R solutions using objective function values
				
				% LOCAL SEARCH PROCEDURES====================================================
				
				% fitness sort in ascending order
				[fitness_ascend,solution_index] = sort(solution_string(:,end),1);
				solution_ascend = [solution_string(solution_index,1:end-1) fitness_ascend];
				
				% pls is local search threshold probability
				pls = 0.05;
				% perform local search on L solution
				L = 2;
				
				% local search procedures
				solution_temp = zeros(L,N+1);
				k = 1;
				while(k 				   solution_temp(k,:) = solution_ascend(k,:);
				   rp = rand(1,N);
				   for i = 1:N
				       if rp(i) 				           current_cluster_number = setdiff([1:K],solution_temp(k,i));
				           change_cluster = randint(1,1,current_cluster_number);
				           solution_temp(k,i) = change_cluster;
				       end
				   end
				   
				   % computer weights of all test samples and cluster centers
				   
				   solution_temp_weight = zeros(N,K);
				   for h = 1:N
				       solution_temp_cluster_index = solution_temp(k,h);            %%%%%%%%%%%%%  1--k
				       solution_temp_weight(h,solution_temp_cluster_index) = 1;
				   end
				   
				   solution_temp_cluster_center = zeros(K,n);
				   for j = 1:K
				       for v = 1:n
				           solution_temp_sum_wx = sum(solution_temp_weight(:,j).*X(:,v));
				           solution_temp_sum_w = sum(solution_temp_weight(:,j));
				           if solution_temp_sum_w==0
				             solution_temp_cluster_center(j,v) =0;
				              continue;
				          else
				           solution_temp_cluster_center(j,v) = solution_temp_sum_wx/solution_temp_sum_w;
				       end
				       end
				   end
				   
				   % computer solution temp clustering metric and 
				   % assign it as objective function value Ft of solution ,St
				   
				  solution_temp_F = 0;
				  for j= 1:K
				      for ii = 1:N
				          st_Temp=0;
				          if solution_temp(k,ii)==j;                                %%%%%%%%%%%%%  1--k
				              for v = 1:n
				                  st_Temp = ((abs(X(ii,v)-solution_temp_cluster_center(j,v))).^2)+st_Temp;
				              end
				              st_Temp = sqrt(st_Temp);
				          end
				          solution_temp_F = (st_Temp)+solution_temp_F;
				      end
				  end
				  
				  solution_temp(k,end) = solution_temp_F;                           %%%%%%%%%%%%%  1--k
				  
				  % if Ft				  if solution_temp(k,end) 				      solution_ascend(k,:) = solution_temp(k,:);                     %%%%%%%%%%%%%  1--k
				  end
				  
				  if solution_ascend(k,end)				      best_solution = solution_ascend(k,:);
				  end
				
				   k = k+1;
				end   %end while(local search)
				
				
				% UPDATE PHEROMONE TRAIL MATRIX=============================================
				% Update pheromone trail matrix using best L solution
				% for i = 1 : N
				%     %for j = 1 : L
				%         tau(i,best_solution(1,i)) = (1 - rho) * tau(i,best_solution(1,i)) + rho / (sum(best_solution(1,end))); 
				%         %end
				% end
				% 
				% t = t+1;
				% end %while(main)
				%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
				
				tau_F = 0;
				for j = 1:L    
				   tau_F = tau_F + solution_ascend(j,end);
				end
				for i = 1 : N        
				   tau(i,best_solution(1,i)) = (1 - rho) * tau(i,best_solution(1,i)) + 1/ tau_F; 
				
				%use 1/tau_F or rho/tau_F, neither of them is good
				end 
				%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
				t=t+1;
				end  
				   
				clc; 
				t 
				best_solution = solution_ascend(1,1:end-1) 
				best_solution_function_value =  solution_ascend(1,end)
				
							

相关资源