45 lines
1.6 KiB
Plaintext
45 lines
1.6 KiB
Plaintext
···
|
|
http://rosettacode.org/wiki/Evolutionary_algorithm
|
|
···
|
|
■ Evolutionary
|
|
§ static
|
|
target⦂ String: "METHINKS IT IS LIKE A WEASEL"
|
|
letter⦂ char[]: "ABCDEFGHIJKLMNOPQRSTUVWXYZ ".toCharArray°
|
|
parent⦂ String
|
|
random⦂ java.util.Random°
|
|
rate⦂ double: 0.5
|
|
C⦂ int: 1000
|
|
|
|
▶ fittness⦂ int · computes the 'closeness' of its
|
|
• argument⦂ String · to the target string
|
|
closeness⦂ int: 0
|
|
∀ i ∈ 0 … target.length°
|
|
closeness◥ if target.charAt i = argument.charAt i
|
|
return closeness
|
|
|
|
▶ mutate⦂ String · returns a copy of the
|
|
• given⦂ String · with some characters probably mutated
|
|
• rate⦂ double
|
|
copy⦂ char[]: given.toCharArray°
|
|
∀ i ∈ 0 … given.length°
|
|
copy[i]: letter[random.nextInt letter.length] if rate > random.nextDouble°
|
|
return String.valueOf copy
|
|
|
|
▶ main
|
|
• args⦂ String[]
|
|
ancest⦂ StringBuilder°
|
|
∀ i ∈ 0 … target.length°
|
|
ancest.append letter[random.nextInt letter.length]
|
|
parent: ancest.toString°
|
|
currentFittness⦂ int: fittness parent
|
|
generation⦂ int: 0
|
|
🔁 until the parent ≈ target
|
|
if fittness parent > currentFittness
|
|
currentFittness: fittness parent
|
|
System.out.println "Fittness of generation #⸨generation⸩ is ⸨currentFittness⸩"
|
|
for each time from 1 to C
|
|
mutation⦂ String: mutate parent, rate
|
|
parent: mutation if fittness parent < fittness mutation
|
|
generation◥
|
|
System.out.println "Target reached by generation #⸨generation⸩"
|