@@ -111,7 +111,7 @@ void exp_binop(double *z, const double *x)
111111
112112void F_op (double * z , const EdgeTX * x )
113113{
114- * z = log (x -> sum );
114+ * z = (x -> sum / 1000 )/( x -> count );
115115}
116116void divide (double * z , const double * x , const double * y )
117117{
@@ -124,20 +124,20 @@ GrB_Type tx_edge;
124124GrB_Info init_edges (GrB_Matrix * tx_mat , GrB_Matrix * owns_mat )
125125{
126126 GrB_Info info ;
127- EdgeTX edge56 = {2223412 .0 , 56 };
128- EdgeTX edge59 = {6223412 .0 , 59 };
129- EdgeTX edge67 = {8913212 .0 , 67 };
130- EdgeTX edge69 = {92223412 .0 , 69 };
131- EdgeTX edge65 = {133214 .1 , 65 };
132- EdgeTX edge95 = {1267325 .99 , 95 };
133- EdgeTX edge611 = {1999999 .1 , 611 };
134- EdgeTX edge116 = {6999999 .1 , 116 };
135- EdgeTX edge511 = {9999999 .1 , 511 };
136- EdgeTX edge115 = {8999999 .1 , 115 };
137- EdgeTX edge127 = {8999999 .1 , 127 };
138- EdgeTX edge712 = {8999999 .1 , 712 };
139- EdgeTX edge912 = {899999999 .1 , 912 };
140- EdgeTX edge129 = {99999999 .1 , 129 };
127+ EdgeTX edge56 = {23412 .0 , 6 };
128+ EdgeTX edge59 = {62412 .0 , 9 };
129+ EdgeTX edge67 = {81312 .0 , 7 };
130+ EdgeTX edge69 = {92223 .0 , 9 };
131+ EdgeTX edge65 = {13214 .1 , 5 };
132+ EdgeTX edge95 = {16325 .99 , 9 };
133+ EdgeTX edge611 = {19999 .1 , 6 };
134+ EdgeTX edge116 = {69999 .1 , 16 };
135+ EdgeTX edge511 = {99999 .1 , 5 };
136+ EdgeTX edge115 = {79999 .1 , 15 };
137+ EdgeTX edge127 = {59999 .1 , 12 };
138+ EdgeTX edge712 = {8999 .1 , 7 };
139+ EdgeTX edge912 = {49999 .1 , 12 };
140+ EdgeTX edge129 = {999999 .1 , 9 };
141141
142142 TRY (GrB_Matrix_setElement_UDT (* tx_mat , & edge56 , 4 , 5 ));
143143 TRY (GrB_Matrix_setElement_UDT (* tx_mat , & edge59 , 4 , 8 ));
@@ -207,7 +207,80 @@ GrB_Info init_vertices(GrB_Vector *users, GrB_Vector *cards)
207207 return GrB_SUCCESS ;
208208}
209209
210- GrB_Info banking_page_rank (GrB_Matrix tx_edge_mat , GrB_Matrix owns_edge_mat , GrB_Vector users , GrB_Vector cards ){
210+ int LAGr_PageRank_NoTeleport (
211+ GrB_Vector * centrality ,
212+ int * iters ,
213+ const LAGraph_Graph G ,
214+ float tol ,
215+ int itermax )
216+ {
217+ GrB_Vector r = NULL , t = NULL ;
218+ GrB_Matrix AT = NULL ;
219+
220+ // ------------------------------------------------------------------------
221+ // select adjacency matrix (use transpose if directed)
222+ // ------------------------------------------------------------------------
223+ if (G -> kind == LAGraph_ADJACENCY_UNDIRECTED ||
224+ G -> is_symmetric_structure == LAGraph_TRUE )
225+ {
226+ AT = G -> A ;
227+ }
228+ else
229+ {
230+ AT = G -> AT ;
231+ }
232+
233+ // ------------------------------------------------------------------------
234+ // initialization
235+ // ------------------------------------------------------------------------
236+ GrB_Index n ;
237+ GrB_Matrix_nrows (& n , AT );
238+
239+ GrB_Vector_new (& t , GrB_FP64 , n );
240+ GrB_Vector_new (& r , GrB_FP64 , n );
241+
242+ double init = 1.0 / (double )n ;
243+ GrB_assign (r , NULL , NULL , init , GrB_ALL , n , NULL );
244+
245+ double rdiff = 1.0 ;
246+
247+ // ------------------------------------------------------------------------
248+ // iterations
249+ // ------------------------------------------------------------------------
250+ for ((* iters ) = 0 ; rdiff > tol && (* iters ) < itermax ; (* iters )++ )
251+ {
252+ // swap
253+ GrB_Vector temp = t ;
254+ t = r ;
255+ r = temp ;
256+
257+ // r = A' * t
258+ GrB_mxv (r , NULL , NULL , GxB_PLUS_TIMES_FP64 , AT , t , NULL );
259+
260+ // normalize r so that sum(r) = 1
261+ double sum_r = 0.0 ;
262+ GrB_reduce (& sum_r , NULL , GrB_PLUS_MONOID_FP64 , r , NULL );
263+ if (sum_r > 0.0 )
264+ {
265+ GrB_apply (r , NULL , NULL , GrB_DIV_FP64 , r , sum_r , NULL );
266+ }
267+
268+ // compute difference
269+ GrB_assign (t , NULL , GrB_MINUS_FP64 , r , GrB_ALL , n , NULL );
270+ GrB_apply (t , NULL , NULL , GrB_ABS_FP64 , t , NULL );
271+ GrB_reduce (& rdiff , NULL , GrB_PLUS_MONOID_FP64 , t , NULL );
272+ }
273+
274+ // ------------------------------------------------------------------------
275+ // finalize
276+ // ------------------------------------------------------------------------
277+ * centrality = r ;
278+ GrB_free (& t );
279+ return GrB_SUCCESS ;
280+ }
281+
282+ GrB_Info banking_page_rank (GrB_Matrix tx_edge_mat , GrB_Matrix owns_edge_mat , GrB_Vector users , GrB_Vector cards )
283+ {
211284 // ------------------------------------------------------------------------
212285 // build user filters
213286 // ------------------------------------------------------------------------
@@ -337,7 +410,7 @@ GrB_Info banking_page_rank(GrB_Matrix tx_edge_mat, GrB_Matrix owns_edge_mat, GrB
337410
338411 GrB_Vector id_final ;
339412 TRY (GrB_Vector_new (& id_final , GrB_FP64 , VERTICES_NUMBER ));
340- TRY (GrB_Vector_assign_BOOL (id_final , NULL , NULL , 1.0 , GrB_ALL , VERTICES_NUMBER , NULL ));
413+ TRY (GrB_Vector_assign_BOOL (id_final , NULL , NULL , true , GrB_ALL , VERTICES_NUMBER , NULL ));
341414 GrB_Matrix v_mat , id_mat ;
342415 TRY (GrB_Matrix_new (& v_mat , GrB_FP64 , VERTICES_NUMBER , 1 ));
343416 TRY (GrB_Col_assign (v_mat , NULL , NULL , EXPSUMvec , GrB_ALL , VERTICES_NUMBER , 0 , NULL ));
@@ -374,7 +447,7 @@ GrB_Info banking_page_rank(GrB_Matrix tx_edge_mat, GrB_Matrix owns_edge_mat, GrB
374447
375448 TRY (LAGraph_Cached_OutDegree (G , msg ));
376449
377- TRY (LAGr_PageRank (& pagerank_ans , & iteraions , G , 0.85 , 1e-4 , 100 , msg ));
450+ TRY (LAGr_PageRank_NoTeleport (& pagerank_ans , & iteraions , G , 1e-4 , 100 ));
378451 GxB_print (pagerank_ans , GxB_COMPLETE );
379452}
380453
@@ -416,6 +489,5 @@ int main()
416489 // run solver
417490 // ------------------------------------------------------------------------
418491
419- TRY (banking_page_rank (tx_edge_mat ,owns_edge_mat ,users ,cards ));
420-
492+ TRY (banking_page_rank (tx_edge_mat , owns_edge_mat , users , cards ));
421493}
0 commit comments