]> mj.ucw.cz Git - leo.git/commitdiff
Labelling: Selecting only one segment for each section
authorKarryanna <karry@karryanna.cz>
Tue, 12 May 2015 13:02:25 +0000 (15:02 +0200)
committerKarryanna <karry@karryanna.cz>
Tue, 12 May 2015 13:02:25 +0000 (15:02 +0200)
labeller.c

index 0bd3d4afc74c5dbaaed2e4120ffde467ee57daeb..ff4e4a0abd749a65e33ad5a612649e4e68884923 100644 (file)
@@ -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; i<GARY_SIZE(individual->placements); 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