69.

c++ neural networks and fuzzy logic C++ Neural Networks and Fuzzy Logic
by Valluru B. Rao
M&T Books, IDG Books Worldwide, Inc.
ISBN: 1558515526   Pub Date: 06/01/95
  

Previous Table of Contents Next


Header File

Listing 9.1 fuzzyam.h

 //fuzzyam.h   V. Rao, H. Rao #include <iostream.h> #define MXSIZ 10 class fzneuron { protected:        int nnbr;        int inn,outn;        float output;        float activation;        float outwt[MXSIZ];        char *name;        friend class network; public:        fzneuron() { };        void getnrn(int,int,int,char *); }; class exemplar { protected:        int xdim,ydim;        float v1[MXSIZ],v2[MXSIZ];   // this is different from BAM        friend class network; public:        exemplar() { };        void getexmplr(int,int,float *,float *);        void prexmplr(); }; class asscpair { protected:        int xdim,ydim,idn;        float v1[MXSIZ],v2[MXSIZ];        friend class network; public:        asscpair() { };        void getasscpair(int,int,int);        void prasscpair(); }; class potlpair { protected:        int xdim,ydim;        float v1[MXSIZ],v2[MXSIZ];        friend class network; public:        potlpair() { };        void getpotlpair(int,int);        void prpotlpair(); }; class network { public:        int  anmbr,bnmbr,flag,nexmplr,nasspr,ninpt;        fzneuron (anrn)[MXSIZ],(bnrn)[MXSIZ];        exemplar (e)[MXSIZ];        asscpair (as)[MXSIZ];        potlpair (pp)[MXSIZ];        float outs1[MXSIZ],outs2[MXSIZ];   // change from BAM to floats        double mtrx1[MXSIZ][MXSIZ],mtrx2[MXSIZ][MXSIZ]; // change from BAM to doubles        network() { };        void getnwk(int,int,int,float [][6],float [][4]);        void compr1(int,int);        void compr2(int,int);        void prwts();        void iterate();        void findassc(float *);        void asgninpt(float *);        void asgnvect(int,float *,float *);        void comput1();        void comput2();        void prstatus(); }; 

Source File

