-
Notifications
You must be signed in to change notification settings - Fork 0
/
Generation.js
74 lines (70 loc) · 2.22 KB
/
Generation.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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
class Generation{
constructor(count){
var networks = [];
for (var i = 0; i < count; i++){
var network = new NeuralNetwork(i);
networks[i] = network;
}
this.networks = networks;
}
setNetworks(networks){
this.networks = networks;
}
run(){
var generationFitness = 0;
var best = 0;
var worst = 999999999999999999;
for (var i = 0; i < this.networks.length; i++){
this.networks[i].run(noOfRuns);
generationFitness += this.networks[i].fitnessFromRun;
if (this.networks[i].fitnessFromRun > best){
best = this.networks[i].fitnessFromRun;
}
if (this.networks[i].fitnessFromRun < worst){
worst = this.networks[i].fitnessFromRun;
}
}
this.bestFitness = best;
this.averageFitness = generationFitness / this.networks.length;
this.worstFitness = worst;
generationAverages.push(this.averageFitness);
generationBests.push(this.bestFitness);
generationWorst.push(this.worstFitness);
}
order(){
var ids = [];
var fitnesses = []
var bests = [];
for (var i = 0; i < this.networks.length; i++){
var fitness = Number.NEGATIVE_INFINITY;
var best = Number.NEGATIVE_INFINITY;
var index = 0;
var id = 0;
for (var j = 0; j < this.networks.length; j++){
var network = this.networks[j];
if (network.fitnessFromRun > fitness && !ids.includes(network.id)){
fitness = network.fitnessFromRun;
index = j;
id = network.id;
best = network.best;
}
}
ids.push(id);
fitnesses.push(fitness);
bests.push(best);
}
//console.log(ids);
//console.log(fitnesses);
//console.log(bests);
this.ordered = ids;
return ids;
}
runDisplay(id){
var network = this.networks[id];
if (!network.snake.alive){
network.reset();
resetGame();
}
network.runOnce();
}
}