00001 00025 #ifndef __INITIALIZER_H__ 00026 #define __INITIALIZER_H__ 00027 00028 #include <magic/mobject.h> 00029 #include "annetwork.h" 00030 00033 class NeuronInitializer : public Object { 00034 public: 00035 NeuronInitializer () {} 00036 NeuronInitializer (const NeuronInitializer& orig) {} 00037 00041 virtual void initialize (Neuron& neuron)=0; 00042 00046 virtual NeuronInitializer* clone () const {MUST_OVERLOAD; return NULL;} 00047 00048 private: 00049 void operator= (const NeuronInitializer& orig) {FORBIDDEN} 00050 decl_dynamic (NeuronInitializer); 00051 }; 00052 00055 class GaussianInitializer : public NeuronInitializer { 00056 public: 00057 00062 GaussianInitializer (double r=0.5) : mR (r) {} 00063 GaussianInitializer (const GaussianInitializer& orig) : mR (orig.mR) {} 00064 00068 void initialize (Neuron& neuron) { 00069 neuron.init (mR); 00070 } 00071 00073 virtual GaussianInitializer* clone () const {return new GaussianInitializer (*this);} 00074 00075 private: 00076 double mR; 00077 00078 void operator= (const GaussianInitializer& orig) {FORBIDDEN} 00079 decl_dynamic (GaussianInitializer); 00080 }; 00081 00084 class DummyInitializer : public NeuronInitializer { 00085 public: 00086 DummyInitializer () {} 00087 DummyInitializer (const DummyInitializer& orig) {} 00088 00091 void initialize (Neuron& neuron) {} 00092 00094 virtual DummyInitializer* clone () const {return new DummyInitializer (*this);} 00095 private: 00096 00097 void operator= (const DummyInitializer& orig) {FORBIDDEN} 00098 decl_dynamic (DummyInitializer); 00099 }; 00100 00101 #endif 00102