一个简单的BP网络C语言程序

#include "stdafx.h"
#include 
"math.h"
#include 
"stdio.h"
#include 
"time.h"
//#include <conio.h>
#include "stdlib.h"
#include 
"iostream.h"

#define ALINE 6
#define BLINE 6
#define CLINE 6

int main(int argc, char* argv[])
{
        
double y[CLINE],yd[CLINE],w0[ALINE][BLINE],w1[BLINE][BLINE];
    
double w2[BLINE][CLINE],x0[ALINE],x1[BLINE],x2[BLINE];
    
double dw0[ALINE][BLINE],dw1[ALINE][ALINE],dw2[BLINE][CLINE];
    
double nt0[BLINE],nt1[BLINE],nt2[BLINE];
    
double dt2[BLINE],dtf2[BLINE];
    
double dt6[BLINE],dtf6[BLINE];
    
double dtf[CLINE],rf;
    
int i,j,k,ii,jj,kk;

    x0[
0]=0.067583;
    x0[
1]=10.884163;
    x0[
2]=6.46034;
    x0[
3]=0.79934;
    x0[
4]=0.0;
    x0[
5]=0.384163;
    x0[
6]=0.6034;
    x0[
7]=0.34;
    x0[
8]=0.0;
    x0[
9]=0.384163;
    x0[
10]=0.6034;

    yd[
0]=0.43;
    yd[
1]=0.2;
    yd[
2]=0.3;
    yd[
3]=0.4;
    yd[
4]=0.5;
    yd[
5]=0.6;
    yd[
6]=0.7;
    yd[
7]=0.8;
    yd[
8]=0.9;
    yd[
9]=0.25;
    yd[
10]=0.35;

    srand( (unsigned)time( NULL ) ); 
//    srand(time(0));

    
for(i=0;i<ALINE;i++)
    
{
        
for(j=0;j<BLINE;j++)
        
{
            w0[i][j]
=rand()/(231200.0);
            cout
<<w0[i][j]<<" ";
        }

    }


    
for(i=0;i<BLINE;i++)
    
{
        
for(j=0;j<BLINE;j++)
        
{
            w1[i][j]
=rand()/(231200.0);
        }

    }

    
for(i=0;i<BLINE;i++)
    
{
        
for(j=0;j<CLINE;j++)
        
{
            w2[i][j]
=rand()/(231200.0);
        }

    }

    cout
<<endl;

    
for(jj=0;jj<10000;jj++)
    
{
        rf
=1.088;
        
if(jj>=15)
        
{
            rf
=0.88;
        }

        
if(jj>=20)
        
{
            rf
=0.1;
        }
    



        
for(i=0;i<BLINE;i++)
        
{
            nt0[i]
=0;
            
for(k=0;k<ALINE;k++)
                nt0[i]
+=x0[k]*w0[k][i];
            
//cout<<nt0[i]<<endl;
            x1[i]=1.0/(1.0+exp(-nt0[i]));
            
//cout<<"x1[i]="<<x1[i]<<"  ";
            
//printf("%10.5f",x1[i]);
            printf("\n");
        }


        
for(i=0;i<BLINE;i++)
            
{
            nt1[i]
=0;
            
for(k=0;k<BLINE;k++)
                nt1[i]
+=x1[k]*w1[k][i];
            x2[i]
=1.0/(1.0+exp(-nt1[i]));
            
//cout<<x2[i]<<endl;
            
//printf("%10.5f",x2[i]);
        
//    printf("\n");
            }

    
//printf("%6d",jj);

        
for(i=0;i<CLINE;i++)
            
{
            nt2[i]
=0;
            
for(k=0;k<BLINE;k++)
                nt2[i]
+=x2[k]*w2[k][i];
            y[i]
=1.0/(1.0+exp(-nt2[i]));
            printf(
"%10.5f",y[i]);
            }

        printf(
"%6d",jj);
        printf(
"\n");
        
for(i=0;i<CLINE;i++)
        
{
            dtf[i]
=y[i]*(1.0-y[i])*(yd[i]-y[i]);
        }

        
for(i=0;i<BLINE;i++)
        
{
            
for(j=0;j<CLINE;j++)
            
{
                dw2[i][j]
=rf*dtf[j]*x2[i];
            }

        }

            
for(i=0;i<BLINE;i++)
        
{
            
for(j=0;j<CLINE;j++)
            
{
                w2[i][j]
=w2[i][j]+dw2[i][j];
                printf(
"%10.5f",w2[i][j]);

            }

            printf(
"\n");

        }

        printf(
"\n");
        
for(i=0;i<BLINE;i++)
        
{
            dt2[i]
=0;
            
for(k=0;k<CLINE;k++)
            dt2[i]
+=dtf[k]*w2[i][k];
            
for(i=0;i<BLINE;i++)
            
{
                dtf2[i]
=x2[i]*(1.0-x2[i])*dt2[i];
            }


            
for(i=0;i<BLINE;i++)
            
{
                
for(j=0;j<BLINE;j++)
                
{
                    dw1[i][j]
=rf*x1[i]*dtf2[j];
                }

            }

            
for(i=0;i<BLINE;i++)
            
{
                
for(j=0;j<BLINE;j++)
                
{
                    w1[i][j]
=w1[i][j]+dw1[i][j];
                }

            }



            
for(i=0;i<BLINE;i++)
            
{
                dt6[i]
=0;
                
for (k=0;k<BLINE;k++)
                    dt6[i]
+=dtf2[k]*w1[i][k];
            }


            
for(i=0;i<BLINE;i++)
            
{
                dtf6[i]
=x1[i]*(1.0-x1[i])*dt6[i];
            }


            
for(i=0;i<ALINE;i++)
            
{
                
for(j=0;j<BLINE;j++)
                
{
                    dw0[i][j]
=rf*x0[i]*dtf6[j];
                }

            }


                
for(i=0;i<ALINE;i++)
            
{
                
for(j=0;j<BLINE;j++)
                
{
                    w0[i][j]
=w0[i][j]+dw0[i][j];
                }

            }

                cout
<<endl;
        }
/*
    cout<<"*"<<endl;
*/

        }

    printf(
"Hello World!\n");
//    cout<<"+";
    return 0;
}


原文地址:https://www.cnblogs.com/karlchen/p/569949.html