From 1c041c05e512452ee1b96811fcc2cf2d7b8b3cec Mon Sep 17 00:00:00 2001 From: handcraftsman Date: Fri, 30 Nov 2018 09:20:38 -0600 Subject: [PATCH 1/7] spanish code: mudar => mutar --- es/ch01/genetic.py | 4 +-- es/ch02/genetic.py | 4 +-- es/ch03/genetic.py | 8 ++--- es/ch06/cartas.py | 8 ++--- es/ch06/genetic.py | 14 ++++----- es/ch07/caballos.py | 8 ++--- es/ch07/genetic.py | 14 ++++----- "es/ch08/cuadradosM\303\241gicos.py" | 8 ++--- es/ch08/genetic.py | 14 ++++----- es/ch09/mochila.py | 9 +++--- es/ch10/ecuacionesLineales.py | 8 ++--- es/ch11/sudoku.py | 8 ++--- es/ch12/genetic.py | 22 ++++++------- es/ch12/vendedor.py | 8 ++--- es/ch13/genetic.py | 22 ++++++------- es/ch13/pi.py | 8 ++--- es/ch14/ecuaciones.py | 8 ++--- es/ch15/pruebas.py | 8 ++--- es/ch16/genetic.py | 22 ++++++------- es/ch16/pruebas.py | 8 ++--- es/ch17/regex.py | 46 ++++++++++++++-------------- es/ch18/genetic.py | 22 ++++++------- es/ch18/ticTacToe.py | 46 ++++++++++++++-------------- 23 files changed, 163 insertions(+), 164 deletions(-) diff --git a/es/ch01/genetic.py b/es/ch01/genetic.py index 90bf08c..2b7417f 100644 --- a/es/ch01/genetic.py +++ b/es/ch01/genetic.py @@ -31,7 +31,7 @@ def _generar_padre(longitud, geneSet, obtener_aptitud): return Cromosoma(genes, aptitud) -def _mudar(padre, geneSet, obtener_aptitud): +def _mutar(padre, geneSet, obtener_aptitud): índice = random.randrange(0, len(padre.Genes)) genesDelNiño = list(padre.Genes) nuevoGen, alterno = random.sample(geneSet, 2) @@ -50,7 +50,7 @@ def obtener_mejor(obtener_aptitud, longitudObjetivo, aptitudÓptima, geneSet, if mejorPadre.Aptitud >= aptitudÓptima: return mejorPadre while True: - niño = _mudar(mejorPadre, geneSet, obtener_aptitud) + niño = _mutar(mejorPadre, geneSet, obtener_aptitud) if mejorPadre.Aptitud >= niño.Aptitud: continue mostrar(niño) diff --git a/es/ch02/genetic.py b/es/ch02/genetic.py index 175079b..803b841 100644 --- a/es/ch02/genetic.py +++ b/es/ch02/genetic.py @@ -30,7 +30,7 @@ def _generar_padre(longitud, geneSet, obtener_aptitud): return Cromosoma(genes, aptitud) -def _mudar(padre, geneSet, obtener_aptitud): +def _mutar(padre, geneSet, obtener_aptitud): genesDelNiño = padre.Genes[:] índice = random.randrange(0, len(padre.Genes)) nuevoGen, alterno = random.sample(geneSet, 2) @@ -48,7 +48,7 @@ def obtener_mejor(obtener_aptitud, longitudObjetivo, aptitudÓptima, geneSet, if mejorPadre.Aptitud >= aptitudÓptima: return mejorPadre while True: - niño = _mudar(mejorPadre, geneSet, obtener_aptitud) + niño = _mutar(mejorPadre, geneSet, obtener_aptitud) if mejorPadre.Aptitud >= niño.Aptitud: continue mostrar(niño) diff --git a/es/ch03/genetic.py b/es/ch03/genetic.py index 457274f..f4cd5dc 100644 --- a/es/ch03/genetic.py +++ b/es/ch03/genetic.py @@ -30,7 +30,7 @@ def _generar_padre(longitud, geneSet, obtener_aptitud): return Cromosoma(genes, aptitud) -def _mudar(padre, geneSet, obtener_aptitud): +def _mutar(padre, geneSet, obtener_aptitud): genesDelNiño = padre.Genes[:] índice = random.randrange(0, len(padre.Genes)) nuevoGen, alterno = random.sample(geneSet, 2) @@ -44,13 +44,13 @@ def obtener_mejor(obtener_aptitud, longitudObjetivo, aptitudÓptima, geneSet, mostrar): random.seed() - def fnMudar(padre): - return _mudar(padre, geneSet, obtener_aptitud) + def fnMutar(padre): + return _mutar(padre, geneSet, obtener_aptitud) def fnGenerarPadre(): return _generar_padre(longitudObjetivo, geneSet, obtener_aptitud) - for mejora in _obtener_mejoras(fnMudar, fnGenerarPadre): + for mejora in _obtener_mejoras(fnMutar, fnGenerarPadre): mostrar(mejora) if not aptitudÓptima > mejora.Aptitud: return mejora diff --git a/es/ch06/cartas.py b/es/ch06/cartas.py index b222254..a90b8b1 100644 --- a/es/ch06/cartas.py +++ b/es/ch06/cartas.py @@ -40,7 +40,7 @@ def mostrar(candidato, horaInicio): diferencia)) -def mudar(genes, geneSet): +def mutar(genes, geneSet): if len(genes) == len(set(genes)): cuenta = random.randint(1, 4) while cuenta > 0: @@ -64,13 +64,13 @@ def fnMostrar(candidato): def fnObtenerAptitud(genes): return obtener_aptitud(genes) - def fnMudar(genes): - mudar(genes, geneSet) + def fnMutar(genes): + mutar(genes, geneSet) aptitudÓptima = Aptitud(36, 360, 0) mejor = genetic.obtener_mejor(fnObtenerAptitud, 10, aptitudÓptima, geneSet, fnMostrar, - mutación_personalizada=fnMudar) + mutación_personalizada=fnMutar) self.assertTrue(not aptitudÓptima > mejor.Aptitud) def test_comparativa(self): diff --git a/es/ch06/genetic.py b/es/ch06/genetic.py index f1c934d..89e92e3 100644 --- a/es/ch06/genetic.py +++ b/es/ch06/genetic.py @@ -30,7 +30,7 @@ def _generar_padre(longitud, geneSet, obtener_aptitud): return Cromosoma(genes, aptitud) -def _mudar(padre, geneSet, obtener_aptitud): +def _mutar(padre, geneSet, obtener_aptitud): genesDelNiño = padre.Genes[:] índice = random.randrange(0, len(padre.Genes)) nuevoGen, alterno = random.sample(geneSet, 2) @@ -40,7 +40,7 @@ def _mudar(padre, geneSet, obtener_aptitud): return Cromosoma(genesDelNiño, aptitud) -def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): +def _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud): genesDelNiño = padre.Genes[:] mutación_personalizada(genesDelNiño) aptitud = obtener_aptitud(genesDelNiño) @@ -50,17 +50,17 @@ def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): def obtener_mejor(obtener_aptitud, longitudObjetivo, aptitudÓptima, geneSet, mostrar, mutación_personalizada=None): if mutación_personalizada is None: - def fnMudar(padre): - return _mudar(padre, geneSet, obtener_aptitud) + def fnMutar(padre): + return _mutar(padre, geneSet, obtener_aptitud) else: - def fnMudar(padre): - return _mudar_personalizada(padre, mutación_personalizada, + def fnMutar(padre): + return _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud) def fnGenerarPadre(): return _generar_padre(longitudObjetivo, geneSet, obtener_aptitud) - for mejora in _obtener_mejoras(fnMudar, fnGenerarPadre): + for mejora in _obtener_mejoras(fnMutar, fnGenerarPadre): mostrar(mejora) if not aptitudÓptima > mejora.Aptitud: return mejora diff --git a/es/ch07/caballos.py b/es/ch07/caballos.py index 609f974..b7ee5ee 100644 --- a/es/ch07/caballos.py +++ b/es/ch07/caballos.py @@ -41,7 +41,7 @@ def mostrar(candidato, horaInicio, tableroAncho, tableroAltura): diferencia)) -def mudar(genes, tableroAncho, tableroAltura, todasPosiciones, +def mutar(genes, tableroAncho, tableroAltura, todasPosiciones, posicionesNoBordeadas): cuenta = 2 if random.randint(0, 10) == 0 else 1 while cuenta > 0: @@ -150,8 +150,8 @@ def fnObtenerAptitud(genes): def fnObtenerPosiciónAleatoria(): return random.choice(posicionesNoBordeadas) - def fnMudar(genes): - mudar(genes, tableroAncho, tableroAltura, todasPosiciones, + def fnMutar(genes): + mutar(genes, tableroAncho, tableroAltura, todasPosiciones, posicionesNoBordeadas) def fnCrear(): @@ -159,7 +159,7 @@ def fnCrear(): aptitudÓptima = tableroAncho * tableroAltura mejor = genetic.obtener_mejor(fnObtenerAptitud, None, aptitudÓptima, - None, fnMostrar, fnMudar, fnCrear) + None, fnMostrar, fnMutar, fnCrear) self.assertTrue(not aptitudÓptima > mejor.Aptitud) diff --git a/es/ch07/genetic.py b/es/ch07/genetic.py index da0332e..4d334b1 100644 --- a/es/ch07/genetic.py +++ b/es/ch07/genetic.py @@ -30,7 +30,7 @@ def _generar_padre(longitud, geneSet, obtener_aptitud): return Cromosoma(genes, aptitud) -def _mudar(padre, geneSet, obtener_aptitud): +def _mutar(padre, geneSet, obtener_aptitud): genesDelNiño = padre.Genes[:] índice = random.randrange(0, len(padre.Genes)) nuevoGen, alterno = random.sample(geneSet, 2) @@ -40,7 +40,7 @@ def _mudar(padre, geneSet, obtener_aptitud): return Cromosoma(genesDelNiño, aptitud) -def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): +def _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud): genesDelNiño = padre.Genes[:] mutación_personalizada(genesDelNiño) aptitud = obtener_aptitud(genesDelNiño) @@ -51,11 +51,11 @@ def obtener_mejor(obtener_aptitud, longitudObjetivo, aptitudÓptima, geneSet, mostrar, mutación_personalizada=None, creación_personalizada=None): if mutación_personalizada is None: - def fnMudar(padre): - return _mudar(padre, geneSet, obtener_aptitud) + def fnMutar(padre): + return _mutar(padre, geneSet, obtener_aptitud) else: - def fnMudar(padre): - return _mudar_personalizada(padre, mutación_personalizada, + def fnMutar(padre): + return _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud) if creación_personalizada is None: @@ -66,7 +66,7 @@ def fnGenerarPadre(): genes = creación_personalizada() return Cromosoma(genes, obtener_aptitud(genes)) - for mejora in _obtener_mejoras(fnMudar, fnGenerarPadre): + for mejora in _obtener_mejoras(fnMutar, fnGenerarPadre): mostrar(mejora) if not aptitudÓptima > mejora.Aptitud: return mejora diff --git "a/es/ch08/cuadradosM\303\241gicos.py" "b/es/ch08/cuadradosM\303\241gicos.py" index 0f00a93..4e5d7c7 100644 --- "a/es/ch08/cuadradosM\303\241gicos.py" +++ "b/es/ch08/cuadradosM\303\241gicos.py" @@ -65,7 +65,7 @@ def obtener_sums(genes, tamañoDiagonal): return filas, columnas, sumaDiagonalNoreste, sumaDiagonalSureste -def mudar(genes, índices): +def mutar(genes, índices): índiceA, índiceB = random.sample(índices, 2) genes[índiceA], genes[índiceB] = genes[índiceB], genes[índiceA] @@ -100,8 +100,8 @@ def fnMostrar(candidato): geneÍndices = [i for i in range(0, len(geneSet))] - def fnMudar(genes): - mudar(genes, geneÍndices) + def fnMutar(genes): + mutar(genes, geneÍndices) def fnCreaciónPersonalizada(): return random.sample(geneSet, len(geneSet)) @@ -109,7 +109,7 @@ def fnCreaciónPersonalizada(): valorÓptimo = Aptitud(0) horaInicio = datetime.datetime.now() mejor = genetic.obtener_mejor(fnObtenerAptitud, nCuadrado, valorÓptimo, - geneSet, fnMostrar, fnMudar, + geneSet, fnMostrar, fnMutar, fnCreaciónPersonalizada, edadMáxima) self.assertTrue(not valorÓptimo > mejor.Aptitud) diff --git a/es/ch08/genetic.py b/es/ch08/genetic.py index 0815864..1b78da4 100644 --- a/es/ch08/genetic.py +++ b/es/ch08/genetic.py @@ -32,7 +32,7 @@ def _generar_padre(longitud, geneSet, obtener_aptitud): return Cromosoma(genes, aptitud) -def _mudar(padre, geneSet, obtener_aptitud): +def _mutar(padre, geneSet, obtener_aptitud): genesDelNiño = padre.Genes[:] índice = random.randrange(0, len(padre.Genes)) nuevoGen, alterno = random.sample(geneSet, 2) @@ -42,7 +42,7 @@ def _mudar(padre, geneSet, obtener_aptitud): return Cromosoma(genesDelNiño, aptitud) -def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): +def _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud): genesDelNiño = padre.Genes[:] mutación_personalizada(genesDelNiño) aptitud = obtener_aptitud(genesDelNiño) @@ -53,11 +53,11 @@ def obtener_mejor(obtener_aptitud, longitudObjetivo, aptitudÓptima, geneSet, mostrar, mutación_personalizada=None, creación_personalizada=None, edadMáxima=None): if mutación_personalizada is None: - def fnMudar(padre): - return _mudar(padre, geneSet, obtener_aptitud) + def fnMutar(padre): + return _mutar(padre, geneSet, obtener_aptitud) else: - def fnMudar(padre): - return _mudar_personalizada(padre, mutación_personalizada, + def fnMutar(padre): + return _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud) if creación_personalizada is None: @@ -68,7 +68,7 @@ def fnGenerarPadre(): genes = creación_personalizada() return Cromosoma(genes, obtener_aptitud(genes)) - for mejora in _obtener_mejoras(fnMudar, fnGenerarPadre, edadMáxima): + for mejora in _obtener_mejoras(fnMutar, fnGenerarPadre, edadMáxima): mostrar(mejora) if not aptitudÓptima > mejora.Aptitud: return mejora diff --git a/es/ch09/mochila.py b/es/ch09/mochila.py index 520cf43..e575a5d 100644 --- a/es/ch09/mochila.py +++ b/es/ch09/mochila.py @@ -81,7 +81,7 @@ def añadir(genes, artículos, pesoMáximo, volumenMáximo): cantidadMáxima) if cantidadMáxima > 0 else None -def mudar(genes, artículos, pesoMáximo, volumenMáximo, ventana): +def mutar(genes, artículos, pesoMáximo, volumenMáximo, ventana): ventana.deslizar() aptitud = obtener_aptitud(genes) pesoRestante = pesoMáximo - aptitud.PesoTotal @@ -172,12 +172,12 @@ def fnObtenerAptitud(genes): def fnCrear(): return crear(artículos, pesoMáximo, volumenMáximo) - def fnMudar(genes): - mudar(genes, artículosOrdenados, pesoMáximo, volumenMáximo, + def fnMutar(genes): + mutar(genes, artículosOrdenados, pesoMáximo, volumenMáximo, ventana) mejor = genetic.obtener_mejor(fnObtenerAptitud, None, aptitudÓptima, - None, fnMostrar, fnMudar, fnCrear, + None, fnMostrar, fnMutar, fnCrear, edadMáxima=50) self.assertTrue(not aptitudÓptima > mejor.Aptitud) @@ -267,7 +267,6 @@ def __gt__(self, otro): return self.PesoTotal < otro.PesoTotal return self.VolumenTotal < otro.VolumenTotal - def __str__(self): return "peso: {:0.2f} vol: {:0.2f} valor: {}".format( self.PesoTotal, diff --git a/es/ch10/ecuacionesLineales.py b/es/ch10/ecuacionesLineales.py index 5f0730e..497fcb9 100644 --- a/es/ch10/ecuacionesLineales.py +++ b/es/ch10/ecuacionesLineales.py @@ -40,7 +40,7 @@ def mostrar(candidato, horaInicio, fnGenesAEntradas): diferencia)) -def mudar(genes, geneSetOrdenado, ventana, geneÍndices): +def mutar(genes, geneSetOrdenado, ventana, geneÍndices): índices = random.sample(geneÍndices, random.randint(1, len(genes))) \ if random.randint(0, 10) == 0 else [random.choice(geneÍndices)] ventana.deslizar() @@ -161,13 +161,13 @@ def fnMostrar(candidato): def fnObtenerAptitud(genes): return obtener_aptitud(genes, ecuaciones) - def fnMudar(genes): - mudar(genes, geneSetOrdenado, ventana, geneÍndices) + def fnMutar(genes): + mutar(genes, geneSetOrdenado, ventana, geneÍndices) aptitudÓptima = Aptitud(0) mejor = genetic.obtener_mejor(fnObtenerAptitud, numUnknowns, aptitudÓptima, geneSet, fnMostrar, - fnMudar, edadMáxima=edadMáxima) + fnMutar, edadMáxima=edadMáxima) self.assertTrue(not aptitudÓptima > mejor.Aptitud) diff --git a/es/ch11/sudoku.py b/es/ch11/sudoku.py index 7130e22..1758f68 100644 --- a/es/ch11/sudoku.py +++ b/es/ch11/sudoku.py @@ -52,7 +52,7 @@ def mostrar(candidato, horaInicio): .format(candidato.Aptitud, diferencia)) -def mudar(genes, reglasDeValidación): +def mutar(genes, reglasDeValidación): reglaSeleccionada = next(regla for regla in reglasDeValidación if genes[regla.Índice] == genes[regla.OtroÍndice]) if reglaSeleccionada is None: @@ -99,11 +99,11 @@ def fnObtenerAptitud(genes): def fnCrear(): return random.sample(geneSet * 9, 81) - def fnMudar(genes): - mudar(genes, reglasDeValidación) + def fnMutar(genes): + mutar(genes, reglasDeValidación) mejor = genetic.obtener_mejor(fnObtenerAptitud, None, valorÓptimo, - None, fnMostrar, fnMudar, fnCrear, + None, fnMostrar, fnMutar, fnCrear, edadMáxima=50) self.assertEqual(mejor.Aptitud, valorÓptimo) diff --git a/es/ch12/genetic.py b/es/ch12/genetic.py index 1703276..c9b249e 100644 --- a/es/ch12/genetic.py +++ b/es/ch12/genetic.py @@ -33,7 +33,7 @@ def _generar_padre(longitud, geneSet, obtener_aptitud): return Cromosoma(genes, aptitud, Estrategias.Creación) -def _mudar(padre, geneSet, obtener_aptitud): +def _mutar(padre, geneSet, obtener_aptitud): genesDelNiño = padre.Genes[:] índice = random.randrange(0, len(padre.Genes)) nuevoGen, alterno = random.sample(geneSet, 2) @@ -43,7 +43,7 @@ def _mudar(padre, geneSet, obtener_aptitud): return Cromosoma(genesDelNiño, aptitud, Estrategias.Mutación) -def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): +def _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud): genesDelNiño = padre.Genes[:] mutación_personalizada(genesDelNiño) aptitud = obtener_aptitud(genesDelNiño) @@ -51,7 +51,7 @@ def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): def _intercambiar(genesDePadre, índice, padres, obtener_aptitud, intercambiar, - mudar, generar_padre): + mutar, generar_padre): índiceDeDonante = random.randrange(0, len(padres)) if índiceDeDonante == índice: índiceDeDonante = (índiceDeDonante + 1) % len(padres) @@ -59,7 +59,7 @@ def _intercambiar(genesDePadre, índice, padres, obtener_aptitud, intercambiar, if genesDelNiño is None: # padre y donante son indistinguibles padres[índiceDeDonante] = generar_padre() - return mudar(padres[índice]) + return mutar(padres[índice]) aptitud = obtener_aptitud(genesDelNiño) return Cromosoma(genesDelNiño, aptitud, Estrategias.Intercambio) @@ -69,11 +69,11 @@ def obtener_mejor(obtener_aptitud, longitudObjetivo, aptitudÓptima, geneSet, creación_personalizada=None, edadMáxima=None, tamañoDePiscina=1, intercambiar=None): if mutación_personalizada is None: - def fnMudar(padre): - return _mudar(padre, geneSet, obtener_aptitud) + def fnMutar(padre): + return _mutar(padre, geneSet, obtener_aptitud) else: - def fnMudar(padre): - return _mudar_personalizada(padre, mutación_personalizada, + def fnMutar(padre): + return _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud) if creación_personalizada is None: @@ -87,9 +87,9 @@ def fnGenerarPadre(): búsquedaDeEstrategia = { Estrategias.Creación: lambda p, i, o: fnGenerarPadre(), - Estrategias.Mutación: lambda p, i, o: fnMudar(p), + Estrategias.Mutación: lambda p, i, o: fnMutar(p), Estrategias.Intercambio: lambda p, i, o: - _intercambiar(p.Genes, i, o, obtener_aptitud, intercambiar, fnMudar, + _intercambiar(p.Genes, i, o, obtener_aptitud, intercambiar, fnMutar, fnGenerarPadre) } @@ -101,7 +101,7 @@ def fnNuevoNiño(padre, índice, padres): return random.choice(estrategiasUsadas)(padre, índice, padres) else: def fnNuevoNiño(padre, índice, padres): - return fnMudar(padre) + return fnMutar(padre) for mejora in _obtener_mejoras(fnNuevoNiño, fnGenerarPadre, edadMáxima, tamañoDePiscina): diff --git a/es/ch12/vendedor.py b/es/ch12/vendedor.py index 65ce9cc..138b8b5 100644 --- a/es/ch12/vendedor.py +++ b/es/ch12/vendedor.py @@ -52,7 +52,7 @@ def obtener_distancia(ubicaciónA, ubicaciónB): return ladoC -def mudar(genes, fnObtenerAptitud): +def mutar(genes, fnObtenerAptitud): cuenta = random.randint(2, len(genes)) aptitudInicial = fnObtenerAptitud(genes) while cuenta > 0: @@ -145,8 +145,8 @@ def fnMostrar(candidato): def fnObtenerAptitud(genes): return obtener_aptitud(genes, búsquedaDeUbicación) - def fnMudar(genes): - mudar(genes, fnObtenerAptitud) + def fnMutar(genes): + mutar(genes, fnObtenerAptitud) def fnIntercambio(padre, donante): return intercambiar(padre, donante, fnObtenerAptitud) @@ -154,7 +154,7 @@ def fnIntercambio(padre, donante): aptitudÓptima = fnObtenerAptitud(secuenciaÓptima) horaInicio = datetime.datetime.now() mejor = genetic.obtener_mejor(fnObtenerAptitud, None, aptitudÓptima, - None, fnMostrar, fnMudar, fnCrear, + None, fnMostrar, fnMutar, fnCrear, edadMáxima=500, tamañoDePiscina=25, intercambiar=fnIntercambio) self.assertTrue(not aptitudÓptima > mejor.Aptitud) diff --git a/es/ch13/genetic.py b/es/ch13/genetic.py index e42a1ed..b439082 100644 --- a/es/ch13/genetic.py +++ b/es/ch13/genetic.py @@ -33,7 +33,7 @@ def _generar_padre(longitud, geneSet, obtener_aptitud): return Cromosoma(genes, aptitud, Estrategias.Creación) -def _mudar(padre, geneSet, obtener_aptitud): +def _mutar(padre, geneSet, obtener_aptitud): genesDelNiño = padre.Genes[:] índice = random.randrange(0, len(padre.Genes)) nuevoGen, alterno = random.sample(geneSet, 2) @@ -43,7 +43,7 @@ def _mudar(padre, geneSet, obtener_aptitud): return Cromosoma(genesDelNiño, aptitud, Estrategias.Mutación) -def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): +def _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud): genesDelNiño = padre.Genes[:] mutación_personalizada(genesDelNiño) aptitud = obtener_aptitud(genesDelNiño) @@ -51,7 +51,7 @@ def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): def _intercambiar(genesDePadre, índice, padres, obtener_aptitud, intercambiar, - mudar, generar_padre): + mutar, generar_padre): índiceDeDonante = random.randrange(0, len(padres)) if índiceDeDonante == índice: índiceDeDonante = (índiceDeDonante + 1) % len(padres) @@ -59,7 +59,7 @@ def _intercambiar(genesDePadre, índice, padres, obtener_aptitud, intercambiar, if genesDelNiño is None: # padre y donante son indistinguibles padres[índiceDeDonante] = generar_padre() - return mudar(padres[índice]) + return mutar(padres[índice]) aptitud = obtener_aptitud(genesDelNiño) return Cromosoma(genesDelNiño, aptitud, Estrategias.Intercambio) @@ -69,11 +69,11 @@ def obtener_mejor(obtener_aptitud, longitudObjetivo, aptitudÓptima, geneSet, creación_personalizada=None, edadMáxima=None, tamañoDePiscina=1, intercambiar=None, segundosMáximos=None): if mutación_personalizada is None: - def fnMudar(padre): - return _mudar(padre, geneSet, obtener_aptitud) + def fnMutar(padre): + return _mutar(padre, geneSet, obtener_aptitud) else: - def fnMudar(padre): - return _mudar_personalizada(padre, mutación_personalizada, + def fnMutar(padre): + return _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud) if creación_personalizada is None: @@ -87,9 +87,9 @@ def fnGenerarPadre(): búsquedaDeEstrategia = { Estrategias.Creación: lambda p, i, o: fnGenerarPadre(), - Estrategias.Mutación: lambda p, i, o: fnMudar(p), + Estrategias.Mutación: lambda p, i, o: fnMutar(p), Estrategias.Intercambio: lambda p, i, o: - _intercambiar(p.Genes, i, o, obtener_aptitud, intercambiar, fnMudar, + _intercambiar(p.Genes, i, o, obtener_aptitud, intercambiar, fnMutar, fnGenerarPadre) } @@ -101,7 +101,7 @@ def fnNuevoNiño(padre, índice, padres): return random.choice(estrategiasUsadas)(padre, índice, padres) else: def fnNuevoNiño(padre, índice, padres): - return fnMudar(padre) + return fnMutar(padre) for caducado, mejora in \ _obtener_mejoras(fnNuevoNiño, fnGenerarPadre, edadMáxima, diff --git a/es/ch13/pi.py b/es/ch13/pi.py index b5b5e96..b15cbb0 100644 --- a/es/ch13/pi.py +++ b/es/ch13/pi.py @@ -61,7 +61,7 @@ def obtener_denominador(genes, valoresDeBits): return bits_a_entero(genes[len(valoresDeBits):], valoresDeBits) -def mudar(genes, numBits): +def mutar(genes, numBits): índiceDelNumerador, índiceDelDenominador \ = random.randrange(0, numBits), random.randrange(numBits, len(genes)) @@ -83,13 +83,13 @@ def fnObtenerAptitud(genes): aptitudÓptima = 3.14159 - def fnMudar(genes): - mudar(genes, len(valoresDeBits)) + def fnMutar(genes): + mutar(genes, len(valoresDeBits)) longitud = 2 * len(valoresDeBits) mejor = genetic.obtener_mejor(fnObtenerAptitud, longitud, aptitudÓptima, geneSet, fnMostrar, - fnMudar, edadMáxima=250, + fnMutar, edadMáxima=250, segundosMáximos=segundosMáximos) return aptitudÓptima <= mejor.Aptitud diff --git a/es/ch14/ecuaciones.py b/es/ch14/ecuaciones.py index 3466cc0..ffc76ca 100644 --- a/es/ch14/ecuaciones.py +++ b/es/ch14/ecuaciones.py @@ -81,7 +81,7 @@ def crear(números, operaciones, númerosMin, númerosMax): return genes -def mudar(genes, números, operaciones, númerosMin, númerosMax, +def mutar(genes, números, operaciones, númerosMin, númerosMax, fnObtenerAptitud): cuenta = random.randint(1, 10) aptitudInicial = fnObtenerAptitud(genes) @@ -159,13 +159,13 @@ def fnObtenerAptitud(genes): def fnCrear(): return crear(números, operaciones, númerosMin, númerosMax) - def fnMudar(niño): - mudar(niño, números, operaciones, númerosMin, númerosMax, + def fnMutar(niño): + mutar(niño, números, operaciones, númerosMin, númerosMax, fnObtenerAptitud) aptitudÓptima = fnObtenerAptitud(soluciónDeLongitudÓptima) mejor = genetic.obtener_mejor(fnObtenerAptitud, None, aptitudÓptima, - None, fnMostrar, fnMudar, fnCrear, + None, fnMostrar, fnMutar, fnCrear, edadMáxima=50) self.assertTrue(not aptitudÓptima > mejor.Aptitud) diff --git a/es/ch15/pruebas.py b/es/ch15/pruebas.py index 4a009c4..81e931a 100644 --- a/es/ch15/pruebas.py +++ b/es/ch15/pruebas.py @@ -38,7 +38,7 @@ def mostrar(candidato, horaInicio, fnEvaluar): programa.print() -def mudar(genes, geneSet, mínGenes, máxGenes, fnObtenerAptitud, rondasMáximas): +def mutar(genes, geneSet, mínGenes, máxGenes, fnObtenerAptitud, rondasMáximas): cuenta = random.randint(1, rondasMáximas) aptitudInicial = fnObtenerAptitud(genes) while cuenta > 0: @@ -232,8 +232,8 @@ def fnObtenerAptitud(genes): def fnMostrar(candidato): mostrar(candidato, horaInicio, fnEvaluar) - def fnMudar(niño): - mudar(niño, geneSet, mínGenes, máxGenes, fnObtenerAptitud, + def fnMutar(niño): + mutar(niño, geneSet, mínGenes, máxGenes, fnObtenerAptitud, rondasMáximasDeMutación) aptitudÓptima = Aptitud(anchura * altura, @@ -241,7 +241,7 @@ def fnMudar(niño): númeroEsperadoDePasos) mejor = genetic.obtener_mejor(fnObtenerAptitud, None, aptitudÓptima, - None, fnMostrar, fnMudar, fnCrear, + None, fnMostrar, fnMutar, fnCrear, edadMáxima=None, tamañoDePiscina=10, intercambiar=intercambiar) diff --git a/es/ch16/genetic.py b/es/ch16/genetic.py index 7b4c155..a0af7fc 100644 --- a/es/ch16/genetic.py +++ b/es/ch16/genetic.py @@ -33,7 +33,7 @@ def _generar_padre(longitud, geneSet, obtener_aptitud): return Cromosoma(genes, aptitud, Estrategias.Creación) -def _mudar(padre, geneSet, obtener_aptitud): +def _mutar(padre, geneSet, obtener_aptitud): genesDelNiño = padre.Genes[:] índice = random.randrange(0, len(padre.Genes)) nuevoGen, alterno = random.sample(geneSet, 2) @@ -43,7 +43,7 @@ def _mudar(padre, geneSet, obtener_aptitud): return Cromosoma(genesDelNiño, aptitud, Estrategias.Mutación) -def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): +def _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud): genesDelNiño = padre.Genes[:] mutación_personalizada(genesDelNiño) aptitud = obtener_aptitud(genesDelNiño) @@ -51,7 +51,7 @@ def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): def _intercambiar(genesDePadre, índice, padres, obtener_aptitud, intercambiar, - mudar, generar_padre): + mutar, generar_padre): índiceDeDonante = random.randrange(0, len(padres)) if índiceDeDonante == índice: índiceDeDonante = (índiceDeDonante + 1) % len(padres) @@ -59,7 +59,7 @@ def _intercambiar(genesDePadre, índice, padres, obtener_aptitud, intercambiar, if genesDelNiño is None: # padre y donante son indistinguibles padres[índiceDeDonante] = generar_padre() - return mudar(padres[índice]) + return mutar(padres[índice]) aptitud = obtener_aptitud(genesDelNiño) return Cromosoma(genesDelNiño, aptitud, Estrategias.Intercambio) @@ -69,11 +69,11 @@ def obtener_mejor(obtener_aptitud, longitudObjetivo, aptitudÓptima, geneSet, creación_personalizada=None, edadMáxima=None, tamañoDePiscina=1, intercambiar=None, segundosMáximos=None): if mutación_personalizada is None: - def fnMudar(padre): - return _mudar(padre, geneSet, obtener_aptitud) + def fnMutar(padre): + return _mutar(padre, geneSet, obtener_aptitud) else: - def fnMudar(padre): - return _mudar_personalizada(padre, mutación_personalizada, + def fnMutar(padre): + return _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud) if creación_personalizada is None: @@ -87,9 +87,9 @@ def fnGenerarPadre(): búsquedaDeEstrategia = { Estrategias.Creación: lambda p, i, o: fnGenerarPadre(), - Estrategias.Mutación: lambda p, i, o: fnMudar(p), + Estrategias.Mutación: lambda p, i, o: fnMutar(p), Estrategias.Intercambio: lambda p, i, o: - _intercambiar(p.Genes, i, o, obtener_aptitud, intercambiar, fnMudar, + _intercambiar(p.Genes, i, o, obtener_aptitud, intercambiar, fnMutar, fnGenerarPadre) } @@ -101,7 +101,7 @@ def fnNuevoNiño(padre, índice, padres): return random.choice(estrategiasUsadas)(padre, índice, padres) else: def fnNuevoNiño(padre, índice, padres): - return fnMudar(padre) + return fnMutar(padre) for caducado, mejora in _obtener_mejoras(fnNuevoNiño, fnGenerarPadre, edadMáxima, tamañoDePiscina, diff --git a/es/ch16/pruebas.py b/es/ch16/pruebas.py index fd3540a..d11f6a8 100644 --- a/es/ch16/pruebas.py +++ b/es/ch16/pruebas.py @@ -60,7 +60,7 @@ def crear_gen(índice, puertas, fuentes): return Nodo(tipoDePuerta[0], índiceA, índiceB) -def mudar(genesDelNiño, fnCrearGen, fnObtenerAptitud, fuenteCount): +def mutar(genesDelNiño, fnCrearGen, fnObtenerAptitud, fuenteCount): cuenta = random.randint(1, 5) aptitudInicial = fnObtenerAptitud(genesDelNiño) while cuenta > 0: @@ -173,8 +173,8 @@ def fnObtenerAptitud(genes): def fnCrearGen(índice): return crear_gen(índice, self.puertas, self.fuentes) - def fnMudar(genes): - mudar(genes, fnCrearGen, fnObtenerAptitud, len(self.fuentes)) + def fnMutar(genes): + mutar(genes, fnCrearGen, fnObtenerAptitud, len(self.fuentes)) longitudMáxima = 50 @@ -186,7 +186,7 @@ def fnFunciónDeOptimización(longitudVariable): longitudMáxima = longitudVariable return genetic.obtener_mejor( fnObtenerAptitud, None, len(reglas), None, fnMostrar, - fnMudar, fnCrear, tamañoDePiscina=3, segundosMáximos=30) + fnMutar, fnCrear, tamañoDePiscina=3, segundosMáximos=30) def fnEsUnaMejora(mejorActual, niño): return niño.Aptitud == len(reglas) and \ diff --git a/es/ch17/regex.py b/es/ch17/regex.py index fe8aa50..f29d61f 100644 --- a/es/ch17/regex.py +++ b/es/ch17/regex.py @@ -131,13 +131,13 @@ def mostrar(candidato, horaInicio): reparar_regex(candidato.Genes), candidato.Aptitud, diferencia)) -def mudar_añadir(genes, geneSet): +def mutar_añadir(genes, geneSet): índice = random.randrange(0, len(genes) + 1) if len(genes) > 0 else 0 genes[índice:índice] = [random.choice(geneSet)] return True -def mudar_remover(genes): +def mutar_remover(genes): if len(genes) < 1: return False del genes[random.randrange(0, len(genes))] @@ -146,7 +146,7 @@ def mudar_remover(genes): return True -def mudar_reemplazar(genes, geneSet): +def mutar_reemplazar(genes, geneSet): if len(genes) < 1: return False índice = random.randrange(0, len(genes)) @@ -154,7 +154,7 @@ def mudar_reemplazar(genes, geneSet): return True -def mudar_intercambiar(genes): +def mutar_intercambiar(genes): if len(genes) < 2: return False índiceA, índiceB = random.sample(range(len(genes)), 2) @@ -162,7 +162,7 @@ def mudar_intercambiar(genes): return True -def mudar_mover(genes): +def mutar_mover(genes): if len(genes) < 3: return False principio = random.choice(range(len(genes))) @@ -176,7 +176,7 @@ def mudar_mover(genes): return True -def mudar_a_conjunto_de_caracteres(genes): +def mutar_a_conjunto_de_caracteres(genes): if len(genes) < 3: return False o = [i for i in range(1, len(genes) - 1) @@ -197,7 +197,7 @@ def mudar_a_conjunto_de_caracteres(genes): return True -def mudar_a_conjunto_de_caracteres_izquierda(genes, deseadas): +def mutar_a_conjunto_de_caracteres_izquierda(genes, deseadas): if len(genes) < 4: return False o = [i for i in range(-1, len(genes) - 3) @@ -225,13 +225,13 @@ def mudar_a_conjunto_de_caracteres_izquierda(genes, deseadas): return True -def mudar_add_deseadas(genes, deseadas): +def mutar_add_deseadas(genes, deseadas): índice = random.randrange(0, len(genes) + 1) if len(genes) > 0 else 0 genes[índice:índice] = ['|'] + [random.choice(deseadas)] return True -def mudar(genes, fnObtenerAptitud, operadoresDeMutación, recuentoDeMutaciones): +def mutar(genes, fnObtenerAptitud, operadoresDeMutación, recuentoDeMutaciones): aptitudInicial = fnObtenerAptitud(genes) cuenta = random.choice(recuentoDeMutaciones) for i in range(1, cuenta + 2): @@ -262,7 +262,7 @@ def test_códigos_de_estado(self): noDeseadas = {"N" + l for l in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" if "N" + l not in deseadas} operadoresPersonalizados = [ - partial(mudar_a_conjunto_de_caracteres_izquierda, + partial(mutar_a_conjunto_de_caracteres_izquierda, deseadas=deseadas), ] self.encontrar_regex(deseadas, noDeseadas, 11, @@ -275,7 +275,7 @@ def test_longitud_par(self): noDeseadas = {"0", "1", "000", "001", "010", "011", "100", "101", "110", "111", ""} operadoresPersonalizados = [ - mudar_a_conjunto_de_caracteres, + mutar_a_conjunto_de_caracteres, ] self.encontrar_regex(deseadas, noDeseadas, 10, operadoresPersonalizados) @@ -297,10 +297,10 @@ def test_50_códigos_de_estado(self): if a + b not in deseadas} | \ set(i for i in "ABCDEFGHIJKLMNOPQRSTUVWXYZ") operadoresPersonalizados = [ - partial(mudar_a_conjunto_de_caracteres_izquierda, + partial(mutar_a_conjunto_de_caracteres_izquierda, deseadas=deseadas), - mudar_a_conjunto_de_caracteres, - partial(mudar_add_deseadas, deseadas=[i for i in deseadas]), + mutar_a_conjunto_de_caracteres, + partial(mutar_add_deseadas, deseadas=[i for i in deseadas]), ] self.encontrar_regex(deseadas, noDeseadas, 120, operadoresPersonalizados) @@ -320,17 +320,17 @@ def fnObtenerAptitud(genes): recuentoDeMutaciones = [1] operadoresDeMutación = [ - partial(mudar_añadir, geneSet=geneSet), - partial(mudar_reemplazar, geneSet=geneSet), - mudar_remover, - mudar_intercambiar, - mudar_mover, + partial(mutar_añadir, geneSet=geneSet), + partial(mutar_reemplazar, geneSet=geneSet), + mutar_remover, + mutar_intercambiar, + mutar_mover, ] if operadoresPersonalizados is not None: operadoresDeMutación.extend(operadoresPersonalizados) - def fnMudar(genes): - mudar(genes, fnObtenerAptitud, operadoresDeMutación, + def fnMutar(genes): + mutar(genes, fnObtenerAptitud, operadoresDeMutación, recuentoDeMutaciones) aptitudÓptima = Aptitud(len(deseadas), len(deseadas), 0, @@ -338,7 +338,7 @@ def fnMudar(genes): mejor = genetic.obtener_mejor( fnObtenerAptitud, max(len(i) for i in genesDeTexto), - aptitudÓptima, geneSet, fnMostrar, fnMudar, tamañoDePiscina=10) + aptitudÓptima, geneSet, fnMostrar, fnMutar, tamañoDePiscina=10) self.assertTrue(not aptitudÓptima > mejor.Aptitud) for info in erroresEnRegexes.values(): @@ -381,7 +381,7 @@ def __gt__(self, otro): return self.Longitud < otro.Longitud def __str__(self): - return "coincide con: {} deseadas y, {} no deseadas, lon {}".format( + return "coincide con: {} deseadas, y {} no deseadas, lon {}".format( "todas" if self._totalDeseado == self.NúmeroDeDeseadosQueCoincidieron else self.NúmeroDeDeseadosQueCoincidieron, diff --git a/es/ch18/genetic.py b/es/ch18/genetic.py index 5915205..321ca6d 100644 --- a/es/ch18/genetic.py +++ b/es/ch18/genetic.py @@ -34,7 +34,7 @@ def _generar_padre(longitud, geneSet, obtener_aptitud): return Cromosoma(genes, aptitud, Estrategias.Creación) -def _mudar(padre, geneSet, obtener_aptitud): +def _mutar(padre, geneSet, obtener_aptitud): genesDelNiño = padre.Genes[:] índice = random.randrange(0, len(padre.Genes)) nuevoGen, alterno = random.sample(geneSet, 2) @@ -44,7 +44,7 @@ def _mudar(padre, geneSet, obtener_aptitud): return Cromosoma(genesDelNiño, aptitud, Estrategias.Mutación) -def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): +def _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud): genesDelNiño = padre.Genes[:] mutación_personalizada(genesDelNiño) aptitud = obtener_aptitud(genesDelNiño) @@ -52,7 +52,7 @@ def _mudar_personalizada(padre, mutación_personalizada, obtener_aptitud): def _intercambiar(genesDePadre, índice, padres, obtener_aptitud, intercambiar, - mudar, generar_padre): + mutar, generar_padre): índiceDeDonante = random.randrange(0, len(padres)) if índiceDeDonante == índice: índiceDeDonante = (índiceDeDonante + 1) % len(padres) @@ -60,7 +60,7 @@ def _intercambiar(genesDePadre, índice, padres, obtener_aptitud, intercambiar, if genesDelNiño is None: # padre y donante son indistinguibles padres[índiceDeDonante] = generar_padre() - return mudar(padres[índice]) + return mutar(padres[índice]) aptitud = obtener_aptitud(genesDelNiño) return Cromosoma(genesDelNiño, aptitud, Estrategias.Intercambio) @@ -70,11 +70,11 @@ def obtener_mejor(obtener_aptitud, longitudObjetivo, aptitudÓptima, geneSet, creación_personalizada=None, edadMáxima=None, tamañoDePiscina=1, intercambiar=None, segundosMáximos=None): if mutación_personalizada is None: - def fnMudar(padre): - return _mudar(padre, geneSet, obtener_aptitud) + def fnMutar(padre): + return _mutar(padre, geneSet, obtener_aptitud) else: - def fnMudar(padre): - return _mudar_personalizada(padre, mutación_personalizada, + def fnMutar(padre): + return _mutar_personalizada(padre, mutación_personalizada, obtener_aptitud) if creación_personalizada is None: @@ -88,9 +88,9 @@ def fnGenerarPadre(): búsquedaDeEstrategia = { Estrategias.Creación: lambda p, i, o: fnGenerarPadre(), - Estrategias.Mutación: lambda p, i, o: fnMudar(p), + Estrategias.Mutación: lambda p, i, o: fnMutar(p), Estrategias.Intercambio: lambda p, i, o: - _intercambiar(p.Genes, i, o, obtener_aptitud, intercambiar, fnMudar, + _intercambiar(p.Genes, i, o, obtener_aptitud, intercambiar, fnMutar, fnGenerarPadre) } @@ -102,7 +102,7 @@ def fnNuevoNiño(padre, índice, padres): return random.choice(estrategiasUsadas)(padre, índice, padres) else: def fnNuevoNiño(padre, índice, padres): - return fnMudar(padre) + return fnMutar(padre) for caducado, mejora in _obtener_mejoras( fnNuevoNiño, fnGenerarPadre, edadMáxima, tamañoDePiscina, diff --git a/es/ch18/ticTacToe.py b/es/ch18/ticTacToe.py index 4b3ce0d..eb8ea4a 100644 --- a/es/ch18/ticTacToe.py +++ b/es/ch18/ticTacToe.py @@ -161,13 +161,13 @@ def mostrar(candidato, horaInicio): diferencia)) -def mudar_añadir(genes, geneSet): +def mutar_añadir(genes, geneSet): índice = random.randrange(0, len(genes) + 1) if len(genes) > 0 else 0 genes[índice:índice] = [random.choice(geneSet)] return True -def mudar_remover(genes): +def mutar_remover(genes): if len(genes) < 1: return False del genes[random.randrange(0, len(genes))] @@ -176,7 +176,7 @@ def mudar_remover(genes): return True -def mudar_reemplazar(genes, geneSet): +def mutar_reemplazar(genes, geneSet): if len(genes) < 1: return False índice = random.randrange(0, len(genes)) @@ -184,7 +184,7 @@ def mudar_reemplazar(genes, geneSet): return True -def mudar_intercambiar_adyacente(genes): +def mutar_intercambiar_adyacente(genes): if len(genes) < 2: return False índice = random.choice(range(len(genes) - 1)) @@ -192,7 +192,7 @@ def mudar_intercambiar_adyacente(genes): return True -def mudar_mover(genes): +def mutar_mover(genes): if len(genes) < 3: return False principio = random.choice(range(len(genes))) @@ -206,7 +206,7 @@ def mudar_mover(genes): return True -def mudar(genes, fnObtenerAptitud, operadoresDeMutación, recuentoDeMutaciones): +def mutar(genes, fnObtenerAptitud, operadoresDeMutación, recuentoDeMutaciones): aptitudInicial = fnObtenerAptitud(genes) cuenta = random.choice(recuentoDeMutaciones) for i in range(1, cuenta + 2): @@ -276,20 +276,20 @@ def fnObtenerAptitud(genes): recuentoDeMutaciones = [1] operadoresDeMutación = [ - partial(mudar_añadir, geneSet=geneSet), - partial(mudar_reemplazar, geneSet=geneSet), - mudar_remover, - mudar_intercambiar_adyacente, - mudar_mover, + partial(mutar_añadir, geneSet=geneSet), + partial(mutar_reemplazar, geneSet=geneSet), + mutar_remover, + mutar_intercambiar_adyacente, + mutar_mover, ] - def fnMudar(genes): - mudar(genes, fnObtenerAptitud, operadoresDeMutación, recuentoDeMutaciones) + def fnMutar(genes): + mutar(genes, fnObtenerAptitud, operadoresDeMutación, recuentoDeMutaciones) def fnIntercambio(padre, donante): niño = padre[0:int(len(padre) / 2)] + \ donante[int(len(donante) / 2):] - fnMudar(niño) + fnMutar(niño) return niño def fnCrear(): @@ -297,7 +297,7 @@ def fnCrear(): aptitudÓptima = Aptitud(620, 120, 0, 11) mejor = genetic.obtener_mejor(fnObtenerAptitud, mínGenes, aptitudÓptima, None, - fnMostrar, fnMudar, fnCrear, edadMáxima=500, + fnMostrar, fnMutar, fnCrear, edadMáxima=500, tamañoDePiscina=20, intercambiar=fnIntercambio) self.assertTrue(not aptitudÓptima > mejor.Aptitud) @@ -316,20 +316,20 @@ def fnMostrar(genes, ganados, empates, perdidos, generación): recuentoDeMutaciones = [1] operadoresDeMutación = [ - partial(mudar_añadir, geneSet=geneSet), - partial(mudar_reemplazar, geneSet=geneSet), - mudar_remover, - mudar_intercambiar_adyacente, - mudar_mover, + partial(mutar_añadir, geneSet=geneSet), + partial(mutar_reemplazar, geneSet=geneSet), + mutar_remover, + mutar_intercambiar_adyacente, + mutar_mover, ] - def fnMudar(genes): - mudar(genes, lambda x: 0, operadoresDeMutación, recuentoDeMutaciones) + def fnMutar(genes): + mutar(genes, lambda x: 0, operadoresDeMutación, recuentoDeMutaciones) def fnIntercambio(padre, donante): niño = padre[0:int(len(padre) / 2)] + \ donante[int(len(donante) / 2):] - fnMudar(niño) + fnMutar(niño) return niño def fnCrear(): From 6e0d2416e070f22a35c1650834d80ce6381e6c2b Mon Sep 17 00:00:00 2001 From: handcraftsman Date: Thu, 2 May 2019 17:16:34 -0500 Subject: [PATCH 2/7] fix inefficiency reported by Piotr.Lewczuk@uk-erlangen.de --- ch08/genetic.py | 3 +-- ch12/genetic.py | 3 +-- ch13/genetic.py | 3 +-- ch16/genetic.py | 3 +-- ch18/genetic.py | 3 +-- es/ch08/genetic.py | 3 +-- es/ch12/genetic.py | 3 +-- es/ch13/genetic.py | 3 +-- es/ch15/genetic.py | 3 +-- es/ch16/genetic.py | 3 +-- es/ch18/genetic.py | 3 +-- 11 files changed, 11 insertions(+), 22 deletions(-) diff --git a/ch08/genetic.py b/ch08/genetic.py index 875bbd7..189107d 100644 --- a/ch08/genetic.py +++ b/ch08/genetic.py @@ -85,8 +85,7 @@ def _get_improvement(new_child, generate_parent, maxAge): continue index = bisect_left(historicalFitnesses, child.Fitness, 0, len(historicalFitnesses)) - difference = len(historicalFitnesses) - index - proportionSimilar = difference / len(historicalFitnesses) + proportionSimilar = index / len(historicalFitnesses) if random.random() < exp(-proportionSimilar): parent = child continue diff --git a/ch12/genetic.py b/ch12/genetic.py index dc5c89c..5ee0ea9 100644 --- a/ch12/genetic.py +++ b/ch12/genetic.py @@ -134,8 +134,7 @@ def _get_improvement(new_child, generate_parent, maxAge, poolSize): continue index = bisect_left(historicalFitnesses, child.Fitness, 0, len(historicalFitnesses)) - difference = len(historicalFitnesses) - index - proportionSimilar = difference / len(historicalFitnesses) + proportionSimilar = index / len(historicalFitnesses) if random.random() < exp(-proportionSimilar): parents[pindex] = child continue diff --git a/ch13/genetic.py b/ch13/genetic.py index d040846..550b7c2 100644 --- a/ch13/genetic.py +++ b/ch13/genetic.py @@ -143,8 +143,7 @@ def _get_improvement(new_child, generate_parent, maxAge, poolSize, maxSeconds): continue index = bisect_left(historicalFitnesses, child.Fitness, 0, len(historicalFitnesses)) - difference = len(historicalFitnesses) - index - proportionSimilar = difference / len(historicalFitnesses) + proportionSimilar = index / len(historicalFitnesses) if random.random() < exp(-proportionSimilar): parents[pindex] = child continue diff --git a/ch16/genetic.py b/ch16/genetic.py index 16a9841..99c9a3b 100644 --- a/ch16/genetic.py +++ b/ch16/genetic.py @@ -144,8 +144,7 @@ def _get_improvement(new_child, generate_parent, maxAge, poolSize, continue index = bisect_left(historicalFitnesses, child.Fitness, 0, len(historicalFitnesses)) - difference = len(historicalFitnesses) - index - proportionSimilar = difference / len(historicalFitnesses) + proportionSimilar = index / len(historicalFitnesses) if random.random() < exp(-proportionSimilar): parents[pindex] = child continue diff --git a/ch18/genetic.py b/ch18/genetic.py index 7c6d815..01a29de 100644 --- a/ch18/genetic.py +++ b/ch18/genetic.py @@ -145,8 +145,7 @@ def _get_improvement(new_child, generate_parent, maxAge, poolSize, continue index = bisect_left(historicalFitnesses, child.Fitness, 0, len(historicalFitnesses)) - difference = len(historicalFitnesses) - index - proportionSimilar = difference / len(historicalFitnesses) + proportionSimilar = index / len(historicalFitnesses) if random.random() < exp(-proportionSimilar): parents[pindex] = child continue diff --git a/es/ch08/genetic.py b/es/ch08/genetic.py index 1b78da4..059d452 100644 --- a/es/ch08/genetic.py +++ b/es/ch08/genetic.py @@ -88,8 +88,7 @@ def _obtener_mejoras(nuevo_niño, generar_padre, edadMáxima): continue índice = bisect_left(aptitudesHistóricas, niño.Aptitud, 0, len(aptitudesHistóricas)) - diferencia = len(aptitudesHistóricas) - índice - proporciónSimilar = diferencia / len(aptitudesHistóricas) + proporciónSimilar = índice / len(aptitudesHistóricas) if random.random() < exp(-proporciónSimilar): padre = niño continue diff --git a/es/ch12/genetic.py b/es/ch12/genetic.py index c9b249e..d564f8b 100644 --- a/es/ch12/genetic.py +++ b/es/ch12/genetic.py @@ -138,8 +138,7 @@ def _obtener_mejoras(nuevo_niño, generar_padre, edadMáxima, tamañoDePiscina): continue índice = bisect_left(aptitudesHistóricas, niño.Aptitud, 0, len(aptitudesHistóricas)) - diferencia = len(aptitudesHistóricas) - índice - proporciónSimilar = diferencia / len(aptitudesHistóricas) + proporciónSimilar = índice / len(aptitudesHistóricas) if random.random() < exp(-proporciónSimilar): padres[pÍndice] = niño continue diff --git a/es/ch13/genetic.py b/es/ch13/genetic.py index b439082..3591c1c 100644 --- a/es/ch13/genetic.py +++ b/es/ch13/genetic.py @@ -150,8 +150,7 @@ def _obtener_mejoras(nuevo_niño, generar_padre, edadMáxima, tamañoDePiscina, continue índice = bisect_left(aptitudesHistóricas, niño.Aptitud, 0, len(aptitudesHistóricas)) - diferencia = len(aptitudesHistóricas) - índice - proporciónSimilar = diferencia / len(aptitudesHistóricas) + proporciónSimilar = índice / len(aptitudesHistóricas) if random.random() < exp(-proporciónSimilar): padres[pÍndice] = niño continue diff --git a/es/ch15/genetic.py b/es/ch15/genetic.py index 6a00549..9659892 100644 --- a/es/ch15/genetic.py +++ b/es/ch15/genetic.py @@ -150,8 +150,7 @@ def _obtener_mejoras(nuevo_niño, generar_padre, edadMáxima, tamañoDePiscina, continue índice = bisect_left(aptitudesHistóricas, niño.Aptitud, 0, len(aptitudesHistóricas)) - diferencia = len(aptitudesHistóricas) - índice - proporciónSimilar = diferencia / len(aptitudesHistóricas) + proporciónSimilar = índice / len(aptitudesHistóricas) if random.random() < exp(-proporciónSimilar): padres[pÍndice] = niño continue diff --git a/es/ch16/genetic.py b/es/ch16/genetic.py index a0af7fc..e912871 100644 --- a/es/ch16/genetic.py +++ b/es/ch16/genetic.py @@ -150,8 +150,7 @@ def _obtener_mejoras(nuevo_niño, generar_padre, edadMáxima, tamañoDePiscina, continue índice = bisect_left(aptitudesHistóricas, niño.Aptitud, 0, len(aptitudesHistóricas)) - diferencia = len(aptitudesHistóricas) - índice - proporciónSimilar = diferencia / len(aptitudesHistóricas) + proporciónSimilar = índice / len(aptitudesHistóricas) if random.random() < exp(-proporciónSimilar): padres[pÍndice] = niño continue diff --git a/es/ch18/genetic.py b/es/ch18/genetic.py index 321ca6d..4d7506b 100644 --- a/es/ch18/genetic.py +++ b/es/ch18/genetic.py @@ -151,8 +151,7 @@ def _obtener_mejoras(nuevo_niño, generar_padre, edadMáxima, tamañoDePiscina, continue índice = bisect_left(aptitudesHistóricas, niño.Aptitud, 0, len(aptitudesHistóricas)) - diferencia = len(aptitudesHistóricas) - índice - proporciónSimilar = diferencia / len(aptitudesHistóricas) + proporciónSimilar = índice / len(aptitudesHistóricas) if random.random() < exp(-proporciónSimilar): padres[pÍndice] = niño continue From 514b80b44b98df34457e564989598811d986c567 Mon Sep 17 00:00:00 2001 From: handcraftsman Date: Fri, 31 May 2019 18:23:52 -0500 Subject: [PATCH 3/7] fix tabs vs spaces in merged code segment reported by Piotr.Lewczuk@uk-erlangen.de --- ch09/knapsackTests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch09/knapsackTests.py b/ch09/knapsackTests.py index b589088..a1c1e53 100644 --- a/ch09/knapsackTests.py +++ b/ch09/knapsackTests.py @@ -255,8 +255,8 @@ def __init__(self, totalWeight, totalVolume, totalValue): def __gt__(self, other): if self.TotalValue != other.TotalValue: return self.TotalValue > other.TotalValue - if self.TotalWeight != other.TotalWeight: - return self.TotalWeight < other.TotalWeight + if self.TotalWeight != other.TotalWeight: + return self.TotalWeight < other.TotalWeight return self.TotalValue < other.TotalValue def __str__(self): From 322eda59dc9f0acf2e145abaf82fef7dbed7d556 Mon Sep 17 00:00:00 2001 From: handcraftsman Date: Fri, 31 May 2019 19:13:47 -0500 Subject: [PATCH 4/7] change knapsack Fitness to compare Volume last --- ch09/knapsackTests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ch09/knapsackTests.py b/ch09/knapsackTests.py index a1c1e53..2f7ac5f 100644 --- a/ch09/knapsackTests.py +++ b/ch09/knapsackTests.py @@ -254,10 +254,10 @@ def __init__(self, totalWeight, totalVolume, totalValue): def __gt__(self, other): if self.TotalValue != other.TotalValue: - return self.TotalValue > other.TotalValue + return self.TotalValue > other.TotalValue if self.TotalWeight != other.TotalWeight: return self.TotalWeight < other.TotalWeight - return self.TotalValue < other.TotalValue + return self.TotalVolume < other.TotalVolume def __str__(self): return "wt: {:0.2f} vol: {:0.2f} value: {}".format( From 2a71f2882b0ecad1ba692d3bf9bc74ce9d02b37d Mon Sep 17 00:00:00 2001 From: handcraftsman Date: Fri, 21 Jun 2019 08:58:22 -0500 Subject: [PATCH 5/7] prevent FutureWarning about || inside a [..] regex --- ch17/regexTests.py | 2 ++ es/ch17/regex.py | 2 ++ 2 files changed, 4 insertions(+) diff --git a/ch17/regexTests.py b/ch17/regexTests.py index 39d654d..63bc94b 100644 --- a/ch17/regexTests.py +++ b/ch17/regexTests.py @@ -96,6 +96,8 @@ def repair_in_character_set(token, result, finals): return repair_ignore_repeat_metas_following_repeat_or_start_metas elif token == '[': pass + elif token == '|' and result[-1] == '|': + pass # suppresses FutureWarning about || else: result.append(token) return repair_in_character_set diff --git a/es/ch17/regex.py b/es/ch17/regex.py index f29d61f..8e5cd61 100644 --- a/es/ch17/regex.py +++ b/es/ch17/regex.py @@ -95,6 +95,8 @@ def reparar_in_character_set(símbolo, resultado, finales): return manejar_metas_de_repetición_que_siguen_metas_de_repetición_o_inicio elif símbolo == '[': pass + elif símbolo == '|' and resultado[-1] == '|': + pass # suprimir FutureWarning sobre || else: resultado.append(símbolo) return reparar_in_character_set From 565e405ad0df8d3c360cfc9c335dbacfcc3041c0 Mon Sep 17 00:00:00 2001 From: ErfanThinker Date: Sat, 4 Jul 2020 11:32:32 +0430 Subject: [PATCH 6/7] Removed redundant condition --- ch16/circuitTests.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ch16/circuitTests.py b/ch16/circuitTests.py index 5e139b6..1f53295 100644 --- a/ch16/circuitTests.py +++ b/ch16/circuitTests.py @@ -53,8 +53,7 @@ def create_gene(index, gates, sources): if gateType[1].input_count() > 0: indexA = random.randint(0, index) if gateType[1].input_count() > 1: - indexB = random.randint(0, index) \ - if index > 1 and index >= len(sources) else 0 + indexB = random.randint(0, index) if indexB == indexA: indexB = random.randint(0, index) return Node(gateType[0], indexA, indexB) From 2359440659559fae56b156fe30320b5f5f9a77ee Mon Sep 17 00:00:00 2001 From: handcraftsman Date: Tue, 7 Jul 2020 07:36:56 -0500 Subject: [PATCH 7/7] make ErfanThinker's change in the Spanish version --- es/ch16/pruebas.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/es/ch16/pruebas.py b/es/ch16/pruebas.py index d11f6a8..03a1a8d 100644 --- a/es/ch16/pruebas.py +++ b/es/ch16/pruebas.py @@ -53,8 +53,7 @@ def crear_gen(índice, puertas, fuentes): if tipoDePuerta[1].recuento_de_entradas() > 0: índiceA = random.randint(0, índice) if tipoDePuerta[1].recuento_de_entradas() > 1: - índiceB = random.randint(0, índice) \ - if índice > 1 and índice >= len(fuentes) else 0 + índiceB = random.randint(0, índice) if índiceB == índiceA: índiceB = random.randint(0, índice) return Nodo(tipoDePuerta[0], índiceA, índiceB)