📄 nrlnet.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 + -