Compare commits

...

9 Commits

Author SHA1 Message Date
3998caf079 Merge pull request 'Last one' (#12) from dnk-general into master 2024-10-16 01:10:40 -03:00
aec9898091 Hardcoded ARGS to -ic, the script is bugged and i'm tired 2024-10-16 01:04:55 -03:00
3c8bed290d Recreated readme 2024-10-16 00:44:23 -03:00
13ab972fdc Que raiva 2024-10-16 00:20:00 -03:00
4ca1da90fb Merge pull request 'dnk-general' (#11) from dnk-general into master 2024-10-16 00:03:26 -03:00
6bab964dd5 Added build directory recipe 2024-10-16 00:02:15 -03:00
d7d9d5e6ea Changed expected executable name in batch 2024-10-16 00:00:17 -03:00
46d3a584b4 revert f5a8420025
revert Merge pull request 'Receba Makefile' (#10) from dnk-general into master
Deu bosta, makefile só funciona no Linux por enquanto, outro dia a gente arruma pra funcionar nos 2 OS's
2024-10-15 23:58:32 -03:00
f5a8420025 Merge pull request 'Receba Makefile' (#10) from dnk-general into master 2024-10-15 23:51:10 -03:00
4 changed files with 35 additions and 54 deletions

View File

@@ -1,46 +1,43 @@
# Pontifícia Universidade Católica de Goiás
# Solução para o problema Bin Packing
## Escola Politécnica e de Artes
Este projeto é a solução do Danilo Barcelos e do Allann Cintra para o 2º Desafio em Otimização com Meta-heurística. Ele segue esta seguinte estrutura de arquivos:
### Ciência da Computação
- A pasta "src" contém o código-fonte do programa da solução
- A pasta "Docs" contém o arquivo do Writer que foi convertido em PDF para submissão
- A pasta "test" contém os casos de teste utilizados. Ela contém o conjunto completo de casos de teste, o conjunto reduzido para debugging, e o arquivo contendo as soluções ótimas de todos os casos
- Na pasta raiz você encontrará os scripts que ajudam a testar vários casos de teste de forma rápida
Alunos: Allann Barbosa Cintra, Danilo Matias Barcelos
# Modo de Usar
***
## No Linux
## 2º Desafio em Otimização com Meta-heurística
Compile o programa usando makefile `> make`, ou manualmente `> g++ src/main.cpp src/random.cpp src/sa.cpp -o build/sabp`. Após isso você pode rodar o programa manualmente `> build/sabp`, digitando o caso de teste no terminal, ou usando o script "run.sh".
### Problema do Empacotamento Solução com Recozimento Simulado
Para usar ele, basta chamá-lo, por padrão ele busca o executável no lugar onde o makefile compila, e os testes em `test/reduced`. Caso queira mudar onde ele busca as coisas, pode-se usar estas variáveis:
#### Tópicos:
- EXEC: Caminho do executável
- TEST_FOLDER: Caminho da pasta que contém casos de teste. Cada caso deve ser um arquivo de texto
- SOLUTIONS_FILE: Caminho do arquivo de soluções
1. Introdução
Aqui vai um exemplo de comando para usar o script, supondo que todos os arquivos necessários estão em `/tmp/files`:
1.1. Ambiente de Teste & Desenvolvimento
`EXEC=/tmp/files/exec.out TEST_FOLDER=/tmp/files/tests SOLUTIONS_FILE=/tmp/files/solucoes.txt ./run.sh`
1.2. Instâncias Utilizadas
NOTA: O script bash não diz quanto tempo cada caso de teste levou
2. Meta-heurística utilizada
## No Windows
2.1. Descrição
Compile o programa manualmente, pois o makefile não funciona no Windows `> g++ src/main.cpp src/random.cpp src/sa.cpp -o build/sabp.exe`. Após isso você pode rodar o programa manualmente `> build\sabp.exe`, digitando o caso de teste no terminal, ou usando o script "run.bat".
2.2. Implementação
Para usar ele, basta chamálo, por padrão ele busca o executável no lugar onde ele estaria se o makefile funcionasse no Windows (`build\sabp.exe`), e os testes em `test\reduced`. Caso queira mudar seu comportamento, pode-se usar estas variáveis:
2.3. Variações Testadas
- EXEC: Caminho do executável (Parece que precisa estar em aspas? Batch é estranho)
- TEST_FOLDER: Caminho da pasta que contém casos de teste. Cada caso deve ser um arquivo de texto
- ARGS: Define os argumentos a se passar para o programa. O programa suporta 2 argumentos: i=Não imprimir informações sobre as iterações; c=Não imprimir conteúdos das caixas
- SOLUTIONS_FILE: Caminho do arquivo de soluções
2.4. Resultados
Aqui vai um exemplo de comando para usar o script, supondo que todos os arquivos necessários estão em `C:\arquivos`, e que você está interessado no conteúdo das caixas, mas não nas informações sobre iterações:
3. Conclusão
`set EXEC="C:\arquivos\prog.exe"&& set TEST_FOLDER=C:\arquivos\testes&& set SOLUTIONS_FILE=C:\arquivos\testes\Solucoes.txt&& set ARGS=i&& run.bat`
***
## Introdução
Este documento é a entrega única do nosso grupo, ele contém todas as informações requisitadas para a submissão do desafio.
### Ambiente de Teste & Desenvolvimento
Os computadores pessoais dos dois integrantes foram utilizados em todos os processos deste desafio.
O computador do integrante Danilo Barcelos é um computador de mesa sem modelo, possui o processador Ryzen 5 3400G, a placa-mãe ASUS A320M, e 12 GB de memória RAM com 2666 MHz de velocidade. Não possui GPU dedicada. Usa o sistema operacional Windows 10, e o IDE Visual Studio Code.
O integrante Allann Cintra possui ???. Ele usa o sistema operacional Linux, com a distribuição Gentoo, e programa na IDE NeoVim.
Os resultados dos testes contidos neste documento foram obtidos executando o algoritmo através do script “launch.bat” contido no diretório raiz do projeto no repositório. Todos os testes foram realizados no computador do Danilo. Para executar o algoritmo em um ambiente Linux, basta executar o script “launch.sh”.
Este script não procura o arquivo de soluções por padrão, mas diz quantos segundos cada caso de teste levou para ser processado. Se a saída deste script for redirecionada para um arquivo, e um arquivo de soluções foi especificado, pode-se usar o script getstats.py para obter estatísticas do teste.

View File

@@ -12,22 +12,11 @@ warnings = -Wall -Wextra -Werror -Wformat=2 -Wno-maybe-uninitialized \
sanitize = -fsanitize=address,undefined,pointer-compare,pointer-subtract
debug_flags = -ggdb3 -Og -DDEBUG -Wformat-truncation=2 $(sanitize)
ifeq ($(OS),Windows_NT)
CC := gcc
CXX := g++
else
CC := /usr/bin/gcc
CXX := /usr/bin/g++
endif
CC := /usr/bin/gcc
CXX := /usr/bin/g++
builddir := build
ifeq ($(OS),Windows_NT)
objectname = sabp.exe
makebuilddircmd = mkdir $(builddir)
else
objectname = sabp
makebuilddircmd = mkdir -p $(builddir)
endif
objectname = sabp
objectdir = $(builddir)/$(objectname)
.PHONY: all debug
@@ -46,7 +35,7 @@ $(builddir)/sa.o:src/sa.cpp
$(CXX) $(CPPFLAGS) src/sa.cpp -o $(builddir)/sa.o -c
$(builddir):
$(makebuilddircmd)
mkdir -p $(builddir)
set_flags:
$(eval override CPPFLAGS += $(warnings) $(optimize_flags) $(standart))
@@ -55,8 +44,4 @@ set_debug_flags:
$(eval override CPPFLAGS += $(warnings) $(sanitize) $(debug_flags))
clean:
ifeq ($(OS),Windows_NT)
RMDIR "$(builddir)" /S /Q
else
rm -rf $(builddir)
endif

View File

@@ -10,9 +10,8 @@ if not defined TEST_FOLDER (
set TEST_FOLDER=test\reduced
)
if defined ARGS (
set ARGS=-%ARGS%
)
rem I need to fix this later, dear God...
set ARGS=-ic
if defined SOLUTIONS_FILE (
for /f "tokens=1,2 skip=1" %%a in (%SOLUTIONS_FILE%) do (

4
run.sh
View File

@@ -7,11 +7,11 @@ if [[ -z $EXEC ]]; then
fi
if [[ -z $TEST_FOLDER ]]; then
TEST_FOLDER="test"
TEST_FOLDER="test/reduced"
fi
if [[ -z $SOLUTIONS_FILE ]]; then
SOLUTIONS_FILE=solucoes.txt
SOLUTIONS_FILE=test/solucoes.txt
fi
declare -A solutions