aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2009-10-04 00:59:11 +0000
committerDimitri Sokolyuk <demon@dim13.org>2009-10-04 00:59:11 +0000
commitd693267381bb182d17e38f690100ee7118716faf (patch)
treee8cc17e5844b476205e087e793fdd973bc0d3b97
parent149fd867950abe7a134bcba9335b1a70bd9bad3d (diff)
cleanup
-rw-r--r--weasel.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/weasel.c b/weasel.c
index 49d35dc..1b6b765 100644
--- a/weasel.c
+++ b/weasel.c
@@ -66,7 +66,7 @@ calculatefitness(char *genom, int length)
int i, good;
good = 0;
- for (i = 0; i <length; i++)
+ for (i = 0; i < length; i++)
if (aim[i] == genom[i])
good++;
@@ -137,7 +137,12 @@ cmp(const void *u, const void *v)
struct creature * const *a = u;
struct creature * const *b = v;
- return ((*a)->fitness <= (*b)->fitness ? 1 : -1);
+ if ((*a)->fitness < (*b)->fitness)
+ return 1;
+ if ((*a)->fitness > (*b)->fitness)
+ return -1;
+
+ return 0;
}
void
@@ -153,10 +158,10 @@ intercourse(int population, int mutationsrate)
qsort(c, 3, sizeof(struct creature *), cmp);
for (i = 0; i < c[2]->length; i++) {
- if (random() % mutationsrate == 0)
- c[2]->genom[i] = rndchar();
- else
+ if (random() % mutationsrate)
c[2]->genom[i] = c[random() % 2]->genom[i];
+ else
+ c[2]->genom[i] = rndchar();
}
c[2]->genom[i] = '\0';
c[2]->fitness = calculatefitness(c[2]->genom, c[2]->length);