From: Karryanna Date: Tue, 12 May 2015 13:02:25 +0000 (+0200) Subject: Labelling: Selecting only one segment for each section X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=f45ca61ca4ead2283cb71d7a242596a7d02aa1a0;p=leo.git Labelling: Selecting only one segment for each section --- diff --git a/labeller.c b/labeller.c index 0bd3d4a..ff4e4a0 100644 --- a/labeller.c +++ b/labeller.c @@ -138,6 +138,7 @@ void labeller_cleanup(void); struct individual **perform_crossover(struct individual *parent1, struct individual *parent2); void perform_mutation(struct individual *individual); +void hide_segment_labels(struct individual *individual); void init_placement(struct placement *p, struct request *r); void init_individual(struct individual *i); struct map_part **get_parts(struct placement *symbol, struct individual *individual); @@ -1084,6 +1085,8 @@ void make_population(void) init_placement(&(individual->placements[p++]), (struct request *) &requests_area[j]); } + hide_segment_labels(individual); + if (p != num_requests) { printf("Say bye\n"); @@ -1389,6 +1392,32 @@ void move_symbol_point(struct placement *p) p->y += (double) (move_min + randdouble()) * flip(1, -1); } +void hide_segment_labels(struct individual *individual) +{ + // BEWARE: This fully depends on current genetic encoding + + int used = -1, num = -1; + for (uns i=0; iplacements); i++) + { + switch (individual->placements[i].request->type) + { + case REQUEST_SECTION: + used = individual->placements[i].variant_used; + num = 0; + break; + case REQUEST_SEGMENT: + if (num == used) + individual->placements[i].variant_used = 0; + else + individual->placements[i].variant_used = -1; + num++; + break; + default: + ; + } + } +} + void init_placement(struct placement *p, struct request *r) { // FIXME