[brlcad-commits] CVS: brlcad/src/gtools/beset beset.c, 1.15, 1.16 fitness.c, 1.14, 1.15 population.
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: poolio <po...@us...> - 2007-07-20 17:55:52
|
Update of /cvsroot/brlcad/brlcad/src/gtools/beset In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv11661 Modified Files: beset.c fitness.c population.c fitness.h Log Message: memory leak finally fixed. updated fitness function, much better results. Index: beset.c =================================================================== RCS file: /cvsroot/brlcad/brlcad/src/gtools/beset/beset.c,v retrieving revision 1.15 retrieving revision 1.16 diff -w -u -r1.15 -r1.16 --- beset.c 20 Jul 2007 14:49:12 -0000 1.15 +++ beset.c 20 Jul 2007 17:55:51 -0000 1.16 @@ -147,6 +147,10 @@ for(i = 0; i < pop->size; i++) { pop->parent[i].fitness = 2.0/(1+fit_linDiff(pop->parent[i].id, pop->db_p, fstate)); if(pop->parent[i].fitness > pop->parent[best].fitness) best = i; + } + qsort(pop->parent, pop->size, sizeof(struct individual), cmp_ind); + for(i = 0; i < pop->size; i++){ + pop->parent[i].fitness *= (pop->size-i)*(pop->size-i)/pop->size; total_fitness += pop->parent[i].fitness; } printf("Most fit from generation %3d was: %s, fitness of %g\n", g-1, pop->parent[best].id, pop->parent[best].fitness); Index: fitness.c =================================================================== RCS file: /cvsroot/brlcad/brlcad/src/gtools/beset/fitness.c,v retrieving revision 1.14 retrieving revision 1.15 diff -w -u -r1.14 -r1.15 --- fitness.c 20 Jul 2007 14:49:12 -0000 1.14 +++ fitness.c 20 Jul 2007 17:55:51 -0000 1.15 @@ -294,9 +294,9 @@ while((v = get_next_row(fstate))) { for(u = 1; u <= fstate->res[U_AXIS]; u++) { - ap.a_ray.r_pt[U_AXIS] = ap.a_rt_i->mdl_min[U_AXIS] + u * fstate->gridSpacing[U_AXIS]; - ap.a_ray.r_pt[V_AXIS] = ap.a_rt_i->mdl_min[V_AXIS] + v * fstate->gridSpacing[V_AXIS]; - ap.a_ray.r_pt[I_AXIS] = ap.a_rt_i->mdl_min[I_AXIS]; + ap.a_ray.r_pt[U_AXIS] = fstate->mdl_min[U_AXIS] + u * fstate->gridSpacing[U_AXIS]; + ap.a_ray.r_pt[V_AXIS] = fstate->mdl_min[V_AXIS] + v * fstate->gridSpacing[V_AXIS]; + ap.a_ray.r_pt[I_AXIS] = fstate->mdl_min[I_AXIS]; ap.a_user = (v-1)*(fstate->res[U_AXIS]) + u-1; /* initialize stored partition */ @@ -334,6 +334,7 @@ } + // Calculate bounding box for raytracing if(fstate->capture){ fstate->bbox[0] = fstate->rtip->mdl_min[Z]; fstate->bbox[1] = fstate->rtip->mdl_max[Z] - fstate->bbox[0]; @@ -343,6 +344,7 @@ VSUB2(span, fstate->rtip->mdl_max, fstate->rtip->mdl_min); fstate->gridSpacing[U_AXIS] = (fstate->rtip->mdl_max[U_AXIS]-fstate->rtip->mdl_min[U_AXIS])/ (fstate->res[U_AXIS] + 1); fstate->gridSpacing[V_AXIS] = (fstate->rtip->mdl_max[V_AXIS] - fstate->rtip->mdl_min[V_AXIS]) / (fstate->res[V_AXIS] + 1 ); + VSET(fstate->mdl_min,fstate->rtip->mdl_min[X], fstate->rtip->mdl_min[Y], fstate->rtip->mdl_min[Z]); } else { rt_prep_parallel(fstate->rtip, fstate->ncpu); } @@ -360,7 +362,11 @@ //fstate->diff /= fstate->res[U_AXIS]*fstate->res[V_AXIS]; } - rt_clean(fstate->rtip); + for(i = 0; i < fstate->max_cpus; i++) + rt_clean_resource(fstate->rtip, &fstate->resource[i]); + rt_free_rti(fstate->rtip); + + } /** Index: population.c =================================================================== RCS file: /cvsroot/brlcad/brlcad/src/gtools/beset/population.c,v retrieving revision 1.11 retrieving revision 1.12 diff -w -u -r1.11 -r1.12 --- population.c 20 Jul 2007 14:49:12 -0000 1.11 +++ population.c 20 Jul 2007 17:55:52 -0000 1.12 @@ -249,6 +249,8 @@ bu_bomb("Failed to add new object to the database"); if(rt_db_put_internal(dp, dbi_c, &in, resp) < 0) bu_bomb("Failed to write new individual to databse"); + rt_db_free_internal(&in, resp);//error check? + break; @@ -342,6 +344,7 @@ if((dp = db_diradd(dbi_c, child2_id, -1, 0, dp->d_flags, (genptr_t)&dp->d_minor_type)) == DIR_NULL) bu_bomb("Failed to add new individual to child database"); rt_db_put_internal(dp, dbi_c, &in2, resp); + rt_db_free_internal(&in2, resp); break; @@ -355,6 +358,7 @@ bu_bomb("Failed to add new individual to child database"); } rt_db_put_internal(dp, dbi_c, &in1, resp); + rt_db_free_internal(&in1, resp); } Index: fitness.h =================================================================== RCS file: /cvsroot/brlcad/brlcad/src/gtools/beset/fitness.h,v retrieving revision 1.7 retrieving revision 1.8 diff -w -u -r1.7 -r1.8 --- fitness.h 10 Jul 2007 15:55:42 -0000 1.7 +++ fitness.h 20 Jul 2007 17:55:52 -0000 1.8 @@ -64,6 +64,7 @@ fastf_t diff; /* linear difference between source and object */ fastf_t bbox[3]; /* z-min/max bounding line */ + fastf_t mdl_min[3]; }; /* store a ray that hit */ |