m基于果蝇优化的K-means数据聚类分析matlab仿真

简介: m基于果蝇优化的K-means数据聚类分析matlab仿真

1.算法描述

    果蝇优化算法FOA(Fruit Fly Optimization Algorithm)是由台湾博士潘文超于2011年提出的,与蚁群算法和粒子群算法类似,是基于动物群体觅食行为演化出的一种寻求全局优化的新方法[1-3]。它不同于顺序执行的传统智能算法,而是以果蝇群体自组织性和并行性为基础,构造出的一种动物自治体模型。FOA有着算法简单、控制参数少、容易实现、且具有一定并行性等特点,因此在各领域得到广泛应用[4]。FOA可以优化神经网络参数,已成功应用于企业经营绩效评估、外贸出口预测、原油含水率预测等[3,5-6];FOA也可优化支持向量机模型,已成功应用于故障诊断、物流需求量预测等[7-8]。但由于FOA是较晚提出的一种随机搜索算法,其在理论分析和应用研究等方面还处于初级阶段,同时也存在易发散、收敛精度不高等缺点。

   果蝇优化算法(FOA)通过模拟果蝇利用敏锐的嗅觉和视觉进行捕食的过程,FOA实现对解空间的群体迭代搜索。FOA原理易懂、操作简单、易于实现,具有较强的局部搜索能力。FOA在计算方法上类似于遗传算法,但不同的是FOA不使用杂交和变异等算子,而是通过模仿果蝇特殊的嗅觉和视觉特点来进行搜索。果蝇的嗅觉器官能很好地搜集飘浮在空气中的各种气味,甚至能嗅到几十公里以外的食物源。然后飞近食物位置,使用敏锐的视觉发现食物与同伴聚集的位置,并且往该方向飞去,蝇优化算法分为以下几个步骤。

(1) 初始化果蝇群体

b74af60a9a8d89f6e7d46e881f4a7246_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

(2) 给出果蝇个体利用嗅觉搜寻食物的方向与距离:

829452c5fc410cd7fb261cb632423413_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

(3)计算果蝇个体与原点之间的距离和味道浓度判定值

020d2d2fdb3cb32e2d89b4159986118e_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

(4)求出该果蝇个体位置的味道浓度

f79e0bb4278c21adb8b614efff6814f2_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

(5) 找出此果蝇群体中味道浓度最高的果蝇

9f97b95911e5fa43c4e377f4419cb8c0_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

(6) 保留最佳味道浓度值与坐标,此时果蝇群体利用视觉往该位置飞去。

(7) 进入迭代优,重复执行步骤(2) ~ 步骤(5),并判断味道浓度是否优于前一迭代味道浓度,若是则执行步骤(6)。

    K-means聚类算法全局搜索能力较低并且选择初始质心的具有盲目性,果蝇算法具有优越的全局搜素能力但寻优方向不稳定,因此对果蝇算法(FOA)进行改进并以此优化K-means.在模型基础上利用密度标准差选择初始果蝇个体,并且构建寻优目标精度高的适应度函数进性寻优

2.仿真效果预览
matlab2022a仿真结果如下:

a79132e6f726ec123fc7c2140f2ded03_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
7915c0c445e2a48c3ab40d6a317988e8_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png
050a0392ee35d9d43282954f4a825e31_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

3.MATLAB核心程序

    %每类中心的距离      
     Dist=zeros(n,k);      
     for p1=1:n               
         for p2=1:k 
             for p3=1:m 
                 Dist(p1,p2) = Dist(p1,p2) + abs(x(p3,p1)-Matrix(p3,p2)); 
             end 
         end 
     end 
    %下面计算每个向量到每类中心距离的最小值 
    s = zeros(1,n); 
    for p1=1:n 
        pp      = find(Dist(p1,:)==min(Dist(p1,:))); 
        s(1,p1) = pp(1,1);           
    end 
    %以下计算每一类的向量 
    Class=[]; 
    for p1=1:k 
        Class=[]; 
        %以下根据将各类分别标出 
        for p2=1:n 
            if s(p2)==p1 
               Class=[Class x(:,p2)]; 
            end
        end
        %根据将各类分别标出结束 
        %以下重新计算每类的中心 
        if length(Class)==0 
           for g=1:m                 
               Matrix(g,p1)=0; 
           end
        else
           for g=1:m                 
               Matrix(g,p1) = mean(Class(g,:)); 
            end 
        end
        %重新计算每类的中心结束 
        if j1 == Iter
           Cxy{p1} = Class;
        end
     end 
    %计算每一类的向量结束 
    Err2(j1) = mean2(Dist);
end
Err = Err2(end);
X1=100*rand(1,100)+20;
Y1=100*rand(1,100)+20;
X2=100*rand(1,100)+100;
Y2=100*rand(1,100)+100;
 
X_axis = [X1,X2];
Y_axis = [Y1,Y2];
 
Data   = [X_axis;Y_axis];
Cluster= 2;
Iters  = 1;
 
 
figure(1);
plot(X_axis,Y_axis,'r*');
 
%初始化kmeans聚类
[Cxy1,Err1] = kmean(Data,Cluster,Iters);
 
%%
%初始果蝇群体位置
X_ini = 100*rand(1,2);
Y_ini = 100*rand(1,2);
%迭代次数
MIter = 150;
%种群规模
Pops  = 10;
%果蝇寻优开始
%利用嗅觉寻找食物
for i=1:Pops
    %果蝇个体飞行距离
    X(i,:)     = X_ini + 200*rand()-100;
    Y(i,:)     = Y_ini + 200*rand()-100;
    %与原点之距离
    D(i,1)     =(X(i,1)^2+Y(i,1)^2)^0.5;
    D(i,2)     =(X(i,2)^2+Y(i,2)^2)^0.5;
    %味道浓度为距离之倒数,先求出味道浓度判定值
    S(i,1)     = 1/D(i,1);
    S(i,2)     = 1/D(i,2);
    %利用味道浓度判定函数求出味道浓度
    [Cxy,Err]= kmean_opt(Data,Cluster,Iters,[S(i,1);S(i,2)]);    
    Smell(i) = Err;
end
 
 
 
%寻找初始极值
[bestSmell,bestindex]=min(Smell);
%利用视觉寻找伙伴聚集味道浓度最高之处
X_ini     = X(bestindex);
Y_ini     = Y(bestindex);
Smellbest = bestSmell;
 
%果蝇迭代
for g=1:MIter
    g
    for i=1:Pops
        %由上一代最佳位置处增加果蝇个体飞行距离
        X(i,:) = X_ini + 200*rand() - 100;
        Y(i,:) = Y_ini + 200*rand() - 100;
 
        %与原点距离
        %与原点之距离
        D(i,1)     =(X(i,1)^2+Y(i,1)^2)^0.5;
        D(i,2)     =(X(i,2)^2+Y(i,2)^2)^0.5;
 
        %味道浓度为距离之倒数,先求出味道浓度判定值
        S(i,1)     = 1/D(i,1);
        S(i,2)     = 1/D(i,2);
        [Cxy,Err]= kmean_opt(Data,Cluster,Iters,[S(i,1);S(i,2)]);    
        Smell(i) = Err;
    end
end
相关文章
|
2天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
103 80
|
2天前
|
监控 算法 数据安全/隐私保护
基于扩频解扩+turbo译码的64QAM图传通信系统matlab误码率仿真,扩频参数可设置
该通信系统基于MATLAB 2022a仿真,适用于高要求的图像传输场景(如无人机、视频监控等),采用64QAM调制解调、扩频技术和Turbo译码提高抗干扰能力。发射端包括图像源、64QAM调制器、扩频器等;接收端则有解扩器、64QAM解调器和Turbo译码器等。核心程序实现图像传输的编码、调制、信道传输及解码,确保图像质量和传输可靠性。
26 16
|
1天前
|
编解码 算法 数据安全/隐私保护
基于BP译码的LDPC误码率matlab仿真,分析不同码长,码率,迭代次数以及信道类型对译码性能的影响
本内容介绍基于MATLAB 2022a的低密度奇偶校验码(LDPC)仿真,展示了完整的无水印仿真结果。LDPC是一种逼近香农限的信道编码技术,广泛应用于现代通信系统。BP译码算法通过Tanner图上的消息传递实现高效译码。仿真程序涵盖了不同Eb/N0下的误码率计算,并分析了码长、码率、迭代次数和信道类型对译码性能的影响。核心代码实现了LDPC编码、BPSK调制、高斯信道传输及BP译码过程,最终绘制误码率曲线并保存数据。 字符数:239
20 5
|
23小时前
|
算法
基于EO平衡优化器算法的目标函数最优值求解matlab仿真
本程序基于进化优化(EO)中的平衡优化器算法,在MATLAB2022A上实现九个测试函数的最优值求解及优化收敛曲线仿真。平衡优化器通过模拟生态系统平衡机制,动态调整搜索参数,确保种群多样性与收敛性的平衡,高效搜索全局或近全局最优解。程序核心为平衡优化算法,结合粒子群优化思想,引入动态调整策略,促进快速探索与有效利用解空间。
|
4月前
|
安全
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
本文介绍了2023年高教社杯数学建模竞赛D题的圈养湖羊空间利用率问题,包括问题分析、数学模型建立和MATLAB代码实现,旨在优化养殖场的生产计划和空间利用效率。
226 6
【2023高教社杯】D题 圈养湖羊的空间利用率 问题分析、数学模型及MATLAB代码
|
4月前
|
存储 算法 搜索推荐
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
本文提供了2022年华为杯数学建模竞赛B题的详细方案和MATLAB代码实现,包括方形件组批优化问题和排样优化问题,以及相关数学模型的建立和求解方法。
142 3
【2022年华为杯数学建模】B题 方形件组批优化问题 方案及MATLAB代码实现
|
4月前
|
数据采集 存储 移动开发
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
本文介绍了2023年五一杯数学建模竞赛B题的解题方法,详细阐述了如何通过数学建模和MATLAB编程来分析快递需求、预测运输数量、优化运输成本,并估计固定和非固定需求,提供了完整的建模方案和代码实现。
111 0
【2023五一杯数学建模】 B题 快递需求分析问题 建模方案及MATLAB实现代码
|
7月前
|
数据安全/隐私保护
耐震时程曲线,matlab代码,自定义反应谱与地震波,优化源代码,地震波耐震时程曲线
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
基于混合整数规划的微网储能电池容量规划(matlab代码)
基于混合整数规划的微网储能电池容量规划(matlab代码)
|
7月前
|
算法 调度
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)
含多微网租赁共享储能的配电网博弈优化调度(含matlab代码)

热门文章

最新文章