00001 #ifndef BiasAdaptiveHomeostMECHANISM_H_
00002 #define BiasAdaptiveHomeostMECHANISM_H_
00003
00004 #include "EvSimObject.h"
00005 #include "EvSimObjectTypeUtils.h"
00006
00007 class BiasAdaptiveHomeostMechanism : public EvSimObject {
00008
00009 EV_SIM_OBJECT( BiasAdaptiveHomeostMechanism )
00010
00011 public:
00012 BiasAdaptiveHomeostMechanism(float eta = 1e-5,
00013 float eta_rt = 1e-5,
00014 float Vthresh = -5,
00015 float mu = 0.9,
00016 float biasMax = 15,
00017 float biasMin = -15,
00018 bool isActive = true)
00019 {
00020 this->eta = eta;
00021 this->eta_rt = eta_rt;
00022 this->Vthresh = Vthresh;
00023 this->mu = mu;
00024 this->biasMax = biasMax;
00025 this->biasMin = biasMin;
00026 this->isActive = isActive;
00027 }
00028
00029 float eta;
00030
00031 float eta_rt;
00032
00033 float mu;
00034
00035 float biasMax;
00036
00037 float biasMin;
00038
00039 float Vthresh;
00040
00041 bool isActive;
00042
00043 void setActive(bool active, Time time);
00044
00045 void updateRtarget(Time time);
00046
00047 virtual ~BiasAdaptiveHomeostMechanism();
00048
00049 virtual void postMountAsMountedObj(EvSimNetwork &net, EvSimObject::ID self, EvSimObject::ID mountpoint);
00050
00051 virtual void updateState(SimContext &sim_context, Time time, update_id_t upd_id);
00052
00053 virtual void reset(SimContext &sim_ctxt);
00054
00055 virtual void eventHit(SimContext & sim_ctxt, Time time, port_id_t port);
00056
00057
00058 protected:
00059 float *bias_ptr;
00060 double *vm_ptr;
00061 float rTarget;
00062 double prev_vm;
00063 double last_bias_upd_time;
00064 double last_rtgt_upd_time;
00065 };
00066
00067 #endif