laro, te explico cada paso del código:
Importar bibliotecas
1. import random as rd: Importa la biblioteca random y la asigna el alias rd para usar
sus funciones de manera más concisa.
2. import [Link] as plt: Importa la biblioteca [Link] y la asigna el
alias plt para usar sus funciones de manera más concisa.
Definir funciones
1. def fx(x):: Define una función fx que toma un vector x como entrada.
2. cuadrado = []: Inicializa una lista vacía cuadrado.
3. for i in x:: Itera sobre cada elemento i del vector x.
4. [Link](i**2): Calcula el cuadrado de cada elemento i y lo agrega a la
lista cuadrado.
5. return sum(cuadrado): Retorna la suma de los cuadrados de los elementos de x.
Definir función alternativa
1. def fx2(x):: Define una función fx2 que toma un vector x como entrada.
2. return sum([xi**2 for xi in x ]): Calcula la suma de los cuadrados de los elementos
de x utilizando una comprensión de lista.
Definir función para generar vecino
1. def generarVecino(x):: Define una función generarVecino que toma un vector x
como entrada.
2. idx = [Link](0,len(x)-1): Selecciona un índice aleatorio idx dentro del rango de la
longitud del vector x.
3. x[idx] = [Link](-5.12,5.12): Reemplaza el elemento en el índice idx con un valor
aleatorio dentro del rango -5.12 a 5.12.
4. return x: Retorna el vector modificado.
Definir función de búsqueda local
1. def busquedaLocal(x,dim,limites,max_itera):: Define una función busquedaLocal
que toma un vector x, la dimensión dim, los límites limites y el máximo número de
iteraciones max_itera como entradas.
2. best = []: Inicializa una lista vacía best para almacenar los mejores valores
encontrados.
3. mejor_sol = x[:]: Crea una copia del vector x para almacenar la mejor solución
encontrada.
4. feval = fx(x): Evalúa la función objetivo fx en el vector x inicial.
5. mejor_fx = feval: Asigna el valor de la función objetivo inicial como el mejor valor
encontrado.
6. i=0: Inicializa un contador i para las iteraciones.
7. while i<max_itera:: Itera hasta alcanzar el máximo número de iteraciones.
8. svecina = generarVecino(x): Genera un vecino del vector x utilizando la función
generarVecino.
9. fvecina = fx(svecina): Evalúa la función objetivo fx en el vecino svecina.
10. if fvecina < mejor_fx:: Verifica si el valor de la función objetivo en el vecino es
mejor que el mejor valor encontrado hasta el momento.
11. x = svecina[:]: Actualiza el vector x con el vecino si es mejor.
12. mejor_fx = fvecina: Actualiza el mejor valor encontrado.
13. mejor_sol = svecina[:]: Actualiza la mejor solución encontrada.
14. [Link](mejor_fx): Agrega el mejor valor encontrado a la lista best.
15. i+=1: Incrementa el contador de iteraciones.
16. print(f"Iteración {i}: Mejor valor = {mejor_fx}"): Imprime el número de iteración y el
mejor valor encontrado.
17. return best, mejor_sol, mejor_fx: Retorna la lista best, la mejor solución
encontrada y el mejor valor encontrado.
Parámetros del problema
1. dim = 5: Establece la dimensión del problema en 5.
2. limites = [-5.12,5.12]: Establece los límites del problema en -5.12 y 5.12.
3. max_itera = 1000: Establece el máximo número de iteraciones en 1000.