58 lines
1.3 KiB
Plaintext
58 lines
1.3 KiB
Plaintext
# Project : Evolutionary algorithm
|
|
|
|
target = "METHINKS IT IS LIKE A WEASEL"
|
|
parent = "IU RFSGJABGOLYWF XSMFXNIABKT"
|
|
num = 0
|
|
mutationrate = 0.5
|
|
children = len(target)
|
|
child = list(children)
|
|
while parent != target
|
|
bestfitness = 0
|
|
bestindex = 0
|
|
for index = 1 to children
|
|
child[index] = mutate(parent, mutationrate)
|
|
fitness = fitness(target, child[index])
|
|
if fitness > bestfitness
|
|
bestfitness = fitness
|
|
bestindex = index
|
|
ok
|
|
next
|
|
if bestindex > 0
|
|
parent = child[bestindex]
|
|
num = num + 1
|
|
see "" + num + ": " + parent + nl
|
|
ok
|
|
end
|
|
|
|
func fitness(text, ref)
|
|
f = 0
|
|
for i = 1 to len(text)
|
|
if substr(text, i, 1) = substr(ref, i, 1)
|
|
f = f + 1
|
|
ok
|
|
next
|
|
return (f / len(text))
|
|
|
|
func mutate(text, rate)
|
|
rnd = randomf()
|
|
if rate > rnd
|
|
c = 63+random(27)
|
|
if c = 64
|
|
c = 32
|
|
ok
|
|
rnd2 = random(len(text))
|
|
if rnd2 > 0
|
|
text[rnd2] = char(c)
|
|
ok
|
|
ok
|
|
return text
|
|
|
|
func randomf()
|
|
decimals(10)
|
|
str = "0."
|
|
for i = 1 to 10
|
|
nr = random(9)
|
|
str = str + string(nr)
|
|
next
|
|
return number(str)
|