Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Intelligent Learning Path

Sistema de planificación de trayectoria profesional que combina búsqueda informada (A*), metaheurísticas (Algoritmo Genético), una búsqueda voraz (Greedy) como baseline y un modelo de lenguaje (LLM) para interpretar objetivos en lenguaje natural y evaluar la calidad de las trayectorias propuestas.

Requisitos

  • Python 3.11+
  • Ollama instalado y corriendo (para el componente LLM)

Instalación

# Clonar el repositorio
git clone <url-del-repo>
cd Intelligent-Learning-Path

# Crear entorno virtual e instalar dependencias
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt

# Configurar variables de entorno (opcional)
# Crear un archivo .env con las siguientes variables:

Editar .env si es necesario:

Variable Descripción Default
OLLAMA_HOST URL del servidor Ollama http://localhost:11434
OLLAMA_MODEL Modelo a utilizar qwen3:1.7b
OLLAMA_TIMEOUT Timeout en segundos 300

Ejecución

Interfaz Web (Recomendado)

# Instalar Streamlit (si no está instalado)
.venv/bin/pip install streamlit>=1.30.0

# Ejecutar la interfaz web
.venv/bin/streamlit run app.py

Se abrirá una interfaz en el navegador (http://localhost:8501). Escribe tu objetivo profesional en lenguaje natural y recibe un plan personalizado.

Ejemplo de uso:

Quiero ser Data Scientist, ya sé Python, tengo 500 de presupuesto y 30 semanas.

Línea de Comandos (CLI)

# Descargar el modelo (si no se tiene)
ollama pull qwen3:1.7b

# Ejecutar el sistema
.venv/bin/python main.py

El sistema pedirá describir un objetivo profesional en lenguaje natural. Ejemplo:

> Quiero ser Data Scientist, ya sé Python, tengo 500 de presupuesto y 30 semanas.

Salida esperada:

===== PARSED GOAL =====
{ "target_career": "ML Engineer", "initial_skills": ["Python"], ... }

===== A* SEARCH =====
1. Statistics
2. Linux
3. Linear Algebra
4. Docker
5. Machine Learning
6. Deep Learning
Total cost: 546 | Total time: 32 weeks

===== GENETIC ALGORITHM =====
1. Statistics
2. Linux
...

Generar dataset

Para regenerar el dataset sintético (56 cursos, 10 carreras):

.venv/bin/python data/generator.py

Ejecutar experimentos

# Comparativa A* vs GA vs Greedy (genera experiments/results.csv)
.venv/bin/python -m experiments.compare_algorithms --trials 5

# Generar gráficos (solution_quality, time_vs_cost, constraint_feasibility, summary_table)
.venv/bin/python -m experiments.plot_results

Los gráficos se guardan en experiments/figures/.

Simulación estocástica

El sistema incluye un simulador Monte Carlo que evalúa la robustez de las soluciones:

from simulation.simulator import LearningSimulator
sim = LearningSimulator(courses_dict)
result = sim.simulate(path, n_runs=1000)
# result = {'total_weeks': 31, 'abandonment_probability': 0.78}

Ejecutar tests

.venv/bin/python -m pytest tests/ -v

Estructura del proyecto

├── data/
│   ├── courses.json          # Catálogo de cursos (56 cursos, generado)
│   ├── careers.json          # Carreras y habilidades requeridas
│   ├── prerequisites.json    # Aristas del grafo de prerequisitos
│   ├── skills_seed.json      # Semilla curada a mano
│   └── generator.py          # Generador sintético del dataset
├── planning/
│   ├── career_planner.py     # Búsqueda A* con heurística admisible
│   ├── metaheuristic.py      # Algoritmo Genético (OX crossover)
│   ├── greedy.py             # Búsqueda voraz (baseline)
│   ├── constraints.py        # Validación de prerequisitos
│   └── state.py              # Estado de búsqueda para A*
├── llm/
│   ├── client.py             # Wrapper de Ollama
│   ├── parser.py             # Parsing de objetivo en lenguaje natural
│   └── evaluator.py          # Evaluación de trayectorias
├── simulation/
│   └── simulator.py          # Simulación estocástica Monte Carlo
├── experiments/
│   ├── compare_algorithms.py # Harness de comparación A* vs GA vs Greedy
│   ├── plot_results.py       # Generación de figuras
│   ├── results.csv           # Resultados crudos (225 corridas)
│   ├── simulation_results.csv # Resultados de simulación estocástica
│   ├── constraint_data.csv   # Datos de factibilidad bajo restricciones
│   └── figures/              # Figuras generadas
├── tests/                    # Tests unitarios
├── app.py                    # Interfaz web (Streamlit)
├── main.py                   # Punto de entrada CLI
├── requirements.txt
└── .env (opcional, ver tabla de variables de entorno)

Algoritmos

A* (búsqueda informada)

  • Estado: conjunto de cursos completados, camino, costo acumulado, tiempo acumulado.
  • Heurística admisible: relajación LP fraccionaria (duración/k habilidades).
  • Restricciones: presupuesto y tiempo máximo.
  • Complejidad: óptimo en tiempo cuando la heurística es consistente.

Algoritmo Genético

  • Representación: permutación de cursos candidatos.
  • Operadores: Order Crossover (OX), mutación por swap, reparación topológica.
  • Fitness: w_t × tiempo + w_c × costo + w_m × cursos_faltantes + 1000 × [infactible].
  • Selección: torneo (k=3), elitismo.

Greedy (baseline)

  • Estrategia: selecciona el curso más corto que enseña una habilidad faltante.
  • Complejidad: O(n³).
  • Ventaja: extremely rápido (<1ms).
  • Desventaja: no considera cursos combinados, produce trayectorias 25--75% más largas.

Rol del LLM

El LLM (Ollama) cumple dos funciones:

  1. Parser de objetivos (GoalParser): convierte una frase en lenguaje natural a un JSON estructurado con carrera objetivo, habilidades iniciales y restricciones.
  2. Evaluador de trayectorias (PathEvaluator): evalúa la calidad de una trayectoria en coherencia, progresión lógica, empleabilidad y utilidad práctica, devolviendo un score de 0 a 10.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages