随机分布式延迟PSO(RODDPSO)+K-Means算法(Python代码实现)

欢迎来到本博客❤️❤️❤️

博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

1 概述

2 运行结果

3 参考文献

4 Python代码实现

1 概述

随机分布式延迟PSO(RODDPSO)+K-Means算法(Python代码实现)_第1张图片

   本文复现论文算法RODDPSO+K-Means,用优化的粒子群算法对K-Means算法求初始的簇心,以达到优化聚类算法的目的。

   分布式时滞表现出独特的空间性质,可模拟在特定时间段内通过一定数量的并行通道/路径分布的信号传播延迟。到目前为止,具有分布式时间延迟的复杂系统(例如神经网络[33],[44])的动力学行为已经得到了很好的研究。直观地说,一个自然的想法是在PSO算法中引入一定的分布式时滞,希望增强从局部最优逃逸的能力,摆脱过早收敛的问题。与[34],[36]和[48]中的离散时间延迟相比,分布式时间延迟具有以下两个优点:1)更好地利用更长(更多累积)的种群进化历史,导致更好的准确性和2)更复杂的动力学行为导致捕获局部最优的可能性更小。此外,为了在收敛性和多样性之间做出适当的权衡,引入的分布式时滞可以以合理的小概率随机发生。因此,本文的主要目的是启动一项关于新型随机发生的分布式延迟PSO(RODDPSO)算法及其在医疗保健信息学中的应用的重大研究。

受上述讨论的启发,本文的目的是提出一种基于RODDPSO的聚类算法,并应用于分析A&E数据。本文的主要贡献可归纳为以下三个方面。

  1. 引入了一种新的RODDPSO算法,其中随机出现的分布式时滞项不仅有助于:a)对整个搜索空间的彻底探索;b)捕获局部最优的可能性显着降低;c)在本地和全球搜索能力之间取得适当的平衡。

  2. 该文提出一种将RODDPSO算法与传统算法相结合的新型聚类算法K -表示聚类算法。所提出的基于RODDPSO的聚类算法不依赖于聚类质心的初始状态,从而有助于实现更好的聚类分区。

2 运行结果

随机分布式延迟PSO(RODDPSO)+K-Means算法(Python代码实现)_第2张图片

随机分布式延迟PSO(RODDPSO)+K-Means算法(Python代码实现)_第3张图片

​部分代码:

# 迭代寻优
t = 0
record_RODDPSO = np.zeros(maxgen)
while t < maxgen:
    
    #惯性权重更新
    w=W_MAX-((W_MAX-W_MIN)*t/maxgen)
    
    #加速度系数更新
    c1=((c1f-c1i)*(maxgen-t)/maxgen)+c1i
    c2=((c2f-c2i)*(maxgen-t)/maxgen)+c2i
    c3=c1
    c4=c2
    
    #计算每个粒子的平均距离
    d=dist(pop)
    
    #更新Ef
    Ef=(d[i]-np.min(d))/(np.max(d)-np.min(d))
    
    #根据Ef寻找进化状态
    if 0<=Ef<0.25:
        epsilonk=1
    if 0.25<=Ef<0.5:
        epsilonk=2
    if 0.5<=Ef<0.75:
        epsilonk=3
    if 0.75<=Ef<=1:
        epsilonk=4
    
    ml,mg=evo_state[epsilonk]
    
    # 速度更新
    
    mcr3=0
    mcr4=0
    for tao in range(N):
        if t>=tao:
            mcr3+=alpha[tao]*(gbest_history[t-tao]-pop)
            mcr4+=alpha[tao]*(zbest_history[t-tao]-pop)
        else:
            mcr3+=alpha[tao]*(gbest_history[t]-pop)
            mcr4+=alpha[tao]*(zbest_history[t]-pop)
        
    v = w * v + c1 * np.random.random() * (gbest - pop) + c2 * np.random.random() * (zbest - pop)\
        +ml*c3* np.random.random()*mcr3+mg*c4*np.random.random()*mcr4
    v[v > Vmax] = Vmax     # 限制速度
    v[v < Vmin] = Vmin
    
    # 位置更新
    pop = pop + v;
    pop[pop > popmax] = popmax/2  # 限制位置
    pop[pop < popmin] = popmin/2
    
    '''
    # 自适应变异
    p = np.random.random()             # 随机生成一个0~1内的数
    if p > 0.8:                          # 如果这个数落在变异概率区间内,则进行变异处理
        k = np.random.randint(0,2)     # 在[0,2)之间随机选一个整数
        pop[:,k] = np.random.random()  # 在选定的位置进行变异 
    '''

    # 计算适应度值
    fitness = k_means(dataset,sizepop,pop)

3 参考文献

W. Liu, Z. Wang, X. Liu, N. Zeng and D. Bell, "A Novel Particle Swarm Optimization Approach for Patient Clustering From Emergency Departments," in IEEE Transactions on Evolutionary Computation, vol. 23, no. 4, pp. 632-644, Aug. 2019, doi: 10.1109/TEVC.2018.2878536.

4 Python代码实现

你可能感兴趣的:(#,多目标智能算法与应用,#,神经网络预测预测与分类,#,kmeans,算法,机器学习)