Está en la página 1de 21

FACULTAD DE INGENIERÍA

FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

NOMBRE DE LA ASIGNATURA: Inteligencia Artificial


NOMBRE DEL PROFESOR: Justino Ramirez Ortegon
NOMBRE DEL ALUMNO: Eduardo Daniel Uc Uicab
TEMA: Práctica 2_Búsqueda Heurística

RESUMEN:
El método de descenso simple se utiliza para encontrar el mínimo de una función, en este casom
una función paraboloide, que es una superficie en forma de cuenco. Se comienza en un punto
inicial (X0,Y0) en la superficie del paraboloide. Se calcula el valor de la función Z en las
coordenadas actuales (X, Y), es decir, Z = f(X, Y). Se generan nuevos candidatos para las
coordenadas (Xp, Yp) al agregar un pequeño desplazamiento aleatorio a las coordenadas actuales
(X, Y). Se calcula el valor de la función Z en los candidatos (Zp = f(Xp, Yp)). Si el valor de Z en los
candidatos (Zp) es menor que el valor actual de Z, se actualizan las coordenadas actuales (X, Y)
con las coordenadas candidatas (Xp, Yp), y se actualiza el valor de Z. En el proceso de la
convergencia se repite durante un número fijo de iteraciones o hasta que se cupla un criterio
de convergencia, como cuando el cambio en Z entre dos iteraciones es muy pequeño o cuando
alcanza una precisión deseada. El método de descenso simple en una función paraboloide implica
comenzar en un punto, explorar iterativamente coordenadas cercanas, y moverse hacia abajo en
la superficie del paraboloide buscando el punto de mínimo valor Z. Este método es efectivo en
funciones convexas como el paraboloide y se utiliza en optimización numérica para encontrar
mínimos locales o globales.

MARCO TEÓRICO:
Matlab: Matlab, una abreviatura de MATrix LABoratory (laboratorio de matrices), se presenta
como un sistema de cómputo numérico que proporciona un entorno de desarrollo integrado (IDE)
junto con su propio lenguaje de programación, conocido como lenguaje M. Este software ha sido
desarrollado por la empresa Mathworks y se destaca como una de las herramientas más
poderosas en términos de cálculo y visualización gráfica de problemas complejos. Utilizar Matlab
suele reemplazar en gran medida la necesidad de realizar cálculos a mano, ofreciendo una
eficiencia superior en la mayoría de los casos. Una de las características distintivas de Matlab es
su lenguaje propio, lo que significa que utiliza extensiones de archivo con la terminación ".m" y
requiere familiaridad con sus comandos y reglas específicas. Además, Matlab es una aplicación
que se adapta a las necesidades del usuario a través de toolboxes, que son paquetes adicionales
que permiten realizar funciones que no están predefinidas en el programa.

Como se mencionó previamente, el punto fuerte de Matlab es el cálculo, que abarca operaciones
comunes como trabajar con vectores, matrices y funciones, y también incluye programación
orientada a objetos en casos más avanzados. Además, lo que realmente distingue a Matlab y lo
convierte en una herramienta completa en su campo es su capacidad para representar
FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE


gráficamente modelos en 2D y 3D. Esto facilita enormemente la comprensión e interpretación de
los resultados y contribuye a su amplia utilidad en la resolución de problemas complejos.

Método de descenso simple: Uno de los métodos de optimización más ampliamente discutidos y
utilizados es el método de gradiente más sencillo, comúnmente conocido como “gradient
descent” en inglés. A pesar de su convergencia lente, se han obtenido resultados significativos en
la búsqueda de líneas exactas a lo largo de cada dirección de descenso. Sin embargo, en el caso
de funciones no lineales, surge una dificultad relacionada con la no monotonía de algunos
métodos. Para abordar esto, se han desarrollado fórmulas de tamaño de paso que no solo
permiten una convergencia más rápida, sino que también poseen la propiedad deseada de
monotonía. En este contexto, se proponen tamaños de paso representados por αk para mejorar
el método de descenso más destacado. Además, se presentan resultados numéricos que
demuestran que es posible encontrar la solución en tan son 3 iteraciones utilizando estos
tamaños de paso. También se introduce una versión modificada del método que se compara con
el método de Barzilar-Borwein.

Existen varias opciones para encontrar el mínimo de una función:


1. Método Analítico: Implica calcular la derivada cerrada de una función y encontrar los
puntos en los que la derivada es igual a cero.
2. Método Numéricos: Estos métodos se basan en comenzar en un punto de la función y
luego descender hacia el mínimo utilizando información de la primera derivada (gradient
descent) o incluso la segunda derivada (Newton´s gradient descent).
3. Método Aproximativos: Utilizan enfoques aproximados como BFGS, PSO, entre otros.

El primer método requiere que la función tenga una forma cerrada para que se pueda calcular su
derivada. Los métodos numéricos y aproximativos son iterativos, lo que significa que comienzan
en una solución y buscan iterativamente soluciones óptimas. Los métodos numéricos se basan en
información local alrededor de la posición actual, mientras que los métodos aproximativos
pueden hacer uso de información global. En resumen, el método de descenso por gradiente y sus
variaciones son fundamentales para encontrar mínimo y máximos en funciones y la elección del
método depende de la naturaleza de la función y la disponibilidad de información derivada o
aproximativa.

EQUIPO Y SOFTWARE UTILIZACO:


Computadora
Lap-Top

FUNCIONALIDAD DEL PROGRAMA:


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

