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

📄 nrlnet.cpp

📁 BP神经网络C语言程序包
💻 CPP
字号:
//Header:	NrlNet.hpp
//Language:	Borland C++ 3.1
//Version:	1.0
//Environ:	Any
//Author:	LiuKang
//Date:		3/1996
//Purpose:	Provide a base class for neural network

#include "nrlnet.hpp"
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <time.h>
#include <process.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>

//default ErrHandler
void DefaultErr(NtErrType et)
{
//  int tmp;
/*  while(tmp = (et>>1) & 0x1)
    cout<<ErrMsg[tmp];*/
  if(et != 0)
    exit(-1);
}
//error handle fuction
void NrlNet::ErrSet(NtErrType et)
{
  ErrStatus = ErrStatus | et;
  if(ErrHandler!=NULL)
    ErrHandler(et);
}
//initiator
void NrlNet::Init(int n)
{
  NodeNum = n;
  if(!(Node=new NrlNode[NodeNum]))
    ErrSet(NT_MEM);
  if(!(Weight=new Matrix(NodeNum,NodeNum)))
    ErrSet(NT_MEM);
  if(!(Conect=new Matrix(NodeNum,NodeNum)))
    ErrSet(NT_MEM);
}
//constructor
NrlNet::NrlNet()
{
  ErrHandler=NULL;
  ErrStatus=NT_NOERR;
  Node=NULL;
  NodeNum=0;
  Weight=NULL;
  Conect=NULL;
  NtName[0]='\0';
  LdType=INITIAL;
  DataWitch = 0;
  DataPrec = 10;
  strcpy(NetType,"Base NetWork");
}
NrlNet::NrlNet(int n, char *nn)
{
  ErrHandler=NULL;
  ErrStatus=NT_NOERR;
  DataWitch = 0;
  DataPrec = 10;
  strcpy(NetType,"Base NetWork");
  Init(n);
  SetNtName(nn);
}
//destructor
NrlNet::~NrlNet()
{
  if(Node!=NULL)
    delete Node;
  if(Weight!=NULL)
    delete Weight;
  if(Conect!=NULL)
    delete Conect;
}
//other methods
void NrlNet::SetNdFun(double (*f)(double))
{
  for(int i=0; i<NodeNum; i++)
    Node[i].SetFun(f);
}
void NrlNet::SetNtName(char *nn)
{
  if(!strcmp(nn,"") || nn==NULL)
    return;
  strcpy(NtName,nn);
}
void NrlNet::WtFlLoad()
{
  char flname[20];
  strcpy(flname,NtName);
  strcat(flname,".WT");
  ifstream infile(flname);
  if(!infile)
  {
    ErrSet(NT_FILEERR);
    return;
  }
  infile>>*Weight;
  if(!infile)
  {
    ErrSet(NT_INITERR);
    WtInitial();
  }
}
void NrlNet::WtFlWrite()
{
  char flname[20];
  strcpy(flname,NtName);
  strcat(flname,".WT");
  ofstream outfile(flname);
  if(!outfile)
  {
    ErrSet(NT_FILEERR);
    return;
  }
  if(DataWitch!=0) Weight->SetW(DataWitch);
  if(DataPrec!=0) Weight->SetP(DataPrec);
  outfile<<*Weight;
  if(!outfile)
    ErrSet(NT_FILEERR);
}
void NrlNet::WtInitial()
{
   srand((unsigned)time(NULL));
   for(int i=1; i<=NodeNum; i++)
     for(int j=1; j<=NodeNum; j++)
     {
       (*Weight)(i,j) = rand()/(double)RAND_MAX;
     }
}
void NrlNet::ThdInitial()
{
  srand((unsigned)time(NULL));
  for(int i=0; i<NodeNum; i++)
    Node[i].SetThred(rand()/(2.*RAND_MAX)-.25);
}
void NrlNet::ThdFlLoad()
{
  char flname[20];
  strcpy(flname,NtName);
  strcat(flname,".THD");
  ifstream infile(flname);
  if(!infile)
  {
    ErrSet(NT_FILEERR);
    return;
  }
  double tmp;
  for(int i=0; i<NodeNum; i++)
  {
    infile>>tmp;
    if(!infile)
      ErrSet(NT_INITERR);
    else
      Node[i].SetThred(tmp);
  }
}
void NrlNet::ThdFlWrite()
{
  char flname[20];
  strcpy(flname,NtName);
  strcat(flname,".THD");
  ofstream outfile(flname);
  if(!outfile)
  {
    ErrSet(NT_FILEERR);
    return;
  }
  for(int i=0; i<NodeNum; i++)
  {
	if(DataWitch!=0) outfile<<setw(DataWitch);
	if(DataPrec!=0) outfile<<setprecision(DataPrec);
    outfile<<Node[i].GetThred()<<"\n";
    if(!outfile)
      ErrSet(NT_FILEERR);
  }
}

⌨️ 快捷键说明

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