感知器算法——区分篮球体操运动员

#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;

int x[15][3],y[4][2];
float w[3],w1[3];
float m,d;
int i,j,k,a,b;
void chushihua()
{
    for(i=0; i<15; i++)
        //for(j=0;j<3;j++)
        x[i][2]=1;
    for(i=0; i<3; i++)
        w1[i]=1;

    x[0][0]=180;
    x[0][1]=80;
    x[1][0]=-158;
    x[1][1]=-46;
    x[1][2]=-1;
    x[2][0]=184;
    x[2][1]=78;
    x[3][0]=-156;
    x[3][1]=-45;
    x[3][2]=-1;
    x[4][0]=178;
    x[4][1]=75;
    x[5][0]=182;
    x[5][1]=74;
    x[6][0]=190;
    x[6][1]=81;
    x[7][0]=-158;
    x[7][1]=-46;
    x[7][2]=-1;
    x[8][0]=-155;
    x[8][1]=-42;
    x[8][2]=-1;
    x[9][0]=-159;
    x[9][1]=-44;
    x[9][2]=-1;
    x[10][0]=179;
    x[10][1]=63;
    x[11][0]=-156;
    x[11][1]=-47;
    x[11][2]=-1;
    x[12][0]=-157;
    x[12][1]=-48;
    x[12][2]=-1;
    x[13][0]=179;
    x[13][1]=70;
    x[14][0]=-154;
    x[14][1]=-50;
    x[13][2]=-1;

    y[0][0]=150;
    y[0][1]=40;
    y[1][0]=180;
    y[1][1]=76;
    y[2][0]=153;
    y[2][1]=45;
    y[3][0]=185;
    y[3][1]=75;
}
int test()
{
    int b=0;
    for(i=0; i<15; i++)
    {
        d=0;
        for(j=0; j<3; j++)
        {
            m=x[i][j]*w1[j];
            d=d+m;
        }
        if(d>0) b++;

    }
    if(b==15) return 1;
    else return 0;
}

void ganzhiqi()
{
    int flag=0;
    while(flag==0)
    {
        for(i=0; i<15; i++)
        {
            d=0;
            for(j=0; j<3; j++)
            {
                m=x[i][j]*w1[j];   //temp=x[i][j]*w[j];
                d=d+m;
            }
            if(d>0)
            {
                for(k=0; k<3; k++)
                    w1[k]=w[k];
            }
            else
            {
                for(k=0; k<3; k++)
                {
                    w1[k]=w[k]+x[i][k];
                    w[k]=w1[k];
                }
            }//else
        }//for
        flag=test();
    }
}
int main()
{
    chushihua();
    ganzhiqi();
    printf("已知的模式向量:\n");
    printf("篮球运动员:\n");
    for (i=0; i<15; i++)
    {
        if(x[i][0]>0)
            printf("x[%d]: %d %d\n",i,x[i][0],x[i][1]);
    }
    printf("体操运动员:\n");
    for (i=0; i<15; i++)
    {
        if(x[i][0]<0)
            printf("x[%d]: %d %d\n",i,-x[i][0],-x[i][1]);
    }
    printf("待分类的模式向量:\n");
    for (i=0; i<4; i++)
    {
        printf("y[%d]: %d %d\n",i,y[i][0],y[i][1]);

    }
    for(i=0; i<4; i++)
    {
        d=0;
        for(j=0; j<3; j++)
        {
            m=y[i][j]*w1[j];
            d=d+m;
        }
        if(d>0) printf("%d号运动员属于篮球运动员\n",i);
        else printf("%d号运动员属于体操运动员\n",i);
    }
    return 0;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值