Ejemplo n.º 1
0
int main(int argc, char* argv[]){
    int iter, bin ;
    double* v2    = spp_community_alloc_space( NAG) ;
    double totalcorr[NBINS] ;
    int count[NBINS] ;
    double maxdis ;
    
    /* Set the random seed */
    long int seed ;
    if(argc>1){ seed = atol( argv[1]); }else{ seed = time(NULL) ; }
    spp_set_seed( seed ) ;

    /* Printout comments */
    printf("# Number of agents  %i\n# Metric radius     %f\n# Speed             %f\n# Noise             %f\n# Time step         %f\n# Box size          %f\n# Random seed       %li\n\n", NAG, RADIUS, SPEED, NOISE, DELTAT, BOX_SIZE, seed) ;
    
    CartesianPeriodic g = CartesianPeriodic( BOX_SIZE ) ;
    Metric interaction = Metric( RADIUS , &g) ;
    Vicsek_consensus behavior = Vicsek_consensus(&interaction, SPEED, NOISE) ;

    /* Create community */
    Community com = spp_community_autostart( NAG , SPEED, BOX_SIZE, &behavior) ;
    maxdis = com.max_distance() ;
    /* Use grid */
    int nslots = (int) BOX_SIZE / RADIUS ;
    Grid* grid ;
    if( nslots > 3 ){
        try{
            grid = new Grid( nslots , BOX_SIZE , NAG ) ;
            com.setup_grid( grid) ;
            printf("# Using grid with %i slots/dim.\n", nslots) ;
        }catch(...){
        printf("# Failed to use grid with %i slots/dim.\n", nslots) ;
        }
    }else{
        printf("# Too few slots per dimension (%i).\n", nslots) ;
    }
    
    for(iter=0; iter< TRANSIENT; iter++){
        com.periodic_move( DELTAT) ;
        com.sense_noisy_velocities(v2) ;
        com.update_velocities(v2) ;
    }

    for(iter=0; iter< NITER; iter++){
        if( iter % OUTPUT == 0 ){
            printf("#Iteration: %i\n", iter) ;
            com.correlation_histo(NBINS, SPEED, totalcorr, count) ;
            for(bin=0; bin< NBINS; bin++)
                printf("%f\t%f\t%i\n", (bin+0.5)*maxdis/NBINS ,totalcorr[bin], count[bin]) ;
            printf("\n\n") ;
        }
        com.periodic_move( DELTAT) ;
        com.sense_noisy_velocities(v2) ;
        com.update_velocities(v2) ;
    }
    return 0;
}
Ejemplo n.º 2
0
Agent::Agent(double* p , double* v, double* vN, Agent** ns, Behavior* bb){
    pos = p ;
    vel = v ;
    velNorm = vN;
    neis = ns ;
    num_neighs = 0;
    beh = bb ;

    spp_set_seed(time(NULL));

    rng = std::mt19937(std::chrono::system_clock::now().time_since_epoch().count());
    setNormalParams(0.0, sqrt(beh->getdt()) );
}
Ejemplo n.º 3
0
int main(int argc, char* argv[]){
    int iter ;
    double* v2    = spp_community_alloc_space( NAG) ;

    /* Set the random seed */
    long int seed ;
    if(argc>1){ seed = atol( argv[1]); }else{ seed = time(NULL) ; }
    spp_set_seed( seed ) ;

    /* Define behavior of agents */
    CartesianPeriodic g = CartesianPeriodic( BOX_SIZE ) ;
    Metric interaction = Metric( RADIUS , &g ) ;
    Vicsek_consensus behavior = Vicsek_consensus(&interaction, SPEED, NOISE) ;

    /* Create community */
    Community com = spp_community_autostart( NAG , SPEED, BOX_SIZE, &behavior ) ;

    /* Printout comments */
    printf("# Number of agents  %i\n# Metric radius     %f\n# Speed             %f\n# Noise             %f\n# Time step         %f\n# Box size          %f\n# Random seed       %li\n\n", NAG, RADIUS, SPEED, NOISE, DELTAT, BOX_SIZE, seed) ;

    /* Run some iterations to pass the
     * transient state.
     */
    for(iter=0; iter< TRANSIENT; iter++){
        com.periodic_move( DELTAT) ;
        com.sense_noisy_velocities(v2) ;
        com.update_velocities(v2) ;
    }

    /* MAIN LOOP */
    for(iter=0; iter< NITER; iter++){
        if( iter % OUTPUT == 0 ){
            printf("#Iteration: %i\tOrderpar: %f\n",iter,com.order_parameter(SPEED)) ;
            //com.print_posvel() ;
        }
        com.periodic_move( DELTAT) ;
        com.sense_noisy_velocities(v2) ;
        com.update_velocities(v2) ;
    }
    return 0;
}