Expert-Logistics-Engine es un sistema inteligente de toma de decisiones diseñado para optimizar la logística de transporte y la gestión de flotas. Utiliza un motor de reglas basado en CLIPS e integrado con Python, permitiendo automatizar asignaciones complejas que tradicionalmente requerirían supervisión humana.
- Motor de Reglas Avanzado: Implementación de lógica de negocio (prioridades, tipos de carga, capacidades de vehículos) mediante el lenguaje de sistemas expertos CLIPS.
- Gestión de Flota Híbrida: Capacidad para asignar desde motos para entregas urgentes hasta camiones frigoríficos para cargas refrigeradas.
- Persistencia en SQLite: Integración completa con bases de datos para leer pedidos pendientes y persistir las decisiones tomadas por la IA.
- Análisis Multicriterio: El sistema evalúa peso, tipo de carga (frágil, voluminoso, refrigerado) y tiempo de espera para priorizar envíos.
El proyecto sigue la arquitectura de un Sistema Experto Moderno:
- Base de Conocimientos: Definida mediante plantillas (
deftemplate) y reglas (defrule) que modelan el conocimiento experto en logística. - Motor de Inferencia: Gestionado por
clipspy, que procesa los hechos (pedidos y vehículos) y dispara las reglas de asignación óptima. - Capa de Datos: Python actúa como puente (middleware), extrayendo datos de
logistica.dbe inyectándolos en el entorno de CLIPS.
Expert-Logistics-Engine/
├── src/
│ ├── main.py # Orquestador: conecta SQL con CLIPS
│ └── logistica.clp # Reglas de negocio (Sistemas Expertos)
├── data/
│ ├── crear_datos.py # Script para inicializar la DB
│ └── logistica.db # Base de datos SQLite (Generada)
├── scripts_adicionales/ # Módulos de apoyo y pruebas
│ ├── logistica_maestra.py
│ ├── chatbot_db_clips.py
│ └── prueba_variables.py
├── requirements.txt # Dependencias (clipspy)
└── README.md # Documentación
Es necesario instalar la librería que conecta Python con el motor CLIPS:
pip install -r requirements.txtEl script de inicialización se encuentra en la carpeta /data. Este comando generará automáticamente el archivo logistica.db con la flota de vehículos y los pedidos pendientes necesarios para el motor de reglas.
# Ejecutar el script desde la raíz del proyecto
python data/crear_datos.pyWarning
Ubicación de la BD: Ejecuta el script desde la raíz. El archivo logistica.db debe quedar en data/logistica.db para que las rutas de los scripts funcionen correctamente.
Una vez generada la base de datos, lanza el orquestador principal. Este script leerá los pedidos pendientes de SQL, los procesará con el motor de inferencia CLIPS y guardará las decisiones de vuelta en la base de datos:
python src/main.pyEl sistema utiliza razonamiento lógico para resolver conflictos de asignación mediante el motor de inferencia. Aquí puedes ver cómo se define una regla de negocio que prioriza envíos ligeros para vehículos rápidos:
(defrule asignar-urgente-moto
(pedido (id ?id) (prioridad urgente) (peso-kg ?p&:(<= ?p 5)))
(vehiculo (matricula ?mat) (tipo moto) (estado disponible))
=>
(assert (asignacion (id-pedido ?id) (matricula-vehiculo ?mat) (motivo "Envío ligero urgente")))
)Al ejecutar el orquestador, se puede observar cómo el motor de inferencia procesa cada pedido y toma decisiones basadas en la lógica de negocio, dejando en estado "PENDIENTE" aquellos que no cumplen los requisitos de seguridad (como el pedido P-105 por exceso de peso):
--- 1. LEYENDO BASE DE DATOS ---
📦 Cargado pedido pendiente: P-100...P-105
--- 2. PENSANDO (MOTOR CLIPS) ---
>>> [CLIPS] Asignado pedido P-104 (400kg) al CAMION CAMION-01
>>> [CLIPS] Asignado pedido P-103 a MOTO MOTO-RX
>>> [CLIPS] Asignado pedido P-101 (50kg) a FURGONETA FURGO-A
--- 3. REPORTE EN MEMORIA ---
PEDIDO ASIGNADO A MOTIVO
--------------------------------------------------
P-104 CAMION-01 Carga Pesada/Voluminosa
P-103 MOTO-RX Urgencia Express
P-101 FURGO-A Carga Estandar
--- 4. GUARDANDO ASIGNACIONES EN SQL ---
✅ Base de datos actualizada con éxito.
--- 🏁 VERIFICACIÓN FINAL EN SQL ---
ID: P-104 | Asignado a: CAMION-01 | Estado: Carga Pesada/Voluminosa
ID: P-105 | Asignado a: None | Estado: PENDIENTE <-- (Exceso de capacidad)
Este proyecto ha sido desarrollado por Jorge Herraiz Soler como parte de la especialización en IA y Big Data.
Important
Nota legal: Queda prohibida la reproducción total o parcial para fines comerciales sin autorización expresa del autor.