三维数据的蚁群聚类源码程序 - matlab算法设计 - 谷速源码
下载频道> 资源分类> matlab源码> 算法设计> 三维数据的蚁群聚类源码程序

标题:三维数据的蚁群聚类源码程序
分享到:

所属分类: 算法设计 资源类型: 文件大小: 4.04 KB 上传时间: 2016-01-27 18:20:07 下载次数: 134 资源积分:1分 提 供 者: 马云 三维数据的蚁群聚类源码程序
内容:
三维数据的蚁群聚类源码程序,程序员在编程的过程中可以参考学习使用,希望对IT程序员有用,此源码程序简单易懂、方便阅读,有很好的学习价值!
clc;
clf;
clear;
 % X = 测试样本矩阵;
%  X = load('data.txt');
X=[
2232.43 3077.87 1298.87;
1580.1 1752.07 2463.04;
1962.4 1594.97 1835.95;
1495.18 1957.44 3498.02;
1125.17 1594.39 2937.73;
24.22 3447.31 2145.01;
1269.07 1910.72 2701.97;
1802.07 1725.81 1966.35;
1817.36 1927.4 2328.79;
1860.45 1782.88 1875.13;
1237.91 2055.13 3405.09;
688.94 2104.72 3198.51;
1675.65 1747.23 1580.39;
1806.02 1810.19 2191.12;
74.56 3288.02 2433.87;
307.35 3363.84 2021.61;
1988.27 1657.51 2069.2;
2173.92 2608.55 1803.57;
372.16 3077.44 2163.46;
576.6 2140.98 3320;
1724.13 1704.49 1798.75;
2501.21 2652.65 984.56;
1656.94 1913.34 2459.07;
362.51 3150.03 2472;
565.74 2284.97 3024.58;
1978.06 1536.13 2375.64;
1661.06 1552.4 2005.05;
790.29 2419.98 3051.16;
1557.27 1746.27 1879.13;
2793.36 3009.26 1073.55;
1766.08 1803.14 1895.18;
1207.88 1600.62 3123.07;
245.75 3373.67 2248.45;
2785.36 3052.81 1035.65;
315.42 3088.29 2187.12;
1243.28 2451.72 3111.99;
829.84 1555.91 3139.21;
1347.07 2364.31 3096.88;
1926.98 1507.34 1626.47;
1808.57 1608.78 1565.95;
1124.1 1840.98 2819.41;
2661 3302.39 1710.32;
1805.55 1899.09 2400.6;
1130.18 1902.42 2753.7;
1355.19 1566.16 2927.81;
1651.14 1774.03 1725.56;
2110.63 3308.04 702.06;
2788.11 3395.23 1684.45;
1807.61 1680.56 2356.65;
1363.58 1729.44 2749.55;
1992.42 1526.9 1581.42;     
]
[N,n]=size(X);      % N =测试样本数;n =测试样本的属性数;siza()函数用来获取矩阵的行数和列数,将矩阵的行数返回到第一个输出变量N,将矩阵的列数返回到第二个输出变量n
K = 4;              % K = 组数; 
R = 100;            % R = 蚂蚁数; 
t_max = 1000;       % t_max =最大迭代次数;                 
% 初始化
c = 10^-2;
tau = ones(N,K) * c;    %信息素矩阵,初始值为0.01的N*K矩阵(样本数*聚类数);设置禁忌表初始化
q = 0.9;                % 阈值q
rho = 0.1;              % 蒸发率 ??
best_solution_function_value = inf; % 最佳路径度量值(初值为无穷大,该值越小聚类效果越好)
tic                     %计时函数 定量的计算完成制定程序所消耗的时间资源
t = 1; 
%=======程序终止条件(下列两个终止条件任选其一)======
% while ((t<=t_max))                             %达到最大迭代次数而终止
% while ((best_solution_function_value>=19727))  %达到一定的聚类效果而终止
while ((best_solution_function_value>=19727))    
%=========================
    %路径标识字符:标识每只蚂蚁的路径
    solution_string = zeros(R,N+1);     
    for i = 1 : R                       %以信息素为依据确定蚂蚁的路径
        r = rand(1,N);    %随机产生值为0-1随机数的1*51的数组
        for g = 1 : N
            if r(g) < q     %如果r(g)小于阈值
                tau_max = max(tau(g,:));
                Cluster_number = find(tau(g,:)==tau_max);   %聚类标识数,选择信息素最多的路径
                solution_string(i,g) = Cluster_number(1);   %确定第i只蚂蚁对第g个样本的路径标识
            else            %如果r(g)大于阈值,求出各路径信息素占在总信息素的比例,按概率选择路径
                sum_p = sum(tau(g,:)); 
                p = tau(g,:) / sum_p; 
                for u = 2 : K 
                    p(u) = p(u) + p(u-1); 
                end
               rr = rand;          
                for s = 1 : K 
                    if (rr <= p(s)) 
                       Cluster_number = s;
                       solution_string(i,g) = Cluster_number;  
                    break; 
                end 
            end
        end
    end
 
    % 计算聚类中心
    weight = zeros(N,K);
       for h = 1:N              %给路径做计算标识
           Cluster_index = solution_string(i,h); %类的索引编号          
           weight(h,Cluster_index) = 1;          %对样本选择的类在weight数组的相应位置标1
       end
 
       cluster_center = zeros(K,n);  %聚类中心(聚类数K个中心)
       for j = 1:K
           for v = 1:n
               sum_wx = sum(weight(:,j).*X(:,v));   %各类样本各属性值之和
               sum_w = sum(weight(:,j));            %各类样本个数
               if sum_w==0                          %该类样本数为0,则该类的聚类中心为0
                 cluster_center(j,v) =0
                  continue;
               else                                 %该类样本数不为0,则聚类中心的值取样本属性值的平均值
               cluster_center(j,v) = sum_wx/sum_w;
               end
            end
       end
 
    % 计算各样本点各属性到其对应的聚类中心的均方差之和,该值存入solution_string的最后一位
      F = 0;
      for j= 1:K
          for ii = 1:N
              Temp=0;
              if solution_string(i,ii)==j;                
                  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;                      
 
    end 
    %根据F值,把solution_string矩阵升序排序
    [fitness_ascend,solution_index] = sort(solution_string(:,end),1);
    solution_ascend = [solution_string(solution_index,1:end-1) fitness_ascend];
   for k=1:R     
              if solution_ascend(k,end)<=best_solution_function_value
              best_solution = solution_ascend(k,:);
          end
      k = k+1;
      end   
 
    % 用最好的L条路径更新信息数矩阵
    tau_F = 0;
    L=2;
    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; 
    %1/tau_F和rho/tau_F效果都很好
    end 
    t=t+1
     best_solution_function_value =  solution_ascend(1,end)   
