3.3 Programas numericos
Enumeracion exhaustiva
Consiste en enumerar todas las soluciones posibles, a partir de los valores tomados para las variables enteras y realizar todas las combinaciones posibles hasta encontrar una combinación que nos proporcione el valor óptimo de la función objetivo y que cumpla con todas las restricciones del problema. Una de las objeciones principales que presenta éste método es el número de variables, ya que se presentan demasiadas combinaciones antes de encontrar la solución óptima.
- Tambien llamado "adivina y verifica"
- Uno de los primeros algoritmos que debes de tratar.
- Es enumerar todas las posibilidades hasta que encuentres la mejor opcion
Aproximacion de soluciones
Es similar a enumeracion exhaustiva pero necesita de mayor precision y de una respuesta exacta como tal. En estos algoritmos podemos aproximar las soluciones con un margen de error que llamaremos epsilon.
- Epsilon es la diferencia entre la realidad y la aproximacion.
- En este algoritmo se realiza un desicion que muchos llaman trade off, es decir tenemos que elegir entre velocidad y precision, y en este tipo de algoritmos se elige lentitud pero mayor presicion. NO SE PUEDE SER LAS DOS COSAS (preciso y rapido).
Busqueda binaria
- Se puede usar este algoritmo cuando la respuesta se encuentra en un conjunto ordenado.
- Es altamente eficiente, pues corta el espacio de busqueda en dos por cada iteracion.
- Se empieza a buscar a la mitad de todo el espacio posible de busqueda, y asi vamos acortando el espacio de busqueda.
#Algoritmo de busqueda binaria para raiz cuadrada
objetivo = int(input('Escoge un numero para calcular su raiz cuadrada: '))
epsilon = 0.001
bajo = 0.0
alto = max(1.0, objetivo)
respuesta = (alto + bajo)/2
while abs(respuesta**2 - objetivo) >= epsilon:
print(f'bajo={bajo} alto={alto} respuesta={respuesta}')
if respuesta ** 2 < objetivo:
bajo = respuesta
else:
alto = respuesta
respuesta = (alto + bajo)/2
print(f'La raiz cuadrada de{objetivo} es {respuesta}')
Backlinks: Inteligencia Artificial:3. Introduccion al pensamiento computacional con Python