File: predictor.h

package info (click to toggle)
nws 2.11-3
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 2,700 kB
  • ctags: 2,820
  • sloc: ansic: 28,849; sh: 3,289; java: 1,205; makefile: 697; perl: 12
file content (141 lines) | stat: -rw-r--r-- 3,132 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/* $Id: predictor.h,v 1.1 2004/09/23 02:02:06 graziano Exp $ */

#ifndef PREDICTOR_H
#define PREDICTOR_H 

#include <sys/types.h>  /* time_t */

#ifdef  __cplusplus
extern "C" {
#endif

/* linux defines this in /usr/include/values.h as 1.79769313486231570e+308 */
#ifndef MAXDOUBLE
#define MAXDOUBLE (999999999999.0)
#endif
/* #define HISTORYSIZE 200*/
/* reduce memory footprint */
#define HISTORYSIZE 100
#define MAX_MED_N HISTORYSIZE
#define MIN_DATA_HISTORY 10

#define PREDS 14
#define STATIC_PREDS (PREDS - 6)
#define SECOND_ORDER_PREDS (PREDS - 2)
#define MSE_PRED (STATIC_PREDS)
#define MAE_PRED (STATIC_PREDS+1)
#define WIN_MSE_PRED (STATIC_PREDS+2)
#define WIN_MAE_PRED (STATIC_PREDS+3)
#define TOT_MSE_PRED (SECOND_ORDER_PREDS)
#define TOT_MAE_PRED (SECOND_ORDER_PREDS+1)

#define DYNPRED TOT_MSE_PRED

#define LIFETIMES 120

#define MED_N 21
#define MED_ALPHA (0.1)

#define ERR_WIN 10

#define STATES 2
#define DIM 2
#define HMAX 10.0
#define HMIN 0.0

/*
 * for adaptive window predictors
 */
#define WIN_MIN 5
#define WIN_MAX 50
#define WIN_INIT 25

/*
 * for AR predictor
 */
#define AR_N 50
#define AR_P 20

struct pred_el
{
	float pred;
	double error;
	double sq_error;
	int medwin;
	int meanwin;
};

struct value_el
{
	time_t time;
	float value;
	struct pred_el preds[PREDS];
};

struct thruput_pred
{
	int head;
	int tail;
	struct value_el data[HISTORYSIZE];

	double mean;
	double run_mean;
	double total;

	double mses[PREDS];
	double mpes[PREDS];
	double counts[PREDS];
	int pred_nums[PREDS-STATIC_PREDS];
};

#define MODPLUS(a,b,m) (((a) + (b)) % (m))
#define MODMINUS(a,b,m) (((a) - (b) + (m)) % (m))

#define PRED(n,v) ((v).preds[(n)].pred)
#define ERR(n,v) ((v).preds[(n)].error)
#define SQERR(n,v) ((v).preds[(n)].sq_error)
#define MedWIN(n,v) ((v).preds[(n)].medwin)
#define MeanWIN(n,v) ((v).preds[(n)].meanwin)

#define TPPREDNUM(tp,n) ((tp)->pred_nums[(n)-STATIC_PREDS])
#define TPMSE(tp,n) ((tp)->mses[(n)])
#define TPMAE(tp,n) ((tp)->mpes[(n)])
#define TPCOUNT(tp,n) ((tp)->counts[(n)])

#define CURRVAL(tp) ((tp).data[MODMINUS((tp).head,1,HISTORYSIZE)].value)
#define CURRTIME(tp) ((tp).data[MODMINUS((tp).head,1,HISTORYSIZE)].time)
#define CURRPRED(tp) \
	PRED(TOT_MSE_PRED,(tp).data[MODMINUS((tp).head,1,HISTORYSIZE)])
#define CURRMSEPRED(tp) \
	PRED(TOT_MSE_PRED,(tp).data[MODMINUS((tp).head,1,HISTORYSIZE)])
#define CURRMAEPRED(tp) \
	PRED(TOT_MAE_PRED,(tp).data[MODMINUS((tp).head,1,HISTORYSIZE)])
#define CURRMSE(tp) \
        (TPCOUNT(&(tp),TOT_MSE_PRED) != 0.0 ?\
	(TPMSE(&(tp),TOT_MSE_PRED)/TPCOUNT(&(tp),TOT_MSE_PRED)) : 0.0)
#define CURRMAE(tp) \
        (TPCOUNT(&(tp),TOT_MAE_PRED) != 0.0 ?\
	(TPMAE(&(tp),TOT_MAE_PRED)/TPCOUNT(&(tp),TOT_MAE_PRED)) : 0.0)
#define CURRMSEPREDNUM(tp) TPPREDNUM(&(tp),TOT_MSE_PRED)
#define CURRMAEPREDNUM(tp) TPPREDNUM(&(tp),TOT_MAE_PRED)


void
InitThruputPrediction(struct thruput_pred *tp);


void
UpdateThruputPrediction(struct thruput_pred *tp,
                        float value,
                        time_t update_time);

#define GAIN (0.05)
#define LN_GAIN (0.9)

#define EL(a,i,j,n) ((a)[(i)*(n)+(j)])

#ifdef  __cplusplus
}
#endif

#endif