-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathga.js
41 lines (33 loc) · 988 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
class GeneticAlgorithm {
constructor() {}
calculateFitness = () => {
let totalScoreLeft = 0;
let totalScoreRight = 0;
for (let i = 0; i < POPULATION; i++) {
leftPaddles[i].score = pow(2, leftPaddles[i].score);
totalScoreLeft += leftPaddles[i].score;
rightPaddles[i].score = pow(2, rightPaddles[i].score);
totalScoreRight += rightPaddles[i].score;
}
for (let i = 0; i < POPULATION; i++) {
leftPaddles[i].fitness = leftPaddles[i].score / totalScoreLeft;
rightPaddles[i].fitness = rightPaddles[i].score / totalScoreRight;
}
};
selectOne = (isLeft) => {
const parents = isLeft ? leftPaddles : rightPaddles;
let i = 0;
let r = random();
while (r > 0) {
r -= parents[i].fitness;
i++;
}
i--;
const parent = parents[i];
const child = new Paddle(isLeft);
child.brain = parent.brain.clone();
child.brain.mutate(0.1);
return child;
};
crossover = (a, b) => {};
}