double ga_similarity_bitstring_hamming(const population *pop, const entity *alpha, const entity *beta) { int i; /* Loop variable over all chromosomes. */ int a=0, b=0; /* Number of ones in the individual entities' chromosomes. */ int n=0; /* Number of ones both entities' chromosomes. */ /* Checks. */ if (!pop) die("Null pointer to population structure passed"); if (!alpha || !beta) die("Null pointer to entity structure passed"); for (i=0; i<pop->num_chromosomes; i++) { n += ga_similarity_bitstring_count_and_alleles( pop, alpha, beta, i ); a += ga_similarity_bitstring_count_1_alleles( pop, alpha, i ); b += ga_similarity_bitstring_count_1_alleles( pop, beta, i ); } return 1.0 - (a+b-2*n)/pop->len_chromosomes; }
GAULFUNC double ga_similarity_bitstring_cosine(const population *pop, const entity *alpha, const entity *beta) { int i; /* Loop variable over all chromosomes. */ int a=0, b=0; /* Number of ones in the individual entities' chromosomes. */ int n=0; /* Number of ones both entities' chromosomes. */ /* Checks. */ if (!pop) die("Null pointer to population structure passed"); if (!alpha || !beta) die("Null pointer to entity structure passed"); for (i=0; i<pop->num_chromosomes; i++) { n += ga_similarity_bitstring_count_and_alleles( pop, alpha, beta, i ); a += ga_similarity_bitstring_count_1_alleles( pop, alpha, i ); b += ga_similarity_bitstring_count_1_alleles( pop, beta, i ); } if (a==0 || b==0) return 0; return n/sqrt((double)(a*b)); }