-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathevolution.rb
29 lines (27 loc) · 873 Bytes
/
evolution.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# -*- coding: utf-8 -*-
# Beschreibt den in der Aufgabe beschriebenen evolutionären Algorithmus
# unabhängig vom Anwendungsgebiet
module Evolution
extend self
# Nimmt die Parameter des evolutionären Algorithmus und die aktuelle Generation
# und gibt die nächste Generation zurück
# Parameter:
# grossN | Populationsgröße
# n | Überlebende pro Generation
# rho | Wahrscheinlichkeit einer Mutation
# f | Fitnessfunktion
# mutiere | Mutationsoperator
# kreuze | Kreuzungsoperator
def next_gen(grossN, n, rho, f, mutiere, kreuze, population)
ueberlebende = population.map {|individuum|
if rand <= rho
mutiere[individuum]
else
individuum
end
}.sort_by(&f)[-n .. -1]
ueberlebende + Array.new(grossN - n) {
kreuze[ ueberlebende[rand(n)], ueberlebende[rand(n)] ]
}
end
end