⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classcover516.m

📁 基于类覆盖算法和粒子群优化的神经网络解决模式分类问题
💻 M
📖 第 1 页 / 共 2 页
字号:
function f=classcover()
%读味觉信号数据

[fid1,message]=fopen('2wdata.dat','r');
[A,count]=fscanf(fid1,'%f %f %i',[3,inf]);
fclose(fid1);
[fid2,message]=fopen('statistic.dat','w');
NumofClass1=100;
NumofOtherClass=1000;
NumofTotalClass=1100;
%转换数据的矩阵次序
TempA=A;
for sequence=1:1:11
    A=[];
    A=TempA;
    switch sequence
        case 1
            A=TempA;
        case 2
            for i=1:1:NumofClass1
                A(1,i)=TempA(1,i+100);
                A(2,i)=TempA(2,i+100);
                A(3,i)=TempA(3,i+100);
                A(1,i+100)=TempA(1,i);
                A(2,i+100)=TempA(2,i);
                A(3,i+100)=TempA(3,i);
            end
        case 3
            for i=1:1:NumofClass1
                A(1,i)=TempA(1,i+200);
                A(2,i)=TempA(2,i+200);
                A(3,i)=TempA(3,i+200);
                A(1,i+200)=TempA(1,i);
                A(2,i+200)=TempA(2,i);
                A(3,i+200)=TempA(3,i);
            end
        case 4
            for i=1:1:NumofClass1
                A(1,i)=TempA(1,i+300);
                A(2,i)=TempA(2,i+300);
                A(3,i)=TempA(3,i+300);
                A(1,i+300)=TempA(1,i);
                A(2,i+300)=TempA(2,i);
                A(3,i+300)=TempA(3,i);
            end
        case 5
            for i=1:1:NumofClass1
                A(1,i)=TempA(1,i+400);
                A(2,i)=TempA(2,i+400);
                A(3,i)=TempA(3,i+400);
                A(1,i+400)=TempA(1,i);
                A(2,i+400)=TempA(2,i);
                A(3,i+400)=TempA(3,i);
            end
        case 6
            for i=1:1:NumofClass1
                A(1,i)=TempA(1,i+500);
                A(2,i)=TempA(2,i+500);
                A(3,i)=TempA(3,i+500);
                A(1,i+500)=TempA(1,i);
                A(2,i+500)=TempA(2,i);
                A(3,i+500)=TempA(3,i);
            end
        case 7
            for i=1:1:NumofClass1
                A(1,i)=TempA(1,i+600);
                A(2,i)=TempA(2,i+600);
                A(3,i)=TempA(3,i+600);
                A(1,i+600)=TempA(1,i);
                A(2,i+600)=TempA(2,i);
                A(3,i+600)=TempA(3,i);
            end
        case 8
            for i=1:1:NumofClass1
                A(1,i)=TempA(1,i+700);
                A(2,i)=TempA(2,i+700);
                A(3,i)=TempA(3,i+700);
                A(1,i+700)=TempA(1,i);
                A(2,i+700)=TempA(2,i);
                A(3,i+700)=TempA(3,i);
            end
        case 9
            for i=1:1:NumofClass1
                A(1,i)=TempA(1,i+800);
                A(2,i)=TempA(2,i+800);
                A(3,i)=TempA(3,i+800);
                A(1,i+800)=TempA(1,i);
                A(2,i+800)=TempA(2,i);
                A(3,i+800)=TempA(3,i);
            end
        case 10
            for i=1:1:NumofClass1
                A(1,i)=TempA(1,i+900);
                A(2,i)=TempA(2,i+900);
                A(3,i)=TempA(3,i+900);
                A(1,i+900)=TempA(1,i);
                A(2,i+900)=TempA(2,i);
                A(3,i+900)=TempA(3,i);
            end
        case 11
            for i=1:1:NumofClass1
                A(1,i)=TempA(1,i+1000);
                A(2,i)=TempA(2,i+1000);
                A(3,i)=TempA(3,i+1000);
                A(1,i+1000)=TempA(1,i);
                A(2,i+1000)=TempA(2,i);
                A(3,i+1000)=TempA(3,i);
            end
    end

            
            
            
            
%建立各数据点的半径信息
    MaxRadius=0;% rep. maxradius
    for i=1:1:NumofClass1
        radius=2;
        ax=A(1,i);
        ay=A(2,i);
        aclass=A(3,i);
        for j=(NumofClass1+1):1:NumofTotalClass
            bx=A(1,j);
            by=A(2,j);
            bclass=A(3,j);
            tempradius=sqrt((ax-bx)^2+(ay-by)^2);
            if tempradius<radius
                radius=tempradius;
            end
        end
        A(4,i)=radius;
        if MaxRadius<radius
            MaxRadius=radius;
        end
    end

%用改进的贪心算法找最大覆盖点
    RateA=0.03;
    RateB=0.4;
    A(5,1)=0;%num of covered points w.r.t a point
    A(6,1)=0;%uncovered points
    coverend=1;
    while coverend>=1
        for i=1:1:NumofClass1
            x=0;
            if A(6,i)==0
                for j=1:1:NumofClass1
                    if A(6,j)==0
                        tempradius=sqrt((A(1,i)-A(1,j))^2+(A(2,i)-A(2,j))^2);
                        if A(4,i)>RateB*MaxRadius
                            A(4,i)=RateB*MaxRadius;
                        end
                        if tempradius<=A(4,i)
                            x=x+1;
                        end
                    end
                end
            A(5,i)=x;    
            end
        end
%找中心点
        var=0;
        position=0;
        for i=1:1:NumofClass1
            if (A(6,i)==0)&(A(5,i)>=RateA*NumofClass1)
                if (var==0)
                    var=1;
                    position=i;
                    y=A(5,i);
                elseif A(5,i)>y
                    position=i;
                    y=A(5,i);
                end
            end
        end
%去除已被覆盖的点
        if position>0
            for i=1:1:NumofClass1
                tempredius=sqrt((A(1,i)-A(1,position))^2+(A(2,i)-A(2,position))^2);
                if tempredius<=A(4,position)
                    A(6,i)=1;   %1 rep. be covered
                end
            end
        end
%画图显示,B(2,x)---radius;(A(1,x),A(2,x))---centra

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -