X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;ds=sidebyside;f=labeller.c;h=1db25fca59721a57be2199c4e79154de98772460;hb=3232a51a5fed20b6d3f0d6b9df0b8c66fdc75ca4;hp=3ccb6a1146f847ee8c4f745769832a93ced4d232;hpb=7a77304fe4edf3d2cce2c772241cc9cde47cc9e1;p=leo.git diff --git a/labeller.c b/labeller.c index 3ccb6a1..1db25fc 100644 --- a/labeller.c +++ b/labeller.c @@ -50,6 +50,7 @@ int dbg_map_parts = 0; int dbg_movement = 0; int dbg_init = 0; int dbg_overlaps = 0; +int dbg_rank = 0; int page_width_int; int page_height_int; @@ -121,6 +122,8 @@ void elite(void); void rank_population(void); void plan_individual(struct individual *individual); +int cmp_individual(const void *a, const void *b); + void make_bitmap(struct variant *v, struct symbol *sym); void make_bitmap_icon(struct variant *v, struct sym_icon *si); void make_bitmap_point(struct variant *v, struct sym_point *sp); @@ -1071,6 +1074,10 @@ void make_population(void) { for (int i=0; ipenalty - (*ib)->penalty; +} + void rank_population(void) { - // FIXME + int penalty; + + for (int i=0; ipenalty = 0; + + penalty = individual_overlap(population1[i]); + if (dbg_rank) + printf("Increasing penalty by %d for overlap\n", penalty); + population1[i]->penalty += penalty; + } } struct map_part **get_map_parts(struct placement *p) @@ -1687,8 +1714,7 @@ int flip(int a, int b) double randdouble(void) { - // FIXME: How the hell shall double in range <0, 1> be generated? O:) - return 0.5; + return ((double) rand() / (double) RAND_MAX); } void cleanup(void) @@ -1701,10 +1727,19 @@ void cleanup(void) void copy_individual(struct individual *src, struct individual *dest) { - src->penalty = dest->penalty; + dest->penalty = src->penalty; GARY_INIT(dest->placements, GARY_SIZE(src->placements)); for (uns i=0; iplacements); i++) { dest->placements[i] = src->placements[i]; + dest->placements[i].map_links = NULL; + } + for (uns j=0; jmap); + GARY_INIT(part->placement, 0); + struct map_placement *mp = GARY_PUSH(part->placement); + mp->placement = &dummy_placement; + mp->next = mp->prev = NULL; } }