Aprovecha el precio especial

Antes:$249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comienza ahora

Termina en:

02d

15h

57m

17s

1

Caminos aleatorios

Para ejemplificar este caso, lo que se hace es similar el comportamiento de la caminata de un borracho dentro de un campo.
En ese sentido, necesitaremos un ‘Borracho’

import random

classBorracho:def__init__(self, nombre):
    self.nombre = nombre


classBorrachoTradicional(Borracho):def__init__(self, nombre):
    super().__init__(nombre)
    
  defcamina(self):return random.choice( [(0,1), (0,-1), (1,0), (-1,0) ])

OJO: En este ejemplo se utiliza una clase ‘Tradicional’ que hereda de la clase principal. En ese sentido, podemos generar nuestro propio comportamiento de Borracho que deseemos.

Además, definimos las Coordenadas y el Campo.

classCoordenada:def__init__(self, x, y):
    self.x = x
    self.y = y
  
  defmover(self, delta_x, delta_y):return Coordenada(self.x + delta_x, self.y + delta_y)
  
  defdistancia(self, otra_coordenada):
    delta_x = self.x - otra_coordenada.x
    delta_y = self.y - otra_coordenada.y
  
    return (delta_x**2 + delta_y**2)**0.5
classCampo:def__init__(self):
    self.coordenadas_de_borracho = {}
    
  defanadir_borracho(self, borracho, coordenada):
    self.coordenadas_de_borracho[borracho] = coordenada
    
  defmover_borracho(self, borracho):
    delta_x, delta_y = borracho.camina()
    coordenada_actual = self.coordenadas_de_borracho[borracho]
    nueva_coordenada = coordenada_actual.mover(delta_x, delta_y)
    
    self.coordenadas_de_borracho[borracho] = nueva_coordenada
  
  defobtener_coordenada(self, borracho):return self.coordenadas_de_borracho[borracho]

Para realizar la simulación también se hará uso de la librería Bokeh para realizar las gráficas.

from borracho import BorrachoTradicional
from campo import Campo
from coordenada import Coordenada

from bokeh.plotting import figure, show

defcaminata(campo, borracho, pasos):
  inicio = campo.obtener_coordenada(borracho)
  
  for _ in range(pasos):
    campo.mover_borracho(borracho)
  
  return inicio.distancia(campo.obtener_coordenada(borracho))


defsimular_caminata(pasos, numero_de_intentos, tipo_de_borracho):
  borracho = tipo_de_borracho(nombre = 'Nidia')
  origen = Coordenada(0,0)
  distancias = []
  
  for _ in range(numero_de_intentos):
    campo = Campo()
    campo.anadir_borracho(borracho, origen)
    simulacion_caminata = caminata(campo, borracho, pasos)
    distancias.append(round(simulacion_caminata, 1))

  return distancias

defgraficar(x,y):
  grafica = figure(title='Camino aleatorio', x_axis_label='Pasos', y_axis_label='Distancia')
  grafica.line(x,y, legend='Distancia media')
  
  show(grafica)


defmain(distancia_de_caminata, numero_de_intentos, tipo_de_borracho):
  
  distancia_media_por_caminata = []
  
  for  pasos in distancia_de_caminata:
    distancias = simular_caminata(pasos, numero_de_intentos, tipo_de_borracho)
    distancia_media = round(sum(distancias) / len(distancias), 4 )
    distancia_maxima = max(distancias)
    distancia_minima = min(distancias)
    
    distancia_media_por_caminata.append(distancia_media)
    
    print(f'{tipo_de_borracho.__name__} caminata aleatoria de {pasos}')
    print('Media {}'. format(distancia_media))
    print('Máxima {}'. format(distancia_maxima))
    print('Minimo {}'. format(distancia_minima))
  
  graficar(distancia_de_caminata, distancia_media_por_caminata)

if __name__ == '__main__':
  distancia_de_caminata = [10, 100, 1000, 10000]
  numero_de_intentos = 100
  
  main(distancia_de_caminata, numero_de_intentos, BorrachoTradicional)

NOTA:
Antes te ejecutar el programa, primero se deberá inicializar el entorno virtual de Python y luego instalar Bokeh:

python3 -m venv envsourceenv/bin/activate  

pip3 install bokeh  

Escribe tu comentario
+ 2