-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathals_CP.h
126 lines (113 loc) · 4.6 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
#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);
/**
* \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);
/**
* \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, double lambda,
double ratio_step, 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
*/
double alsCP_PP_partupdate_sub(Tensor<> &V, Matrix<> *W, Matrix<> *grad_W,
Matrix<> *dW, Matrix<> *F, double tol,
double tol_init, double timelimit, int maxiter,
double update_percentage, double &st_time,
double lambda, double ratio_step,
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);
/**
* \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_partupdate(Tensor<> &V, Matrix<> *W, Matrix<> *grad_W,
Matrix<> *F, double tol, double tol_init,
double timelimit, int maxiter, double lambda,
double ratio_step, double update_percentage,
ofstream &Plot_File, int resprint, bool bench,
World &dw);
vector<int> sort_indexes(const vector<double> &v);
#endif