-
Notifications
You must be signed in to change notification settings - Fork 0
/
AlgoritmoGenetico.js
77 lines (56 loc) · 1.87 KB
/
AlgoritmoGenetico.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
75
76
77
/**
* Algoritmos genéticos simples: básico, baldwin, lamarck
*/
var afectados = 0.9, proMutacion = 0.3, proOptimizacion = 0.95;
function exeAlgGenetico(poblacion, algoritmo) {
var fecha = new Date();
Utiles.impresion('I', algoritmo, null, null, null, fecha);
var aPoblacion = [], permutacion = [];
for (var i = 0; i < poblacion; i++) {
permutacion = Utiles.permutar(0, obtTamanho(), obtTamanho());
aPoblacion[i] = new Cromosoma(permutacion, this.datos);
aPoblacion[i].asiHerencia();
}
if (algoritmo != 'W')
poblacion = aPoblacion.length;
aPoblacion.sort(function(a, b) {
return a.fitness - b.fitness
});
var operacion = new Operaciones(), fin = false, generaciones = 0, pobAnterior, mejor, probable;
while (!fin) {
generaciones++;
pobAnterior = aPoblacion.length;
mejor = aPoblacion[0].obtFitness();
for (var i = 0; i < pobAnterior - 1; i++)
operacion.cruce(aPoblacion, this.datos, aPoblacion[i],
aPoblacion[i + 1]);
var i = Math.floor(aPoblacion.length*afectados);
for (i; i < aPoblacion.length; i++) {
probable = Math.random();
if (probable > proMutacion)
operacion.muta(aPoblacion[i], this.datos);
}
if (algoritmo != 'B')
for ( var c in aPoblacion) {
probable = Math.random();
if (probable > proOptimizacion)
operacion.algVoraz(this.datos, aPoblacion[c]);
}
aPoblacion.sort(function(a, b) {
return a.fitness - b.fitness
});
while (aPoblacion.length != poblacion)
aPoblacion.splice(poblacion, 1);
if (aPoblacion[0].obtFitness() >= mejor)
fin = true;
Utiles.impresion('D', 'L', aPoblacion[0].obtSolucion(), generaciones,
aPoblacion[0].obtFitness(), null);
}
fecha = new Date();
Utiles.impresion('F', 'L', aPoblacion[0].obtSolucion(), generaciones,
aPoblacion[0].obtFitness(), fecha);
}
function AlgoritmoGenetico(datos) {
this.datos = datos;
this.exeAlgGenetico = exeAlgGenetico;
}