@@ -5,124 +5,124 @@ using namespace std;
5
5
6
6
CTimeAdaptiveHist::CTimeAdaptiveHist (int idd)
7
7
{
8
- id = idd;
9
- firstTime = -1 ;
10
- lastTime = -1 ;
11
- measurements = 0 ;
12
- maxPeriod = 0 ;
13
- numElements = 0 ;
14
- type = TT_ADAPTIVE;
8
+ id = idd;
9
+ firstTime = -1 ;
10
+ lastTime = -1 ;
11
+ measurements = 0 ;
12
+ maxPeriod = 0 ;
13
+ numElements = 0 ;
14
+ type = TT_ADAPTIVE;
15
15
}
16
16
17
17
void CTimeAdaptiveHist::init (int imaxPeriod,int elements,int numActivities)
18
18
{
19
- maxPeriod = imaxPeriod;
20
- numElements = BINS_PER_DAY;
21
- def_sample_threshold=elements;
22
- predictHistogram = (float *) malloc (sizeof (float )*numElements);
23
- storedHistogram = (float *) malloc (sizeof (float )*numElements);
24
- measurementHistogram = (uint32_t *) malloc (sizeof (uint32_t )*numElements);
25
- for (int i=0 ;i<numElements;i++)
26
- {
27
- measurementHistogram[i]=0 ;
28
- predictHistogram[i] = storedHistogram[i] = 0.5 ;
29
- }
19
+ maxPeriod = imaxPeriod;
20
+ numElements = BINS_PER_DAY;
21
+ def_sample_threshold=elements;
22
+ predictHistogram = (float *) malloc (sizeof (float )*numElements);
23
+ storedHistogram = (float *) malloc (sizeof (float )*numElements);
24
+ measurementHistogram = (uint32_t *) malloc (sizeof (uint32_t )*numElements);
25
+ for (int i=0 ;i<numElements;i++)
26
+ {
27
+ measurementHistogram[i]=0 ;
28
+ predictHistogram[i] = storedHistogram[i] = 0.5 ;
29
+ }
30
30
}
31
31
32
32
CTimeAdaptiveHist::~CTimeAdaptiveHist ()
33
33
{
34
- free (predictHistogram);
35
- free (storedHistogram);
34
+ free (predictHistogram);
35
+ free (storedHistogram);
36
36
}
37
37
38
38
// adds new state observations at given times
39
39
int CTimeAdaptiveHist::add (uint32_t time,float state)
40
40
{
41
- if (measurements == 0 ) firstTime = time ;
42
- lastTime = time ;
41
+ if (measurements == 0 ) firstTime = time ;
42
+ lastTime = time ;
43
43
44
- storedHistogram[((time %maxPeriod)*numElements/maxPeriod)%numElements] += state;
45
- measurementHistogram[((time %maxPeriod)*numElements/maxPeriod)%numElements]++;
46
- measurements++;
44
+ storedHistogram[((time %maxPeriod)*numElements/maxPeriod)%numElements] += state;
45
+ measurementHistogram[((time %maxPeriod)*numElements/maxPeriod)%numElements]++;
46
+ measurements++;
47
47
48
- return 0 ;
48
+ return 0 ;
49
49
}
50
50
51
51
/* not required in incremental version*/
52
52
void CTimeAdaptiveHist::update (int modelOrder,unsigned int * times,float * signal,int length)
53
53
{
54
- for (int i=0 ;i<numElements;i++) predictHistogram[i] = storedHistogram[i];
54
+ for (int i=0 ;i<numElements;i++) predictHistogram[i] = storedHistogram[i];
55
55
}
56
56
57
57
/* text representation of the fremen model*/
58
58
void CTimeAdaptiveHist::print (bool verbose)
59
59
{
60
- std::cout << " Model " << id << " Size: " << measurements << " " ;
61
- if (verbose){
62
- printf (" Bin values: " );
63
- for (int i = 0 ;i<numElements;i++) printf (" %.3f " ,storedHistogram[i]);
64
- }
65
- printf (" \n " );
60
+ std::cout << " Model " << id << " Size: " << measurements << " " ;
61
+ if (verbose){
62
+ printf (" Bin values: " );
63
+ for (int i = 0 ;i<numElements;i++) printf (" %.3f " ,storedHistogram[i]);
64
+ }
65
+ printf (" \n " );
66
66
}
67
67
68
68
float CTimeAdaptiveHist::estimate (uint32_t time)
69
69
{
70
- float estimate = storedHistogram[((time %maxPeriod)*numElements/maxPeriod)%numElements];
71
- float saturation = 0.001 ;
72
- if (estimate > 1.0 -saturation) estimate = 1.0 -saturation;
73
- if (estimate < 0.0 +saturation) estimate = 0.0 +saturation;
74
- return estimate;
70
+ float estimate = storedHistogram[((time %maxPeriod)*numElements/maxPeriod)%numElements];
71
+ float saturation = 0.001 ;
72
+ if (estimate > 1.0 -saturation) estimate = 1.0 -saturation;
73
+ if (estimate < 0.0 +saturation) estimate = 0.0 +saturation;
74
+ return estimate;
75
75
}
76
76
77
77
float CTimeAdaptiveHist::predict (uint32_t time,uint32_t sample_thres)
78
78
{
79
- int center=((time %maxPeriod)*numElements/maxPeriod)%numElements;
80
- uint32_t sum=measurementHistogram[center];
81
- float estimate = predictHistogram[center]*(float )measurementHistogram[center];
82
- int i=0 ;
83
- while (sum<sample_thres)
84
- {
85
- i++;
86
- sum+=measurementHistogram[(center+i)%numElements];
87
- sum+=measurementHistogram[(center-i)%numElements];
88
- estimate+=predictHistogram[(center+i)%numElements]*(float )measurementHistogram[(center+i)%numElements];
89
- estimate+=predictHistogram[(center-i)%numElements]*(float )measurementHistogram[(center-i)%numElements];
90
- }
91
- estimate=estimate/(float )sum;
92
- float saturation = 0.001 ;
93
- if (estimate > 1.0 -saturation) estimate = 1.0 -saturation;
94
- if (estimate < 0.0 +saturation) estimate = 0.0 +saturation;
95
- return estimate;
79
+ int center=((time %maxPeriod)*numElements/maxPeriod)%numElements;
80
+ uint32_t sum=measurementHistogram[center];
81
+ float estimate = predictHistogram[center]*(float )measurementHistogram[center];
82
+ int i=0 ;
83
+ while (sum<sample_thres)
84
+ {
85
+ i++;
86
+ sum+=measurementHistogram[(center+i)%numElements];
87
+ sum+=measurementHistogram[(center-i)%numElements];
88
+ estimate+=predictHistogram[(center+i)%numElements]*(float )measurementHistogram[(center+i)%numElements];
89
+ estimate+=predictHistogram[(center-i)%numElements]*(float )measurementHistogram[(center-i)%numElements];
90
+ }
91
+ estimate=estimate/(float )sum;
92
+ float saturation = 0.001 ;
93
+ if (estimate > 1.0 -saturation) estimate = 1.0 -saturation;
94
+ if (estimate < 0.0 +saturation) estimate = 0.0 +saturation;
95
+ return estimate;
96
96
}
97
97
float CTimeAdaptiveHist::predict (uint32_t time)
98
98
{
99
- return CTimeAdaptiveHist::predict (time ,(uint32_t )def_sample_threshold);
99
+ return CTimeAdaptiveHist::predict (time ,(uint32_t )def_sample_threshold);
100
100
}
101
101
int CTimeAdaptiveHist::save (const char * name,bool lossy)
102
102
{
103
- FILE* file = fopen (name," w" );
104
- save (file);
105
- fclose (file);
106
- return 0 ;
103
+ FILE* file = fopen (name," w" );
104
+ save (file);
105
+ fclose (file);
106
+ return 0 ;
107
107
}
108
108
109
109
int CTimeAdaptiveHist::load (const char * name)
110
110
{
111
- FILE* file = fopen (name," r" );
112
- load (file);
113
- fclose (file);
114
- return 0 ;
111
+ FILE* file = fopen (name," r" );
112
+ load (file);
113
+ fclose (file);
114
+ return 0 ;
115
115
}
116
116
117
117
118
118
int CTimeAdaptiveHist::save (FILE* file,bool lossy)
119
119
{
120
- return -1 ;
120
+ return -1 ;
121
121
}
122
122
123
123
int CTimeAdaptiveHist::load (FILE* file)
124
124
{
125
- return -1 ;
125
+ return -1 ;
126
126
}
127
127
128
128
int CTimeAdaptiveHist::exportToArray (double * array,int maxLen)
@@ -147,12 +147,12 @@ int CTimeAdaptiveHist::importFromArray(double* array,int len)
147
147
type = (ETemporalType)array[pos++];
148
148
numElements = array[pos++];
149
149
if (type != TT_ADAPTIVE) fprintf (stderr," Error loading the model, type mismatch.\n " );
150
- id = array[pos++];
150
+ id = array[pos++];
151
151
def_sample_threshold = array[pos++];
152
- measurements = array[pos++];
153
-
154
- for (int i = 0 ;i<numElements && pos < MAX_TEMPORAL_MODEL_SIZE;i++)storedHistogram[i]=array[pos++];
155
- for (int i = 0 ;i<numElements && pos < MAX_TEMPORAL_MODEL_SIZE;i++)measurementHistogram[i]=array[pos++];
152
+ measurements = array[pos++];
153
+
154
+ for (int i = 0 ;i<numElements && pos < MAX_TEMPORAL_MODEL_SIZE;i++)storedHistogram[i]=array[pos++];
155
+ for (int i = 0 ;i<numElements && pos < MAX_TEMPORAL_MODEL_SIZE;i++)measurementHistogram[i]=array[pos++];
156
156
157
157
if (pos == MAX_TEMPORAL_MODEL_SIZE) fprintf (stdout," Model was not properly saved before.\n " );
158
158
return pos;
0 commit comments