-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathga.js
41 lines (38 loc) · 884 Bytes
/
ga.js
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
30
31
32
33
34
35
36
37
38
39
40
41
function nextGeneration() {
console.log('next generation');
calculateFitness(end);
for (let i = 0; i < TOTAL; i++) {
population[i] = pickOne();
}
for (let i = 0; i < TOTAL; i++) {
savedParticles[i].dispose();
}
savedParticles = [];
}
function pickOne() {
let index = 0;
let r = random(1);
while (r > 0) {
r = r - savedParticles[index].fitness;
index++;
}
index--;
let particle = savedParticles[index];
// TODO implement copy Particle
let child = new Particle(particle.brain);
child.mutate();
return child;
}
function calculateFitness(target) {
for (let particle of savedParticles) {
particle.calculateFitness();
}
// Normalize all values
let sum = 0;
for (let particle of savedParticles) {
sum += particle.fitness;
}
for (let particle of savedParticles) {
particle.fitness = particle.fitness / sum;
}
}