Listing 9.2 fuzzyam.cpp

 //fuzzyam.cpp   V. Rao, H. Rao #include "fuzzyam.h" float max(float x,float y)   //new for FAM { float u; u = ((x>y) ? x : y ); return u; } float min(float x,float y)      // new for FAM { float u; u =( (x>y) ? y : x) ; return u; } void fzneuron::getnrn(int m1,int m2,int m3,char *y) { int i; name = y; nnbr = m1; outn = m2; inn  = m3; for(i=0;i<outn;++i){        outwt[i] = 0 ;        } output = 0; activation = 0; } void exemplar::getexmplr(int k,int l,float *b1,float *b2)    // changed from BAM { int i2; xdim = k; ydim = l; for(i2=0;i2<xdim;++i2){        v1[i2] = b1[i2]; } for(i2=0;i2<ydim;++i2){        v2[i2] = b2[i2]; } } void exemplar::prexmplr() { int i; cout<<"\nX vector you gave is:\n"; for(i=0;i<xdim;++i){        cout<<v1[i]<<"  ";} cout<<"\nY vector you gave is:\n"; for(i=0;i<ydim;++i){        cout<<v2[i]<<"  ";} cout<<"\n"; } void asscpair::getasscpair(int i,int j,int k) { idn = i; xdim = j; ydim = k; } void asscpair::prasscpair() { int i; cout<<"\nX vector in the associated pair no. "<<idn<<"is:\n"; for(i=0;i<xdim;++i){        cout<<v1[i]<<"  ";} cout<<"\nY vector in the associated pair no. "<<idn<<"is:\n"; for(i=0;i<ydim;++i){        cout<<v2[i]<<"  ";} cout<<"\n"; } void potlpair::getpotlpair(int k,int j) { xdim = k; ydim = j; } void potlpair::prpotlpair() { int i; cout<<"\nX vector in possible associated pair is:\n"; for(i=0;i<xdim;++i){        cout<<v1[i]<<"  ";} cout<<"\nY vector in possible associated pair is:\n"; for(i=0;i<ydim;++i){        cout<<v2[i]<<"  ";} cout<<"\n"; } void network::getnwk(int k,int l,int k1,float b1[][6],float        b2[][4]) { anmbr = k; bnmbr = l; nexmplr = k1; nasspr = 0; ninpt = 0; int i,j,i2; float tmp1,tmp2; flag =0; char *y1="ANEURON", *y2="BNEURON" ; for(i=0;i<nexmplr;++i){        e[i].getexmplr(anmbr,bnmbr,b1[i],b2[i]);        e[i].prexmplr();        cout<<"\n";        } for(i=0;i<anmbr;++i){        anrn[i].fzneuron::getnrn(i,bnmbr,0,y1);} for(i=0;i<bnmbr;++i){        bnrn[i].fzneuron::getnrn(i,0,anmbr,y2);} for(i=0;i<anmbr;++i){        for(j=0;j<bnmbr;++j){               tmp1 = 0.0;               for(i2=0;i2<nexmplr;++i2){                       tmp2 = min(e[i2].v1[i],e[i2].v2[j]);                       tmp1 = max(tmp1,tmp2);               }               mtrx1[i][j] = tmp1;               mtrx2[j][i] = mtrx1[i][j];               anrn[i].outwt[j] = mtrx1[i][j];               bnrn[j].outwt[i] = mtrx2[j][i];               }        } prwts(); cout<<"\n"; } void network::asgninpt(float *b) { int i,j; cout<<"\n"; for(i=0;i<anmbr;++i){        anrn[i].output = b[i];        outs1[i] = b[i];        } } void network::compr1(int j,int k) { int i; for(i=0;i<anmbr;++i){        if(pp[j].v1[i] != pp[k].v1[i]) flag = 1;        break;        } } void network::compr2(int j,int k) { int i; for(i=0;i<anmbr;++i){        if(pp[j].v2[i] != pp[k].v2[i]) flag = 1;        break;} } void network::comput1()   //changed from BAM { int j; for(j=0;j<bnmbr;++j){        int ii1;        float c1 =0.0,d1;        cout<<"\n";        for(ii1=0;ii1<anmbr;++ii1){               d1 = min(outs1[ii1],mtrx1[ii1][j]);               c1 = max(c1,d1);               }        bnrn[j].activation = c1;        cout<<"\n output layer neuron  "<<j<<" activation is "               <<c1<<"\n";        bnrn[j].output = bnrn[j].activation;        outs2[j] = bnrn[j].output;        cout<<"\n output layer neuron  "<<j<<" output is "               <<bnrn[j].output<<"\n";        } } void network::comput2()             //changed from BAM { int i; for(i=0;i<anmbr;++i){        int ii1;        float c1=0.0,d1;        for(ii1=0;ii1<bnmbr;++ii1){               d1 = min(outs2[ii1],mtrx2[ii1][i]);               c1 = max(c1,d1);}        anrn[i].activation = c1;        cout<<"\ninput layer neuron "<<i<<"activation is "               <<c1<<"\n";        anrn[i].output = anrn[i].activation;        outs1[i] = anrn[i].output;        cout<<"\n input layer neuron  "<<i<<"output is "               <<anrn[i].output<<"\n";        } } void network::asgnvect(int j1,float *b1,float *b2) { int  j2; for(j2=0;j2<j1;++j2){        b2[j2] = b1[j2];} } void network::prwts() { int i3,i4; cout<<"\n  weights--  input layer to output layer: \n\n"; for(i3=0;i3<anmbr;++i3){        for(i4=0;i4<bnmbr;++i4){               cout<<anrn[i3].outwt[i4]<<"  ";}        cout<<"\n"; } cout<<"\n"; cout<<"\nweights--  output layer to input layer: \n\n"; for(i3=0;i3<bnmbr;++i3){        for(i4=0;i4<anmbr;++i4){               cout<<bnrn[i3].outwt[i4]<<"  ";}        cout<<"\n";  } cout<<"\n"; } void network::iterate() { int i1; for(i1=0;i1<nexmplr;++i1){        findassc(e[i1].v1);        } } void network::findassc(float *b) { int j; flag = 0; asgninpt(b);        ninpt ++;        cout<<"\nInput vector is:\n" ;        for(j=0;j<6;++j){               cout<<b[j]<<" ";};        cout<<"\n";        pp[0].getpotlpair(anmbr,bnmbr); asgnvect(anmbr,outs1,pp[0].v1); comput1(); if(flag>=0){        asgnvect(bnmbr,outs2,pp[0].v2);        cout<<"\n";        pp[0].prpotlpair();        cout<<"\n";        comput2(); } for(j=1;j<MXSIZ;++j){        pp[j].getpotlpair(anmbr,bnmbr);        asgnvect(anmbr,outs1,pp[j].v1);        comput1();        asgnvect(bnmbr,outs2,pp[j].v2);        pp[j].prpotlpair();        cout<<"\n";        compr1(j,j-1);        compr2(j,j-1);        if(flag == 0) {               int j2;               nasspr += 1;               j2 = nasspr;               as[j2].getasscpair(j2,anmbr,bnmbr);               asgnvect(anmbr,pp[j].v1,as[j2].v1);               asgnvect(bnmbr,pp[j].v2,as[j2].v2);               cout<<"\nPATTERNS ASSOCIATED:\n";               as[j2].prasscpair();               j = MXSIZ ;               }        else               if(flag == 1)                      {                      flag = 0;                      comput1();                      }               } } void network::prstatus() { int j; cout<<"\nTHE FOLLOWING ASSOCIATED PAIRS WERE FOUND BY FUZZY AM\n\n"; for(j=1;j<=nasspr;++j){        as[j].prasscpair();        cout<<"\n";} } void main() { int ar = 6, br = 4, nex = 1; float inptv[][6]={0.1,0.3,0.2,0.0,0.7,0.5,0.6,0.0,0.3,0.4,0.1,0.2}; float outv[][4]={0.4,0.2,0.1,0.0}; cout<<"\n\nTHIS PROGRAM IS FOR A FUZZY ASSOCIATIVE MEMORY NETWORK. THE NETWORK \n"; cout<<"IS SET UP FOR ILLUSTRATION WITH "<<ar<<" INPUT NEURONS, AND "<<br; cout<<" OUTPUT NEURONS.\n"<<nex<<" exemplars are used to encode \n"; static network famn; famn.getnwk(ar,br,nex,inptv,outv); famn.iterate(); famn.findassc(inptv[1]); famn.prstatus(); } 


Previous Table of Contents Next

Copyright © IDG Books Worldwide, Inc.



C++ Neural Networks and Fuzzy Logic
C++ Neural Networks and Fuzzy Logic
ISBN: 1558515526
EAN: 2147483647
Year: 1995
Pages: 139

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net