-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcascade.h
More file actions
74 lines (60 loc) · 1.81 KB
/
cascade.h
File metadata and controls
74 lines (60 loc) · 1.81 KB
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
#ifndef cascade_header
#define cascade_header
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <vector>
#include <float.h>
#include <tuple>
#include "vec.h"
#include "matrix.h"
using namespace std;
class Cascade
{
private:
// hash : cascade ID ---> node id_1, infection time
// ---> node id_2, infection time
// ---> ...
// ---> node id_n, infection time
vector<pair<int, double> > * casc;
// the string ID of this cascade
double dimension;
double OW;
string strID;
double stepsize;
double epsilon;
int negative_sampling_size;
Vec **H, **G, **P, **Q;
// H[i] = \sum_i from 0 to i-1 A[node_i]
// P[i] = \sum_i from i+1 to size-1 B[node_i]
// Note: H[size] = \sum_i for all i A[node_i]
// P[size] = \sum_i for all i B[node_i]
public:
Cascade(string strID_)
: strID(strID_), H(nullptr), G(nullptr), P(nullptr), Q(nullptr)
{
casc = new vector<pair<int, double> >();
};
~Cascade();
// Create a cascade
void addInfection(int node, double time);
// Allocate memory for each seperate cascade
void createBuffer();
// Set parameters for the inference algorithm
void setParams(int dimension_, double OW_, double stepsize_, double epsilon_, int negative_sampling_size_);
string getID() const { return strID; };
int getLength() const { return casc->size(); };
void getInfectionAt(int i, int& node, double& time) const;
double getDuration(double& min_t, double& max_t);
void normalizeTime(double scale);
void alignTime(double start_t);
void update();
// the first sweep to compute H,G,P,Q
void firstsweep();
double logLikelihood();
void print();
void descent(atomic<double> ** matrix, int node, const Vec& vc);
inline void release(Vec ** v);
};
#endif