1. El código toma tres argumentos de entrada:


• X0 y Y0 son las coordenadas iniciales desde las cuales comenzará la búsqueda.
FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE


• N es el número de iteraciones que el algoritmo realizará.
2. El código también inicializa algunas variables importantes:
• i se inicializa en 0 y se usa como un contador para el bucle de iteración.
• X y Y representan las coordenadas actuales y se inicializan con los valores de X0
e Y0.
• Z es el valor de la función a optimizar en las coordenadas actuales (inicialmente
calculado con FuncionParaboloide2D).
• K es el tamaño de paso que se utilizará en cada iteración.
• Xs y Ys son matrices para almacenar todas las coordenadas candidatas en cada
iteración.
• Xg y Yg son matrices para almacenar solo las coordenadas ganadoras (las que
resultaron en un valor de función más bajo).
3. A continuación, el código entra en un bucle while que ejecutará hasta que i alcance el
valor de N. En cada iteración del bucle:
• Se generan nuevos candidatos Xp e Yp sumando un valor aleatorio entre -K y K a
las coordenadas actuales X e Y.
• Se calcula el valor de la función en las coordenadas candidatas Zp utilizando
FuncionParaboloide2D.
• Se almacenan los candidatos en las matrices Xs e Ys.
4. Si el valor de Zp (el valor de la función en las coordenadas candidatas) es menor que el
valor actual de Z, entonces se actualizan las coordenadas actuales (X e Y) con Xp e Yp,
respectivamente. También se actualiza Z con el nuevo valor de Zp. Además, se almacenan
las coordenadas ganadoras en las matrices Xg e Yg.
5. El contador i se incrementa en 1 en cada iteración para controlar el número de iteraciones
realizadas.
6. Finalmente, el código muestra las coordenadas finales X, Y y el valor de la función
optimizada Z. También, crea dos gráficos: uno que muestra todas las coordenadas
candidatas (Xs e Ys) y otro que muestra solo las coordenadas ganadoras (Xg e Yg).

INSTRUCCIONES DE USO:
En esta práctica no hay mucho por hacer más que tener la función paraboloide y elegir las
coordenadas deseadas hacia dicha función, por lo tanto, se mostraran 5 ejemplos sobre el
método de descenso simple:

Para el primer ejemplo elegimos las siguientes coordenadas “DescensoSimple(1,2,50)”;


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

Por lo tanto, al aplicar el método obtenemos las siguientes gráficas:

En la primera gráfica o mejor dicho, la “figura 1” es la original por donde desciende el método, y
la “figura2 “podemos decir que es el método simplificado del descenso y/o la manera más rápido
de llegar o tratar de llegar al cero.

Una vez explicado el proceso y la resolución del programa podemos pasar de una manera más
rápida a los siguientes ejemplos, repito el propósito de ello es cambiar los parámetros para X0,
Y0 y N.

Para el ejemplo 2 se usa las siguientes coordenadas “DescensoSimple(10,4,100)”:


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

Una vez obtenida las respuestas nos muestran las siguientes gráficas:

Para el ejemplo 3 usamos las siguientes coordenadas “DescensoSimple(1,6,100)”


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

Con esto datos obtenemos unos resultados en la gráfica muy favorable…

En el ejemplo 4 tenemos usaremos los puntos que a continuación se muestra


“DescensoSimple(3,1,00)”:
FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

A continuación, mostramos las gráficas obtenidas de las siguientes coordenadas:

En el ultimo ejemplo de este código usamos las coordenadas elegidas “DescensoSimple(5,1,100)”


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

Con ello, obtuvimos la siguiente gráfica:


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE


Proseguimos mostrando el segundo código en el que corregimos los punto el descenso para ser
más exacto a cero aplicando un rango en la ecuación, para ello usamos el código
“DescensoSimpleMejorado”. Se mostrará lo agregado del código con referente al anterior:

Al igual que en los anteriores ejemplos elegiremos algunas coordenadas para expresar y
demostrar el funcionamiento de dicho código.

Para el primer ejemplo de este segundo código usaremos los puntos X0=2, Y0=8 Y N=100.
FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

En las gráficas obtenemos;

Para el ejemplo 2 elegiremos X0=4, Y0= 2 Y N=150.


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

Ahora observemos las gráficas:


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE


En el ejemplo 3 usaremos los siguientes puntos “X0=8, Y0=5, N=150”:

Observemos el resultado obtenido:


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE


Para el penúltimo ejemplo veamos como quedaría si usamos los siguientes puntos “X0=6, Y0=9,
N=150”:

A continuación, las gráficas:


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

Para el último ejemplo de este segundo código tenemos en “X0=12, Y0=17, N=150”:

Y el resultado obtenido es el siguiente:


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

CODIGO RELEVANTE:

El siguiente código es el principal de todo el programa ya que en el se realiza todo el proceso del
cálculo y el gráfico obtenido:
FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE


FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

En este segundo código es para mandar a llamar la ecuación paraboloide para poder hacer
el trabajo:
FACULTAD DE INGENIERÍA
FORMATO
DE DESARROLLO DE SOFTWARE

UNIVERSIDAD AUTÓNOMA DE CAMPECHE

BIBLIOGRAFÍA:
https://rstudio-pubs-
static.s3.amazonaws.com/501676_5fab5567274f46dbb3d4713e399c4b1f.html

https://turing.iimas.unam.mx/~ivanvladimir/posts/gradient_descent/

También podría gustarte