https://github.com/ilanolkies/algo3-tp1
Trabajo Práctico 3 de Algoritmos III - Optimizando Jambo-tubos.
https://github.com/ilanolkies/algo3-tp1
Last synced: 4 months ago
JSON representation
Trabajo Práctico 3 de Algoritmos III - Optimizando Jambo-tubos.
- Host: GitHub
- URL: https://github.com/ilanolkies/algo3-tp1
- Owner: ilanolkies
- Created: 2020-04-24T20:33:35.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2022-06-22T01:59:07.000Z (about 3 years ago)
- Last Synced: 2025-01-05T07:45:48.482Z (6 months ago)
- Language: Jupyter Notebook
- Size: 2.41 MB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Optimizando Jambo-tubos
El problema: dado un _Jabotubo_ con resistencia , y una secuencia ordenada de 
productos , cada uno con un peso asociado  y una resistencia asociada ,
determinar la máxima cantidad de productos que pueden apilarse en un tubo sin que ninguno
esté aplastado.En la figura se ilustra un ejemplo con , ,
 y . La solución óptima es , y consiste
en tomar los elementos ,  y . Notar que la solución alternativa tomando los
elementos ,  y  no es factible porque la suma de sus pesos es .> Nota: los productos solamente pueden ser apilados en el orden en que son recibidos de la
> cinta transportadora. Para este problema, asumiremos que todos los valores mencionados
> son enteros no negativos.
![]()
Ejemplo de instancia del problema de Jambo-tubos.
## Proyecto
Implementamos 3 algoritmos en C++ para resolver este problema:
- Fuerza bruta
- Backtracking
- Programación dinámicaEl proyecto está organizado de la sigueinte forma:
- `/src` contiene el código fuente
- `/input` contiene entradas válidas
- `/instancias` tiene las instancias generadas para la experimentacion
- `/notebooks` tiene los experimentos ejecutados. Ver [experiments](#experimentos)## Algoritmos
Para compilar el código fuente:
```
g++ src/main.cpp -o algo3-tp1
```Para ejecutar:
```
./algo3-tp1 RUTA_A_ENTRADA ALGORITMO
```- 1: fuerza bruta
- 2: backtracking
- 3: programacion dinamica
- 4: backtracking sin poda de optimalidad
- 5: backtracking sin poda de factbilidadSe puede ejecutar ambos comandos en una sola sentencia:
```
g++ src/main.cpp -o algo3-tp1 && ./algo3-tp1 RUTA_A_ENTRADA ALGORITMO
```Ejemplo:
```
g++ src/main.cpp -o algo3-tp1 && ./algo3-tp1 ./input/sample2 3
```## Experimentacion
Para usar Python v3.6.5
1. Instalar `pyenv` (una sola vez)
_Como instalar `pyenv`_: https://github.com/pyenv/pyenv#installation
Mac:
```
brew update
brew install pyenv
eval "$(pyenv init -)"
```2. Instalar v3.6.5 (una sola vez)
```
pyenv install 3.6.5
```3. Activar v3.6.5 (cada nueva consola debe ejecutarlo una vez)
```
eval "$(pyenv init -)"
pyenv global 3.6.5
```4. Checkear con
```
$ python --version
Python 3.6.5
```5. Instalar dependencias
```
pip install -r requirements.txt
```## Notebooks
Abrir notebooks con
```
jupyter notebook notebooks/
```- Experimento 3.1: Comparacion entre algoritmos - `Comparacion`
- Experimento 3.2: Complejidad de fuerza bruta - `ComplejidadFuerzaBruta`
- Experimento 3.3: Efectividad de las podas de backtracking - `podas`
- Experimento 3.4: Orden de productos vs. backtracking con distintas podas - `podasOrdenadas`
- Experimento 3.5: Complejidad de programación dinamica - - `ComplejidadDinamica`## Ayuda
Mas ayuda en:
```
./bin/algo3-tp1 help
```