Proyecto de optimización para el Problema de la Mochila Multidimensional 0/1 (Multidimensional Knapsack Problem).
- Daniel Miranda
- Pablo Silva
- Vicente Arratia
Este proyecto implementa algoritmos de optimización para resolver el Problema de la Mochila Multidimensional 0/1, incluyendo:
- Fuerza Bruta: Solución exacta para instancias pequeñas
- Algoritmo Genético: Metaheurística para instancias de mayor tamaño
MKP-Opti/
├── src/
│ └── optimization/
│ ├── genetic_algorithm/
│ └── objective_function/
├── test/
│ ├── MKPInstances/
│ ├── experimentos.yaml
│ ├── ga_test.py
│ └── results_experiments/
└── README.md
- Python 3.7+
- NumPy
- Matplotlib
- PyYAML
pip install numpy matplotlib pyyamlLos experimentos se configuran a través del archivo test/experimentos.yaml. Este archivo contiene:
- Configuración Global: Parámetros comunes para todos los experimentos
- Lista de Experimentos: Diferentes configuraciones del algoritmo genético
configuracion_global:
ruta_instancia: "ruta/a/instancia.txt"
numero_ejecuciones: 10
population_size: 1500
n_generations: 1500
experimentos:
- nombre: Baseline_Repair_Ratio_Tournament
params:
p_mutate: 0.03
selection_type: tournament
tournament_size: 5
crossover_type: uniform
elitism_count: 5
constraint_strategy: repair
repair_heuristic: ratio
initial_population_density: 0.2Para ejecutar los experimentos configurados:
cd test/
python ga_test.pyruta_instancia: Ruta al archivo de instancia MKPnumero_ejecuciones: Número de ejecuciones por experimentopopulation_size: Tamaño de la poblaciónn_generations: Número de generaciones
p_mutate: Probabilidad de mutación (0.0 - 1.0)selection_type: Tipo de selección (tournament,roulette)tournament_size: Tamaño del torneo (si se usa selección por torneo)crossover_type: Tipo de cruce (uniform,single_point,two_points)elitism_count: Número de individuos élite a conservarconstraint_strategy: Estrategia para manejar restricciones (repair,penalty_function)repair_heuristic: Heurística de reparación (ratio,heaviest)penalty_factor: Factor de penalización (si se usa penalty_function)initial_population_density: Densidad inicial de la población (0.0 - 1.0)
Los resultados se guardan automáticamente en la carpeta test/results_experiments/ con la siguiente estructura:
results_experiments/
└── [nombre_instancia]/
├── resumen_experimentos_[instancia].csv
└── [nombre_experimento]/
├── reporte_detallado.txt
├── grafico_convergencia.png
└── grafico_boxplot.png
- reporte_detallado.txt: Estadísticas completas del experimento
- grafico_convergencia.png: Gráfico de convergencia promedio
- grafico_boxplot.png: Distribución de resultados finales
- resumen_experimentos.csv: Resumen comparativo de todos los experimentos
Para crear nuevos experimentos:
- Editar el archivo
test/experimentos.yaml - Agregar nuevas configuraciones en la sección
experimentos - Comentar/descomentar experimentos según sea necesario
- Ejecutar
python ga_test.py
Importante: Asegúrese de actualizar las rutas en el archivo de configuración según su estructura de directorios:
RUTA_BASE_RESULTADOS: Carpeta donde se guardarán los resultadosRUTA_ARCHIVO_YAML: Ruta al archivo de configuraciónruta_instancia: Ruta a la instancia MKP a resolver
-
Preparar la instancia: Colocar el archivo de instancia MKP en
test/MKPInstances/ -
Configurar experimento: Editar
test/experimentos.yamlcon la ruta correcta -
Ejecutar:
cd test/ python ga_test.py -
Analizar resultados: Revisar los archivos generados en
test/results_experiments/
- El algoritmo implementa diferentes estrategias de manejo de restricciones
- Soporte para múltiples tipos de selección y cruce
- Generación automática de gráficos y reportes estadísticos
- Configuración flexible mediante archivos YAML
- Seguimiento detallado de la convergencia del algoritmo