Рубрики
Без рубрики

Breve inventución A Algoritmos Genéticos

(EL ConteniDo También SE Encuentra Devologiable en formato de ipython ноутбук) ¿ Qué es un al … помеченный машиной обучения, наукой данных, Python.

(EL ConteniDo También SE Encuentra Devolible EN Formationo de Ноутбук ipython Несомненно

¿ Qué es en algoritmo genético?

ООН Algoritmo Genético es un método Para Resolver ООН Ascomea Inspirado El El Preceso de Selección Natural Простое Пор Чарльз Дарвин:

Поскольку рождаются еще больше людей каждого вида, чем могут выжить; И как, следовательно, наблюдается часто повторяющаяся борьба за существование, то следует, что любое существо, если он варьируется, однако, слегка, любым способом выгодным для себя, при сложном и иногда различных условиях жизни, будет иметь лучшую вероятность выживания, и таким образом быть естественным образом выбранным. От прочного принципа наследования, любой выбранный сорт будет иметь тенденцию распространять свою новую и модифицированную форму

Hay Mostas Variaciones de Dichos Algoritmos Pero Todos Siguen A Grandes Rasgos Est Patron:

  1. Generar Una Población de Shistuos (O Croomosomas EN EL LÉCICO DE LOS ALGORITMOS GENÉTICOS)

  2. Evaluar Los Shouthuos de La Población POR UNA MÉTRICA DE APTITUD (CONOCIDO COMO Фитнес )

  3. Sólo Quedarse con los n sujetos de la población Мас Аптос

  4. Crage Una Nueva Generación de Indeir de los más aptos través de:

    1. Кросс-разведение: «Cruza» Entre Shateuos
    2. Мутации: Mutaciones Aleatorias
  5. Вольвер a PASO 2 у репетих

¿ Qué Flanceas Se PuEden Resolver?

Los Flaneas Atacados POR ESTOS ALGORITMOS SON EN General de Optimización de Funciones (Más Adelante Veremos Como Ezto SE Puede Hevelizar Солюкоина Más Intersantes), POR EJEMPLO, Dada Una Función:

Y – 2x ^ 2

def f(x): return 8 * x - 2 * x**2 

Nos Interesaría Encontrar El Punto Máximo, Es Decir El Valor de х Que Maximiza y .

Vamos A USAR UN ALGORITMO Genético Para Esto, Apoyándonos en la Либлирури EVOL de python.

PASO 1: Primera Generación

PARA Comenzar TeneMos que Armar Una Primera Generación de Sidealuos o Croomosomas, En Este Caso Los Sideuos Serían Dantintos Valores de х Отказ

Imaginemos que no sabemos dónde está el máximo de la función pero tenemos una vaga идея de EN QUÉ RANGO PUEDE ESSAR Отказ Para Este Ejemplo Vamos Suponer Que El Valor Está entre-1.000.000 (Менос ООН Милн) y 1.000.000 (ООН Милн).

Nuestra Primera Generación Tomará Valores Aleatorios ru Este Internalo:

np.random.seed(1234) # make results reproducible.


def random_guy(): return np.random.randint(low=-1_000_000, high=1_000_000)


initial_generation_size = 100
first_generation = [random_guy() for _ in range(initial_generation_size)]

Con Esto PodeMos Crag Nuestro objeto Население Отказ También Le Pasamos La Función A Optimizar ($ f (x) $ diphidida más arriba) y le aclaramos a эволь Si La Idey Es Maximizar O Minimizar Dicha Función:

pop = Population(chromosomes=first_generation, eval_function=f, maximize=True)

Супервинция дель Мас Апти

De nuestra población iniacy queremos quedarnos sólo con el 10% que mejor partó, los más aptos. Para Esto TeneMos La Función выжить :

survivors = pop.survive(fraction=0.1)

Crosbreeding Y Mataciones

Con Los Sobrevivientes Vamos a Crage Una Nueva Generación, Producto de разведение у мутации алеатории.

Para Esto TeneMos que deforiar tres funciones:

1) Una Para ElegiR DOS PADRES DEL CONVUNTO DE SUPPERIVIEDES (LO HAREMOS AL AZAR)

2) OTRA PARA DEFIR Cómo DOS Industuose de la Población Crean On Nuevo Industuo 😏

3) Una última Para Detrinisar Las Mutaciones Aleatorias

Образование:

def pick_parents(population):
    mom, dad = np.random.choice(population, size=2)
    return mom, dad


# the child is the mean between two parents.
def make_child(mom, dad):
    return (mom + dad) / 2


# add gaussian noise with mean zero.
def random_noise(individual, sigma):
    noise = np.random.normal(loc=0, scale=10) * sigma
    return individual + noise


new_generation = survivors.breed(parent_picker=pick_parents, combiner=make_child).mutate(random_noise, sigma=1)

Это эволюция, детка

CON La Nueva Generación PodeMos Repetir El Preceso Indefinideamente (Seleccionar, Cruzar, Mutar).

Vamos Hacerlo Unas Cuantas Veces y nos quedamos con el Shatuo más apto de Cada Generación:

def fittest(generation):
    fit = sorted(generation.evaluate(), key=lambda x: x.fitness)[-1]
    return fit.chromosome


generations = 120
fittest_of_each_gen = []

gen = new_generation
for _ in range(generations):
    survivors = gen.survive(fraction=0.1)
    new_gen = survivors.breed(parent_picker=pick_parents, combiner=make_child).mutate(random_noise, sigma=1)
    fittest_of_each_gen.append(fittest(new_gen))
    gen = new_gen

Анализандо Лос Результаты

Volvamos Otra Vez A La Función Оригинал Y Sobre La Línea Agreguemos Los “Mejores Exponentes” De Cada Generación.

LAS Generaciones van de Menor Mayor desde El Azul (Cool) Al Rojo (теплый). También Graficamos EL Ошибка, O Sea Qué Tan Alejados Estamos del Valor Máximo Real, EN Función del Número de Generación:

COMO VEMOS APROXIMADAMESEAMETE En La Generación 100 El Valor Empieza Converger Con El Máximo Real.

Вывод

Перо, ¿Tiene Sentido Utilizar Está Técnica? Después de ToDo, SabeMos que la forma de encontrar el mínimo de una función como

f (x) – 2x ^ 2

эс Томар Су Деривада

f ‘(x) – 4x

y encontrar el valor donde el gradiente es cero, en este caso

f ‘(x) – 4 *

La Respuesta Es Que, Si Bien Para Este Caso Es en Переполнение Los Algoritmos Genéticos Son ООН Método Numérico Que NoS Premites Encontrar Recance Allsedos Acceptables ru Функсионезы Нет Дифференциалов О де лас Не SE SE CONOCE UN Método Análitico Отказ

Próximamente.

CON ESTO SUNTUMOS ESTA BREVE ANDUCCION.

EN Proximo Post, Analizaremos Como Perfecta Este Mismo Algoritmo Genético Para Resolver El Courdunto de Ecuaciones que one el ministro de educación HACE UNAS SEMANAS:

Оригинал: “https://dev.to/fernandezpablo/breve-introduccion-a-algoritmos-geneticos-28mj”