Este proyecto es una simulación de un coche autónomo implementada completamente en JavaScript sin librerías externas. Utiliza una red neuronal simple para permitir que los coches aprendan a conducir por sí mismos, evitando obstáculos y otros coches en la carretera.
- Simulación de carretera con múltiples carriles
- Detección de colisiones
- Sensores virtuales para detectar obstáculos
- Red neuronal para toma de decisiones
- Visualización de la red neuronal en tiempo real
- Capacidad de guardar y cargar el "cerebro" entrenado
- Evolución automática mediante mutaciones genéticas
- Selección natural: solo sobreviven los mejores conductores
- HTML5 Canvas para renderizado
- JavaScript puro (vanilla JS)
- Implementación propia de redes neuronales
- LocalStorage para persistencia de datos
- car.js: Define la clase Car con propiedades físicas, controles y lógica de daños
- sensor.js: Implementa los sensores del coche mediante rayos virtuales
- network.js: Contiene la implementación de la red neuronal y algoritmos de mutación
- road.js: Maneja la creación y renderizado de la carretera
- controls.js: Gestiona los controles de entrada (manual y automático)
- utils.js: Funciones de utilidad como detección de intersecciones y conversiones
- visualizer.js: Dibuja la representación gráfica de la red neuronal
- main.js: Punto de entrada principal y bucle de animación
- index.html: Estructura HTML básica
- style.css: Estilos para la interfaz
El coche está equipado con sensores (rayos) que detectan la distancia a obstáculos como los bordes de la carretera y otros vehículos. Estos sensores proporcionan información que se utiliza como entrada para la red neuronal.
// Ejemplo de cómo los sensores detectan obstáculos
#getReading(ray, roadBorders, traffic) {
let touches = [];
// Detecta intersecciones con los bordes de la carretera
// Detecta intersecciones con otros coches
// Devuelve la intersección más cercana
}La red neuronal toma las lecturas de los sensores como entrada y produce acciones (avanzar, retroceder, girar) como salida. La red está compuesta por capas de neuronas interconectadas con pesos y sesgos que se ajustan mediante un proceso evolutivo.
// Estructura básica de la red neuronal
[
// Capa de entrada (lecturas de sensores)
[neuron1, neuron2, neuron3, neuron4, neuron5],
// Capa oculta
[neuron1, neuron2, neuron3, neuron4, neuron5, neuron6],
// Capa de salida (controles: adelante, izquierda, derecha, atrás)
[neuron1, neuron2, neuron3, neuron4],
];En lugar de usar algoritmos de aprendizaje tradicionales como backpropagation, este proyecto utiliza un enfoque evolutivo:
- Se generan múltiples coches con redes neuronales aleatorias
- Los coches que llegan más lejos sin chocar son seleccionados
- Se guarda el "cerebro" (red neuronal) del mejor coche
- Se crean nuevos coches basados en el mejor, con pequeñas mutaciones
- Se repite el proceso, mejorando gradualmente el rendimiento
- Abre
index.htmlen tu navegador - Observa cómo los coches intentan navegar por la carretera
- Cuando un coche se desempeñe bien, haz clic en "💾 Save" para guardar su cerebro
- Si quieres descartar el cerebro guardado, haz clic en "🗑️ Discard"
- Recarga la página para ver cómo evoluciona la siguiente generación
- Añadir más obstáculos y escenarios complejos
- Implementar un sistema de puntuación más sofisticado
- Mejorar la visualización de la red neuronal
- Añadir controles para ajustar parámetros de la simulación
- Permitir al usuario dibujar sus propias carreteras
Este proyecto fue creado como ejercicio educativo para entender los conceptos básicos de:
- Redes neuronales
- Algoritmos genéticos
- Inteligencia artificial aplicada
- Simulación física en JavaScript
Este proyecto está bajo la Licencia MIT. Siéntete libre de usar, modificar y distribuir el código como desees.
