#include #include #ifndef node_ #define node_ class node { public: node(char *aname=0); virtual ~node() { delete [] name;} public: node &getknext(int k); node &get_next(){return *pnext;} node *addnext(node *an); bool isLast(){return pnext==0;} double set_h(double aval); const double get_h() {return h;} double adderr(double derr){d+=dfa()*derr; err_ready=true; return d;} virtual double eval() {eval_ready=true; return h;} virtual double fa(){return h;} virtual double dfa(){return 1.0;} virtual void reset() {eval_ready=false;} virtual void reset_err() {err_ready=false;} double operator=(double val) { eval_ready=true; return h=val; } double operator=(node &val) { eval_ready=true; return h=val.get_h(); } int getCount(int st=0){ if(!pnext) return st+1; return pnext->getCount(st+1); } protected: node *pnext; double h; double d; bool eval_ready; bool err_ready; int ncount; char *name; }; class neuron : public node{ public: neuron(char *aname=0); ~neuron(); node &operator[](int k); node &connect(node *an); virtual void initw(); virtual double fa(); virtual double dfa(); double eval(); virtual void bpg(); virtual void dw(double n); void dumpw(); void reset(); void reset_err(); private: const node &get_finput() {return *pinput;} protected: node *pinput; double *pw; double w0; }; #endif