double get_distance(struct placement *p);
double individual_distances(struct individual *individual);
+double get_omittment(struct placement *p);
+double individual_omittment(struct individual *individual);
+
struct individual **perform_crossover(struct individual *parent1, struct individual *parent2);
void perform_mutation(struct individual *individual);
void init_placement(struct placement *p, struct individual *individual, struct request *r);
return distances;
}
+double get_omittment(struct placement *p)
+{
+ if (p->variant_used >= 0) return 0;
+
+ // FIX ME :)
+ switch (p->request->type)
+ {
+ case REQUEST_POINT:
+ case REQUEST_AREA:
+ return 10;
+ break;
+ default:
+ return 0;
+ }
+}
+
+double individual_omittment(struct individual *individual)
+{
+ int omittment = 0;
+
+ for (uns i=0; i<GARY_SIZE(individual->placements); i++)
+ {
+ omittment += get_omittment(&individual->placements[i]);
+ }
+
+ return omittment;
+}
+
int cmp_individual(const void *a, const void *b)
{
struct individual **ia = (struct individual **) a;
printf("Individual %d\n", i);
population1[i]->penalty = 0;
+ penalty = individual_omittment(population1[i]);
+ if (dbg_rank >= VERBOSITY_INDIVIDUAL)
+ printf("Increasing penalty by %d for omittment\n", penalty);
+ population1[i]->penalty += penalty;
+
penalty = individual_overlap(population1[i]);
if (dbg_rank >= VERBOSITY_INDIVIDUAL)
printf("Increasing penalty by %d for overlap\n", penalty);