void MCMCPhase12 (int *tails, int *heads, int *dnedges, int *dn, int *dflag, int *bipartite, int *nterms, char **funnames, char **sonames, char **MHproposaltype, char **MHproposalpackage, double *inputs, double *theta0, int *samplesize, double *gain, double *meanstats, int *phase1, int *nsub, double *sample, int *burnin, int *interval, int *newnetworktails, int *newnetworkheads, int *fVerbose, int *attribs, int *maxout, int *maxin, int *minout, int *minin, int *condAllDegExact, int *attriblength, int *maxedges, int *mtails, int *mheads, int *mdnedges) { int directed_flag; int nphase1, nsubphases; Vertex n_nodes, bip; Edge n_edges, nmax; Network nw[2]; Model *m; MHproposal MH; nphase1 = *phase1; nsubphases = *nsub; n_nodes = (Vertex)*dn; n_edges = (Edge)*dnedges; nmax = (Edge)*maxedges; bip = (Vertex)*bipartite; GetRNGstate(); /* R function enabling uniform RNG */ directed_flag = *dflag; m=ModelInitialize(*funnames, *sonames, &inputs, *nterms); /* Form the missing network */ nw[0]=NetworkInitialize(tails, heads, n_edges, n_nodes, directed_flag, bip, 0, 0, NULL); MH_init(&MH, *MHproposaltype, *MHproposalpackage, inputs, *fVerbose, nw, attribs, maxout, maxin, minout, minin, *condAllDegExact, *attriblength); MCMCSamplePhase12 (&MH, theta0, *gain, meanstats, nphase1, nsubphases, sample, *samplesize, *burnin, *interval, (int)*fVerbose, nw, m); MH_free(&MH); /* record new generated network to pass back to R */ if(nmax>0 && newnetworktails && newnetworkheads) newnetworktails[0]=newnetworkheads[0]=EdgeTree2EdgeList(newnetworktails+1,newnetworkheads+1,nw,nmax-1); ModelDestroy(m); NetworkDestroy(nw); PutRNGstate(); /* Disable RNG before returning */ }
void SAN_wrapper ( int *dnumnets, int *nedges, int *tails, int *heads, int *dn, int *y0tails, int *y0heads,int *y0dn,int *y0nedges,double *y0nodalstatus, int *dflag, int *bipartite, int *nterms, char **funnames, char **sonames, char **MHproposaltype, char **MHproposalpackage, double *inputs, double *nodalstatus, double *theta0, double *tau, int *samplesize, double *sample, int *burnin, int *interval, int *newnetworktails, int *newnetworkheads, int *newnodalstatus, double *invcov, int *fVerbose, int *attribs, int *maxout, int *maxin, int *minout, int *minin, int *condAllDegExact, int *attriblength, int *maxedges, int *status){ int directed_flag; Vertex n_nodes, nmax, bip; Network nw[1],y0[1]; Model *m; MHproposal MH; /* please don't forget: tail -> head */ n_nodes = (Vertex)*dn; Vertex y0n_nodes = (Vertex)*y0dn; nmax = (Edge)abs(*maxedges); bip = (Vertex)*bipartite; GetRNGstate(); /* R function enabling uniform RNG */ directed_flag = *dflag; m=ModelInitialize(*funnames, *sonames, &inputs, *nterms, n_nodes, nodalstatus); /* Form the network */ nw[0]=NetworkInitialize(tails, heads, nedges[0], n_nodes, directed_flag, bip, 0, 0, NULL, nodalstatus); y0[0]=NetworkInitialize(y0tails, y0heads, y0nedges[0], y0n_nodes, directed_flag, bip, 0, 0, NULL, y0nodalstatus); MH_init(&MH, *MHproposaltype, *MHproposalpackage, inputs, *fVerbose, nw, attribs, maxout, maxin, minout, minin, *condAllDegExact, *attriblength); *status = SANSample (&MH, theta0, invcov, tau, sample, *samplesize, *burnin, *interval, *fVerbose, nmax, nw, m,y0); MH_free(&MH); /* Rprintf("Back! %d %d\n",nw[0].nedges, nmax); */ /* record new generated network to pass back to R */ if(*status == MCMC_OK && *maxedges>0 && newnetworktails && newnetworkheads) newnetworktails[0]=newnetworkheads[0]=EdgeTree2EdgeList(newnetworktails+1,newnetworkheads+1,nw,nmax-1); if(*status == MCMC_OK && *maxedges>0 && newnodalstatus){ for (int i=0;i<n_nodes;i++) newnodalstatus[i] = nw->nodalstatus[i]; } ModelDestroy(m); NetworkDestroy(nw); NetworkDestroy(y0); PutRNGstate(); /* Disable RNG before returning */ }
/***************** void MCMC_wrapper Wrapper for a call from R. and don't forget that tail -> head *****************/ void MCMC_wrapper(int *dnumnets, int *nedges, int *tails, int *heads, int *dn, int *dflag, int *bipartite, int *nterms, char **funnames, char **sonames, char **MHproposaltype, char **MHproposalpackage, double *inputs, double *theta0, int *samplesize, double *sample, int *burnin, int *interval, int *newnetworktails, int *newnetworkheads, int *fVerbose, int *attribs, int *maxout, int *maxin, int *minout, int *minin, int *condAllDegExact, int *attriblength, int *maxedges, int *status){ int directed_flag; Vertex n_nodes, nmax, bip; /* Edge n_networks; */ Network nw[1]; Model *m; MHproposal MH; n_nodes = (Vertex)*dn; /* n_networks = (Edge)*dnumnets; */ nmax = (Edge)abs(*maxedges); bip = (Vertex)*bipartite; GetRNGstate(); /* R function enabling uniform RNG */ directed_flag = *dflag; m=ModelInitialize(*funnames, *sonames, &inputs, *nterms); /* Form the network */ nw[0]=NetworkInitialize(tails, heads, nedges[0], n_nodes, directed_flag, bip, 0, 0, NULL); MH_init(&MH, *MHproposaltype, *MHproposalpackage, inputs, *fVerbose, nw, attribs, maxout, maxin, minout, minin, *condAllDegExact, *attriblength); *status = MCMCSample(&MH, theta0, sample, *samplesize, *burnin, *interval, *fVerbose, nmax, nw, m); MH_free(&MH); /* Rprintf("Back! %d %d\n",nw[0].nedges, nmax); */ /* record new generated network to pass back to R */ if(*status == MCMC_OK && *maxedges>0 && newnetworktails && newnetworkheads) newnetworktails[0]=newnetworkheads[0]=EdgeTree2EdgeList(newnetworktails+1,newnetworkheads+1,nw,nmax-1); ModelDestroy(m); NetworkDestroy(nw); PutRNGstate(); /* Disable RNG before returning */ }
void MCMCDynSArun_wrapper(// Observed network. int *tails, int *heads, int *time, int *lasttoggle, int *n_edges, int *n_nodes, int *dflag, int *bipartite, // Formation terms and proposals. int *F_nterms, char **F_funnames, char **F_sonames, char **F_MHproposaltype, char **F_MHproposalpackage, double *F_inputs, // Dissolution terms and proposals. int *D_nterms, char **D_funnames, char **D_sonames, char **D_MHproposaltype, char **D_MHproposalpackage, double *D_inputs, // Parameter fittig. double *eta0, int *M_nterms, char **M_funnames, char **M_sonames, double *M_inputs, double *init_dev, int *runlength, double *WinvGradient, double *jitter, double *dejitter, double *dev_guard, double *par_guard, // Degree bounds. int *attribs, int *maxout, int *maxin, int *minout, int *minin, int *condAllDegExact, int *attriblength, // MCMC settings. int *SA_burnin, int *SA_interval, int *min_MH_interval, int *max_MH_interval, double *MH_pval, double *MH_interval_add, // Space for output. int *maxedges, int *maxchanges, int *newnetworktail, int *newnetworkhead, double *opt_history, // Verbosity. int *fVerbose, int *status){ Network nw[2]; Model *F_m, *D_m, *M_m; MHproposal F_MH, D_MH; if(*lasttoggle == 0) lasttoggle = NULL; Vertex *difftime, *difftail, *diffhead; difftime = (Vertex *) calloc(*maxchanges,sizeof(Vertex)); difftail = (Vertex *) calloc(*maxchanges,sizeof(Vertex)); diffhead = (Vertex *) calloc(*maxchanges,sizeof(Vertex)); memset(newnetworktail,0,*maxedges*sizeof(int)); memset(newnetworkhead,0,*maxedges*sizeof(int)); MCMCDyn_init_common(tails, heads, *time, lasttoggle, *n_edges, *n_nodes, *dflag, *bipartite, nw, *F_nterms, *F_funnames, *F_sonames, F_inputs, &F_m, *D_nterms, *D_funnames, *D_sonames, D_inputs, &D_m, *M_nterms, *M_funnames, *M_sonames, M_inputs, &M_m, attribs, maxout, maxin, minout, minin, *condAllDegExact, *attriblength, *F_MHproposaltype, *F_MHproposalpackage, &F_MH, *D_MHproposaltype, *D_MHproposalpackage, &D_MH, *fVerbose); *status = MCMCDynSArun(nw, F_m, &F_MH, D_m, &D_MH, eta0, M_m, init_dev, *runlength, WinvGradient, jitter, dejitter, dev_guard, par_guard, *maxedges, *maxchanges, difftime, difftail, diffhead, opt_history, *SA_burnin, *SA_interval, *min_MH_interval, *max_MH_interval, *MH_pval, *MH_interval_add, *fVerbose); /* record the final network to pass back to R */ if(*status==MCMCDyn_OK){ newnetworktail[0]=newnetworkhead[0]=EdgeTree2EdgeList(newnetworktail+1,newnetworkhead+1,nw,*maxedges); *time = nw->duration_info.time; if(nw->duration_info.lasttoggle) memcpy(lasttoggle, nw->duration_info.lasttoggle, sizeof(int)*DYADCOUNT(*n_nodes, *bipartite, *dflag)); } MCMCDyn_finish_common(nw, F_m, D_m, M_m, &F_MH, &D_MH); free(difftime); free(difftail); free(diffhead); }