La programación dinámica y estocástica es una técnica que se utiliza en el diseño de algoritmos para resolver problemas de optimización que se caracterizan por la incertidumbre y la necesidad de tomar decisiones secuenciales. Esta técnica es fundamental en la resolución de problemas en diversos campos como la ingeniería, la economía o las ciencias de la computación.
En este contexto, la profesora introduce un concepto interesante: el camino de borrachos. Descubramos cómo este concepto se materializa en un algoritmo de programación orientada a objetos.
¿Cómo se implementa el camino de borrachos?
El algoritmo del camino de borrachos se deriva de un problema que simula el movimiento aleatorio de un borracho que camina en un campo. Para entender cómo se desarrolla este concepto en programación, dividimos el problema en tres clases fundamentales:
Borracho: Un objeto que representa a una persona que se mueve de manera aleatoria.
Campo: Un objeto que define el entorno o mapa en el cual el borracho se mueve.
Coordenada: Un concepto abstracto que sirve para definir la posición dentro del campo.
¿Cómo se representa a través de programación orientada a objetos?
La programación orientada a objetos permite modelar el mundo real creando clases y objetos. En el caso del camino de borrachos, las clases mencionadas se configuran de la siguiente manera:
Borracho: Puede imaginarse como un individuo que se mueve dentro de las coordenadas de un campo. Además, se pueden extender sus características para definir comportamientos específicos, como un "borracho tradicional" que se mueve aleatoriamente a uno de los lados cardinales.
Campo: Funciona como un mapa y contiene las disposiciones de las coordenadas, permitiendo que el borracho se desplace dentro de él.
Coordenada: Es como un marcador que señala la posición actual del borracho dentro del campo, similar a un pin en Google Maps.
¿Cómo se implementa el movimiento del borracho?
El borracho se mueve aleatoriamente dentro del campo a través de movimientos en los ejes X e Y. Estos movimientos pueden ser:
Hacia la izquierda: decremento en el eje X.
Hacia la derecha: incremento en el eje X.
Hacia arriba: incremento en el eje Y.
Hacia abajo: decremento en el eje Y.
Aquí les presento un fragmento del código en Python:
¿Cómo se integran estas clases en la función principal?
Para concretar el comportamiento del borracho y sus desplazamientos, es necesario definir una función principal o main, un punto de entrada común en la mayoría de los lenguajes de programación:
if __name__ =='__main__':# Implementación del movimiento del borracho# Código para crear instancias de las clases e interactuar con ellas
El main se encarga de gestionar el flujo del programa: crear objetos, iniciar movimientos y registrar resultados. Se pueden implementar simulaciones para ver cómo varía la posición del borracho tras un número determinado de pasos.
¿Cómo se evalúan los resultados de las simulaciones?
En programación estocástica, ejecutar una simulación una sola vez no proporciona suficiente información debido a su componente aleatorio. Por ello, es necesario realizar múltiples simulaciones para obtener resultados promedio más fiables.
Simulaciones Múltiples: Es importante ejecutar varias simulaciones (por ejemplo, 100) para cada número de pasos definido, obteniendo así la media de las distancias recorridas.
Distancias Máxima y Mínima: Evaluar la distancia máxima y mínima alcanzada por el borracho en las distintas simulaciones proporciona insights sobre el comportamiento y alcance de los movimientos.
En resumen, observar los caminos y las posiciones finales de manera gráfica lleva a un entendimiento más profundo del comportamiento del sistema. Herramientas de graficación como Bokeh pueden usarse para visualizar los trayectos.
Este fascinante algoritmo no sólo simboliza la aleatoriedad del camino de un borracho, sino que se convierte en una poderosa herramienta para estudiar patrones de movimiento y tomar decisiones bajo incertidumbre en programación dinámica. Continuad explorando y estudiando, ¡hay un mundo de conocimientos por descubrir!
Camino Aleatorio en Programación Orientada a Objetos
Muy interesante, pero quisiera pedirte una explicación.
Que implican los colores? Algo como los rojos los más frecuentes y los celestes los menos? O como planteaste el diagrama :De
¿Saben qué sería interesante?
.
Ponerle a 2 borrachos y que haya dos casos:
que el borracho sea pana y que sigan caminando aleatoriamente, pero que haya de vez en cuando una tendencia a querer juntarse
que el un borracho le busque bronca al otro y el uno trate de vez en cuando de acercarse y el otro de vez en cuando de alejarse
.
jaja sería interesante modelar esos casos
Tu propuesta es bastante interesante me recordo a un algoritmo llamado "conway's game of life" es un algoritmo aleatorio que por asi decirlo una celda, o particula como desees verlo depende de las demas que le rodeany de eso dependera si vive o muere la actual casilla, es bastante extenso pero pudiera interesarte. Creo es muy a fin a tu propuesta.
Recomendación: vean primero las tres clases siguientes, en las que hace el ejercicio, luego vuelven y ven esta explicación, para que puedan entender el contexto.
Me perdí esta sesión en vivo, pero me alegro que se hayan tomado el tiempo de explicar mejor la simulación del borracho, que a mí me costó bastante entender
Notas de esta explicación :smile:
** Entendiendo la aleatoriedad con Python.**
En ese código se usó el enfoque de POO 💩.
Se tienen 3 clases: borracho, campo y coordenada. Una subclase de borracho es borracho tradicional, el cual se puede mover aleatoriamente hacia arriba, derecha, izquierda y abajo con igual probabilidad.
Dado que inicia en $(0, 0)$, nos interesa conocer donde está después de $n$ pasos. Al final, para ver donde termino, podemos usar la distancia euclidiana. Dado que es aleatorio, no se aleja tanto del centro.
Si corremos solo la simulación una vez para cada $n$, no podríamos conocer el promedio y el comportamiento general, debemos correrlo varias veces (como si lanzáramos un dado). En el ejemplo lo hacemos 100 veces (intentos).
En general, en cada simulación, podemos esperar resultados diferentes, pero el promedio será siempre el mismo.
Me parece una buena idea que antes de aplicar un algoritmo se ilustre de alguna forma todos los pasos del mismo, para tener una forma visual de relacionar que está sucediendo en cada momento, buena aclaración profe.
Coordenada.
Si lo queremos ver en términos de programación orientada a objetos; nos podemos imaginar al borracho cómo alguien que se mueve, el campo como si fuera un mapa y la coordenada como un pointer adentro de este mapa.
Otra cosa bien interesante es que entro de la programación orientada a objetos es que nosotros podemos generar una jerarquía, y la jerarquía básicamente es como nosotros como podemos expandir cosas generales que hereden de un padre.
Hola 😀.
Esta clase no es parte del curso en sí, es una Master Class de Platzi aparte que fue incorporada. No te preocupes si no la entiendes mucho, no tiene mucha importancia. Las demás clases si están orden y es importante que las entiendas 😉.
estoy construyendo un sistema que traduce automáticamente un idioma maya, hacia el idioma español.
he tenido que irme a entender una gran variedad de variables en la morfología del idioma maya, que afectan su sintaxis, y cómo estas dos circunstancias impiden que haya una traducción literal al español.
entender el problema desde el punto de vista de la computación dinámica me ayudará a generar los algoritmos que puedan descomponer eficientemente las palabras del idioma maya, para traducirlas correctamente a un idioma indoeuropeo.
por ejemplo:
en español decimos YO TE SIGO
pero en idioma maya se dice KATINTEREMBEJ
si cambio cosas en la palabra maya y escribo KINATEREMBEJ
el resultado en español es TU ME SIGUES
han desaparecido las palabras separadas
recuerdo a la audiencia, que los mayas inventaron el CERO Y LA NUMERACION VIGESIMAL
por esto necesito que mis algoritmos puedan reconocer la composición de ambos tipos de estructuras para hacerlas correlativa
En esta clase está explicando de forma gráfica los 2 documentos que dejó en la clase anterior llamada: "QUE SÓN LOS CAMINOS ALEATORIOS", los archivos de la clase se llaman: -campo.py, -camino_aleatorio.py