parameters::parameters(datafile dat, model nv_mod, model ref_mod,parameters ref_param,int compo,int iter){ const MatrixXi & omega=nv_mod.Get_model(),ref_omega=ref_mod.Get_model(),mat=dat.Get_mat_datafile(); const int g=omega.rows(),unique=mat.rows(); m_proba=ref_param.m_proba; m_proba_block.resize(g); m_param.resize(g); for (int k=0;k<g;k++){ if (k!=compo){ m_param[k].resize(omega.rowwise().maxCoeff()(k)+1); m_param[k]=ref_param.m_param[k]; m_proba_block[k].resize(unique,omega.rowwise().maxCoeff()(k)+1); m_proba_block[k]=ref_param.m_proba_block[k]; for (int b=0;b<(omega.rowwise().maxCoeff()(k)+1) ;b++){ if ((omega.row(k).array()==b).any()){ m_param[k][b]=ref_param.m_param[k][b]; } } }else{ m_param[k].resize(omega.rowwise().maxCoeff()(k)+1); m_proba_block[k].resize(unique,omega.rowwise().maxCoeff()(k)+1); for (int b=0;b<(omega.rowwise().maxCoeff()(k)+1) ;b++){ if ((omega.row(k).array()==b).any()){ if ((((omega.row(k).array()==b)==(ref_omega.row(k).array()==b)).prod())==1){ m_param[k][b]=ref_param.m_param[k][b]; }else{ m_param[k][b]=param_block(k,b,dat,nv_mod,m_proba.col(k).array()/m_proba.rowwise().sum().array(),1); if ((omega.row(k).array()==b).count()>1){ int prem=0; while(omega(k,prem)!=b){prem++;} if (mat.col(prem).maxCoeff()>5){ m_param[k][b]=m_param[k][b].Optimise_gamma(k,b,dat,nv_mod,5,m_proba.col(k).array()/m_proba.rowwise().sum().array(),dat.Get_eff_datafile()); } } } } } } } m_propor=uniforme(g); Probapost( nv_mod , mat ); Compte_nbparam(dat,nv_mod); Likelihood(dat.Get_eff_datafile()); Estimation(1,0,iter,dat,nv_mod); }
parameters::parameters(datafile dat, model mod){ // TODO Auto-generated constructor stub const MatrixXi & omega=mod.Get_model(),mat=dat.Get_mat_datafile(); const int g=omega.rows(),unique=mat.rows(); m_proba=MatrixXd::Ones(unique,g); m_proba_block.resize(g); m_param.resize(g); for (int k=0;k<g;k++){ m_param[k].resize(omega.rowwise().maxCoeff()(k)+1); m_proba_block[k].resize(unique,omega.rowwise().maxCoeff()(k)+1); for (int b=0;b<(omega.rowwise().maxCoeff()(k)+1) ;b++){ if ((omega.row(k).array()==b).any()){ m_param[k][b]=param_block(k,b,dat,mod,VectorXd::Ones(mat.rows()),1); } } } m_propor=uniforme(g); Probapost( mod , mat ); Compte_nbparam(dat,mod); Likelihood(dat.Get_eff_datafile()); Estimation(1,0,6,dat,mod); }
int main (int argc, char *argv[]) { int i,j,k,count; struct vertex* G; // graph represented by adjacency list int n = 8; // number of vertices in G double vm = 4; // numero medio de vizinhos int no_viz, *vizs, flag; struct neighbor *aux, *viz; // Inicializacao if (argc > 1) { n = atoi(argv[1]); vm = atoi(argv[2]); } srand((unsigned)time(NULL)); vizs = (int *) malloc (sizeof (int) * n); G = (struct vertex *) malloc (sizeof (struct vertex) * n); for ( i = 0; i < n; i++ ) { G[i].id = i+1; G[i].adj_list = NULL; } // Geracao aleatoria do grafo G for ( i = 0; i < n; i++ ) { no_viz = geometrica(vm); for ( j = 0; j < no_viz; j++ ) { viz = (struct neighbor *) malloc (sizeof(struct neighbor)); do{ viz->id = uniforme (1,n); // verifica repeticoes flag = 0; for (k=0;k<j;k++) if (vizs[k] == viz->id) flag = 1; } while(flag == 1); vizs[j] = viz->id; viz->weight = geometrica((int)n/vm); aux = G[i].adj_list; viz->next = aux; G[i].adj_list = viz; } } // Imprime o grafo G printf ("%d\n",n); for ( i = 0; i < n; i++ ) { printf ("v%d,", G[i].id); aux = G[i].adj_list; while (aux != NULL) { printf ("v%d", G[aux->id].id); aux = aux->next; if (aux != NULL) printf (","); } aux = G[i].adj_list; if (aux != NULL) printf ("/"); while (aux != NULL) { printf ("%d", aux->weight); aux = aux->next; if (aux != NULL) printf (","); } printf ("\n"); } }