Compare commits
11 Commits
901e3a00ff
...
dnk-genera
| Author | SHA1 | Date | |
|---|---|---|---|
| aec9898091 | |||
| 3c8bed290d | |||
| 13ab972fdc | |||
| 4ca1da90fb | |||
| 6bab964dd5 | |||
| d7d9d5e6ea | |||
| 46d3a584b4 | |||
| f5a8420025 | |||
| 1e7ad317b8 | |||
| 0a47e5ffcb | |||
| 5f153a71d3 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -32,3 +32,4 @@
|
||||
*.out
|
||||
*.app
|
||||
|
||||
build
|
||||
|
||||
55
README.md
55
README.md
@@ -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.
|
||||
|
||||
47
makefile
Normal file
47
makefile
Normal file
@@ -0,0 +1,47 @@
|
||||
# Flag para alterar o padrão do compilador
|
||||
standart = -std=c++17
|
||||
|
||||
# Flags para otimizar o arquivo executável
|
||||
optimize_flags = -O3 -pipe -flto
|
||||
|
||||
# Flags para ativar todos os avisos do compilador
|
||||
warnings = -Wall -Wextra -Werror -Wformat=2 -Wno-maybe-uninitialized \
|
||||
-Wformat-overflow=2 -Wundef -Wconversion -Wwrite-strings
|
||||
|
||||
# Flags para depurar o código
|
||||
sanitize = -fsanitize=address,undefined,pointer-compare,pointer-subtract
|
||||
debug_flags = -ggdb3 -Og -DDEBUG -Wformat-truncation=2 $(sanitize)
|
||||
|
||||
CC := /usr/bin/gcc
|
||||
CXX := /usr/bin/g++
|
||||
|
||||
builddir := build
|
||||
objectname = sabp
|
||||
objectdir = $(builddir)/$(objectname)
|
||||
|
||||
.PHONY: all debug
|
||||
|
||||
all:set_flags $(objectdir)
|
||||
|
||||
debug:set_debug_flags $(objectdir)
|
||||
|
||||
$(objectdir):$(builddir) $(builddir)/random.o $(builddir)/sa.o src/main.cpp
|
||||
$(CXX) $(CPPFLAGS) $(builddir)/random.o $(builddir)/sa.o src/main.cpp -o $(objectdir)
|
||||
|
||||
$(builddir)/random.o:src/random.cpp
|
||||
$(CXX) $(CPPFLAGS) src/random.cpp -o $(builddir)/random.o -c
|
||||
|
||||
$(builddir)/sa.o:src/sa.cpp
|
||||
$(CXX) $(CPPFLAGS) src/sa.cpp -o $(builddir)/sa.o -c
|
||||
|
||||
$(builddir):
|
||||
mkdir -p $(builddir)
|
||||
|
||||
set_flags:
|
||||
$(eval override CPPFLAGS += $(warnings) $(optimize_flags) $(standart))
|
||||
|
||||
set_debug_flags:
|
||||
$(eval override CPPFLAGS += $(warnings) $(sanitize) $(debug_flags))
|
||||
|
||||
clean:
|
||||
rm -rf $(builddir)
|
||||
7
run.bat
7
run.bat
@@ -3,16 +3,15 @@
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
if not defined EXEC (
|
||||
set EXEC="build\main.exe"
|
||||
set EXEC="build\sabp.exe"
|
||||
)
|
||||
|
||||
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 (
|
||||
|
||||
6
run.sh
6
run.sh
@@ -3,15 +3,15 @@
|
||||
IFS=$'\n'
|
||||
|
||||
if [[ -z $EXEC ]]; then
|
||||
EXEC="build/main.out"
|
||||
EXEC="build/sabp"
|
||||
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
|
||||
|
||||
@@ -219,7 +219,7 @@ class solution {
|
||||
sequence10.reserve(boxes.size());
|
||||
sequence11.reserve(boxes.size());
|
||||
|
||||
for (size_t i = 0; i < choice; i++) {
|
||||
for (size_t i = 0; i < (size_t)choice; i++) {
|
||||
if (boxes[choice].swappable10(boxes[i], capacity)) {
|
||||
sequence10.push_back((int)i);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user