forked from LinjianMa/pairwise-perturbation
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathals_CP.h
161 lines (149 loc) · 3.99 KB
/
als_CP.h
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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#ifndef __ALS_CP_H__
#define __ALS_CP_H__
#include <ctf.hpp>
#include <fstream>
using namespace CTF;
/**
* \brief ALS method for CP decomposition
* W: output solutions
* V: input tensor
* grad_W: gradient in each dimension
* F: correction terms, F[]=0 initially
* tol: tolerance for a relative stopping condition
* timelimit, maxiter: limit of time and iterations
*/
bool alsCP(Tensor<> & V,
Matrix<> * W,
Matrix<> * grad_W,
Matrix<> * F,
double tol,
double timelimit,
int maxiter,
World & dw);
void mttkrp_map_DT(map<string,Tensor<>>& mttkrp_map,
map<string,string>& parent,
map<string,string>& sibling,
Tensor<>& V,
Matrix<> * W,
string args,
World& dw) ;
/**
* \brief ALS method for CP decomposition with decision tree
* W: output solutions
* V: input tensor
* grad_W: gradient in each dimension
* F: correction terms, F[]=0 initially
* tol: tolerance for a relative stopping condition
* timelimit, maxiter: limit of time and iterations
* V.order should be >=4
*/
bool alsCP_DT(Tensor<> & V,
Matrix<> * W,
Matrix<> * grad_W,
Matrix<> * F,
double tol,
double timelimit,
int maxiter,
double lambda,
ofstream & Plot_File,
int resprint,
bool bench,
World & dw) ;
// [cd] --> [ab*]
void stringbuilder_mttkrp(char* seq,
char* seq_return,
int N,
World & dw);
void Build_mttkrp_map(map<string, Tensor<>> & mttkrp_map,
Tensor<> & V,
Matrix<> * W,
char* seq,
World & dw);
void build_V(Tensor<> & V,
Matrix<> * W,
int order,
World & dw);
/**
* \brief ALS method for CP decomposition
* W: output solutions
* V: input tensor
* grad_W: gradient in each dimension
* F: correction terms, F[]=0 initially
* tol: tolerance for a relative stopping condition
* timelimit, maxiter: limit of time and iterations
*/
// bool alsCP_mod(Tensor<> & V,
// Matrix<> * W,
// Matrix<> * grad_W,
// Matrix<> * F,
// double tol,
// double timelimit,
// int maxiter,
// World & dw) ;
/**
* \brief ALS method for CP decomposition with dimension tree PP subroutine
* W: output matrices
* V: input tensor
* tol: tolerance for a relative stopping condition
* timelimit, maxiter: limit of time and iterations
*/
double alsCP_DT_sub(Tensor<> & V,
Matrix<> * W,
Matrix<> * grad_W,
Matrix<> * dW,
Matrix<> * F,
double tol,
double tol_init,
double timelimit,
int maxiter,
double & st_time,
ofstream & Plot_File,
double & projnorm,
int & iter,
int resprint,
World & dw);
/**
* \brief ALS method for CP decomposition
* W: output matrices
* V: input tensor
* tol: tolerance for a relative stopping condition
* timelimit, maxiter: limit of time and iterations
*/
double alsCP_PP_sub(Tensor<> & V,
Matrix<> * W,
Matrix<> * grad_W,
Matrix<> * dW,
Matrix<> * F,
double tol,
double tol_init,
double timelimit,
int maxiter,
double & st_time,
ofstream & Plot_File,
double & projnorm,
int & iter,
int resprint,
bool bench,
World & dw);
/**
* \brief ALS method for CP decomposition
* W: output matrices
* V: input tensor
* tol: tolerance for a relative stopping condition
* timelimit, maxiter: limit of time and iterations
*/
bool alsCP_PP(Tensor<> & V,
Matrix<> * W,
Matrix<> * grad_W,
Matrix<> * F,
double tol,
double tol_init,
double timelimit,
int maxiter,
double lambda,
double ratio_step,
ofstream & Plot_File,
int resprint,
bool bench,
World & dw) ;
#endif