From 8b91dc8d044cfaffab2b9df4e1ea11ed8a56f7d3 Mon Sep 17 00:00:00 2001 From: Sancar Adali Date: Tue, 5 Sep 2017 13:18:33 -0400 Subject: [PATCH] make sure specific algo implementations get N from first graph --- src/graphm/algorithm_fsol.cpp | 7 ++-- src/graphm/algorithm_iden.cpp | 3 +- src/graphm/algorithm_lp.cpp | 17 +++++----- src/graphm/algorithm_path.cpp | 1 + src/graphm/algorithm_qcv.cpp | 1 + src/graphm/algorithm_rand.cpp | 3 +- src/graphm/algorithm_rank.cpp | 55 ++++++++++++++++---------------- src/graphm/algorithm_sch.cpp | 13 ++++---- src/graphm/algorithm_umeyama.cpp | 25 ++++++++------- src/graphm/algorithm_unif.cpp | 1 + 10 files changed, 68 insertions(+), 58 deletions(-) diff --git a/src/graphm/algorithm_fsol.cpp b/src/graphm/algorithm_fsol.cpp index 0ce6d66..c941733 100644 --- a/src/graphm/algorithm_fsol.cpp +++ b/src/graphm/algorithm_fsol.cpp @@ -22,18 +22,19 @@ match_result algorithm_fsol::match(graph& g, graph& h,gsl_matrix* gm_P_i, gsl_matrix* gm_ldh,double dalpha_ldh) { if (bverbose) - *gout<<"FSol matching"<0) - { + { for (int i=0;idata[i]); for (int i=0;i<2*N*N;i++) @@ -115,7 +116,7 @@ match_result algorithm_lp::match(graph& g, graph& h,gsl_matrix* gm_P_i, gsl_matr for (int j=0;jdata,N*N); gsl_vector_view gvv_R=gsl_vector_view_array(C->data,N*N); - - + + gsl_vector* gv_deg_g=gsl_vector_alloc(N); gsl_vector* gv_deg_h=gsl_vector_alloc(N); gsl_matrix_sum(gm_Ag_d,1, gv_deg_g); @@ -53,38 +54,38 @@ match_result algorithm_rank::match(graph& g, graph& h,gsl_matrix* gm_P_i, gsl_ma if (gv_deg_g->data[j]>0) gm_Ag_d->data[i*N+j]/=gv_deg_g->data[j]; if (gv_deg_h->data[j]>0) gm_Ah_d->data[i*N+j]/=gv_deg_h->data[j]; }; - if (pdebug.ivalue) gsl_matrix_printout(gm_Ag_d,"gm_Ag_d",pdebug.strvalue); - if (pdebug.ivalue) gsl_matrix_printout(gm_Ah_d,"gm_Ah_d",pdebug.strvalue); + if (pdebug.ivalue) gsl_matrix_printout(gm_Ag_d,"gm_Ag_d",pdebug.strvalue); + if (pdebug.ivalue) gsl_matrix_printout(gm_Ah_d,"gm_Ah_d",pdebug.strvalue); gsl_vector_free(gv_deg_g); gsl_vector_free(gv_deg_h); double ddiff;bool bcontinue=true;double dm_old; - if (dalpha_ldh>0) { + if (dalpha_ldh>0) { gsl_matrix_scale(gm_ldh,dalpha_ldh); gsl_matrix_memcpy(C,gm_ldh); } else gsl_matrix_set_all(C,1.0/N); - - if (pdebug.ivalue) gsl_matrix_printout(C,"C",pdebug.strvalue); + + if (pdebug.ivalue) gsl_matrix_printout(C,"C",pdebug.strvalue); bool biter_algo=true; if (biter_algo) { while (bcontinue) - { + { gsl_matrix_memcpy(C_old,C); gsl_blas_dgemm(CblasNoTrans,CblasNoTrans, 1, gm_Ag_d,C,0,gm_temp); - if (pdebug.ivalue) gsl_matrix_printout(gm_temp,"gm_temp",pdebug.strvalue); + if (pdebug.ivalue) gsl_matrix_printout(gm_temp,"gm_temp",pdebug.strvalue); //gsl_blas_dgemm(CblasNoTrans,CblasTrans, 1-dalpha_ldh, gm_temp,gm_Ah_d,0,C); gsl_matrix_transpose(gm_temp); gsl_blas_dgemm(CblasNoTrans,CblasNoTrans, 1-dalpha_ldh,gm_Ah_d, gm_temp,0,C); gsl_matrix_transpose(C); - if (pdebug.ivalue) gsl_matrix_printout(C,"C",pdebug.strvalue); + if (pdebug.ivalue) gsl_matrix_printout(C,"C",pdebug.strvalue); if (dalpha_ldh>0) gsl_matrix_add(C,gm_ldh); //normalization dm_old=gsl_blas_dnrm2(&gvv_R.vector); gsl_matrix_scale(C,1.0/dm_old); gsl_matrix_sub(C_old,C); - if (pdebug.ivalue) gsl_matrix_printout(C_old,"C_old",pdebug.strvalue); + if (pdebug.ivalue) gsl_matrix_printout(C_old,"C_old",pdebug.strvalue); ddiff=gsl_blas_dnrm2(&gvv_C_old.vector); bcontinue=!(ddiff<1e-2); bcontinue=(bcontinue && (num_it++data,N,N); @@ -118,9 +119,9 @@ match_result algorithm_rank::match(graph& g, graph& h,gsl_matrix* gm_P_i, gsl_ma gsl_matrix_scale(C_old,-1); gsl_matrix_add_constant(C_old,1); - if (pdebug.ivalue) gsl_matrix_printout(&gmv_Lg.matrix,"gmv_Lg.matrix",pdebug.strvalue); - if (pdebug.ivalue) gsl_matrix_printout(&gmv_Lh.matrix,"gmv_Lh.matrix",pdebug.strvalue); - if (pdebug.ivalue) gsl_matrix_printout(C_old,"C_old",pdebug.strvalue); + if (pdebug.ivalue) gsl_matrix_printout(&gmv_Lg.matrix,"gmv_Lg.matrix",pdebug.strvalue); + if (pdebug.ivalue) gsl_matrix_printout(&gmv_Lh.matrix,"gmv_Lh.matrix",pdebug.strvalue); + if (pdebug.ivalue) gsl_matrix_printout(C_old,"C_old",pdebug.strvalue); gsl_matrix_memcpy(C,gm_ldh); gsl_matrix_transpose(C); //multiplcation chain @@ -128,42 +129,42 @@ match_result algorithm_rank::match(graph& g, graph& h,gsl_matrix* gm_P_i, gsl_ma gsl_matrix_transpose(gm_Ag_d); gsl_blas_dgemm(CblasNoTrans,CblasNoTrans, 1, gm_Ag_d,gm_temp,0,C); gsl_matrix_transpose(gm_Ag_d); - + gsl_matrix_div_elements(C,C_old); - + //gsl_matrix_transpose(gm_Ah_d); //gsl_blas_dgemm(CblasNoTrans,CblasNoTrans, 1, C,gm_Ah_d,0,gm_temp); gsl_matrix_transpose(C); gsl_blas_dgemm(CblasNoTrans,CblasNoTrans, 1, gm_Ah_d,C,0,gm_temp); gsl_matrix_transpose(gm_temp); gsl_blas_dgemm(CblasNoTrans,CblasNoTrans, 1, gm_Ag_d,gm_temp,0,C); - + gsl_matrix_free(gm_Ag_d); - gsl_matrix_free(gm_Ah_d); + gsl_matrix_free(gm_Ah_d); gsl_vector_free(eval_g); gsl_vector_free(eval_h); gsl_matrix_free(evec_g); gsl_matrix_free(evec_h); - gsl_matrix_free(C); + gsl_matrix_free(C); }; if (dalpha_ldh>0) gsl_matrix_scale(gm_ldh,1/dalpha_ldh); - if (pdebug.ivalue) gsl_matrix_printout(C,"C=rank matrix",pdebug.strvalue); + if (pdebug.ivalue) gsl_matrix_printout(C,"C=rank matrix",pdebug.strvalue); gsl_matrix_free(gm_Ag_d); gsl_matrix_free(gm_Ah_d); gsl_matrix_free(C_old); gsl_matrix_free(gm_temp); - + //scaling for hungarian double dscale_factor =gsl_matrix_max_abs(C); dscale_factor=(dscale_factor>EPSILON)?dscale_factor:EPSILON; dscale_factor=10000/dscale_factor; gsl_matrix_scale(C,-dscale_factor); gsl_matrix_transpose(C); - if (pdebug.ivalue) gsl_matrix_printout(C,"scale(C)",pdebug.strvalue); + if (pdebug.ivalue) gsl_matrix_printout(C,"scale(C)",pdebug.strvalue); gsl_matrix* gm_P=gsl_matrix_alloc(N,N); gsl_matrix_hungarian(C,gm_P,NULL,NULL,false,(bblast_match_end?gm_ldh:NULL),false); if (pdebug.ivalue) gsl_matrix_printout(gm_P,"gm_P",pdebug.strvalue); - + match_result mres; mres.gm_P=gm_P; gsl_matrix_free(C); diff --git a/src/graphm/algorithm_sch.cpp b/src/graphm/algorithm_sch.cpp index aae7f33..72a3271 100644 --- a/src/graphm/algorithm_sch.cpp +++ b/src/graphm/algorithm_sch.cpp @@ -25,11 +25,12 @@ match_result algorithm_sch::match(graph& g, graph& h,gsl_matrix* gm_P_i,gsl_matr bool bgreedy=(get_param_i("hungarian_greedy")==1); match_result mres=algorithm_qcv::match(g,h,gm_P_i,gm_ldh,dalpha_ldh); if (bverbose) - *gout<<"SCH algorithm"<data[i+N*j]+=pow(gm_Ag_d->data[i+k*N]-gm_Ah_d->data[j+m*N],2); };*/ - + gsl_matrix_free(gm_Ag_d); gsl_matrix_free(gm_Ah_d); - + // gsl_matrix_transpose(C); //gsl_matrix_scale(C,-1); gsl_matrix_printout(C,"C",pdebug.strvalue); diff --git a/src/graphm/algorithm_umeyama.cpp b/src/graphm/algorithm_umeyama.cpp index 9597021..67093c2 100644 --- a/src/graphm/algorithm_umeyama.cpp +++ b/src/graphm/algorithm_umeyama.cpp @@ -22,14 +22,15 @@ match_result algorithm_umeyama::match(graph& g, graph& h,gsl_matrix* gm_P_i,gsl_matrix* gm_ldh,double dalpha_ldh) { if (bverbose) - *gout<<"Umeyama algorithm"<