RosettaCodeData/Task/Evolutionary-algorithm/Aime/evolutionary-algorithm.aime

69 lines
916 B
Text
Raw Permalink Normal View History

2013-10-27 22:24:23 +00:00
integer
fitness(data t, data b)
{
2018-06-22 20:57:24 +00:00
integer c, f, i;
2013-10-27 22:24:23 +00:00
f = 0;
2018-06-22 20:57:24 +00:00
for (i, c in b) {
f += sign(t[i] ^ c);
2013-10-27 22:24:23 +00:00
}
2018-06-22 20:57:24 +00:00
f;
2013-10-27 22:24:23 +00:00
}
void
2018-06-22 20:57:24 +00:00
mutate(data e, data b, data u)
2013-10-27 22:24:23 +00:00
{
2018-06-22 20:57:24 +00:00
integer c;
for (, c in b) {
e.append(drand(15) ? c : u[drand(26)]);
2013-10-27 22:24:23 +00:00
}
}
integer
main(void)
{
data b, t, u;
2018-06-22 20:57:24 +00:00
integer f, i;
2013-10-27 22:24:23 +00:00
2018-06-22 20:57:24 +00:00
t = "METHINK IT IS LIKE A WEASEL";
u = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";
2013-10-27 22:24:23 +00:00
2018-06-22 20:57:24 +00:00
i = ~t;
2013-10-27 22:24:23 +00:00
while (i) {
i -= 1;
2018-06-22 20:57:24 +00:00
b.append(u[drand(26)]);
2013-10-27 22:24:23 +00:00
}
f = fitness(t, b);
while (f) {
data n;
integer a;
2018-06-22 20:57:24 +00:00
o_form("/lw4/~\n", f, b);
2013-10-27 22:24:23 +00:00
n = b;
i = 32;
while (i) {
data c;
i -= 1;
mutate(c, b, u);
a = fitness(t, c);
if (a < f) {
f = a;
n = c;
}
}
b = n;
}
2018-06-22 20:57:24 +00:00
o_form("/lw4/~\n", f, b);
2013-10-27 22:24:23 +00:00
return 0;
}