end
time=toc;
clc
time
cluster_center
best_solution = solution_ascend(1,1:end-1);
IDY=ctranspose(best_solution)
best_solution_function_value =  solution_ascend(1,end)
%分类结果显示
plot3(cluster_center(:,1),cluster_center(:,2),cluster_center(:,3),'o');grid;box
title('蚁群聚类结果(R=100,t=10000)')
xlabel('X')
ylabel('Y')
zlabel('Z')
YY=[1 2 3 4];
index1 = find(YY(1) == best_solution)
index2 = find(YY(2) == best_solution)
index3 = find(YY(3) == best_solution)
index4 = find(YY(4) == best_solution)
line(X(index1,1),X(index1,2),X(index1,3),'linestyle','none','marker','*','color','g');
line(X(index2,1),X(index2,2),X(index2,3),'linestyle','none','marker','*','color','r');
line(X(index3,1),X(index3,2),X(index3,3),'linestyle','none','marker','+','color','b');
line(X(index4,1),X(index4,2),X(index4,3),'linestyle','none','marker','s','color','b');
rotate3d

文件列表(点击上边下载按钮,如果是垃圾文件请在下面评价差评或者投诉):

三维数据的蚁群聚类源码程序/
三维数据的蚁群聚类源码程序/xx/
三维数据的蚁群聚类源码程序/xx/data.txt
三维数据的蚁群聚类源码程序/xx/jibenyiqunjulei.m

关键词: 三维 源码 程序

Top_arrow
回到顶部
联系方式| 版权声明| 招聘信息| 广告服务| 银行汇款| 法律顾问| 兼职技术| 付款方式| 关于我们|
网站客服网站客服 程序员兼职招聘 程序员兼职招聘
沪ICP备19040327号-3
公安备案号:沪公网安备 31011802003874号
库纳格流体控制系统(上海)有限公司 版权所有
Copyright © 1999-2014, GUSUCODE.COM, All Rights Reserved