Compare commits

...

12 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
1e7ad317b8 Receba Makefile 2024-10-15 23:48:57 -03:00
0a47e5ffcb Update pretty much everything so that it compiles
Also update the script so that it uses the correct executable
2024-10-15 23:19:06 -03:00
5f153a71d3 Create makefile 2024-10-15 22:56:17 -03:00
6 changed files with 81 additions and 37 deletions

1
.gitignore vendored
View File

@@ -32,3 +32,4 @@
*.out *.out
*.app *.app
build

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`
*** 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.
## 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”.

47
makefile Normal file
View 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)

View File

@@ -3,16 +3,15 @@
setlocal enabledelayedexpansion setlocal enabledelayedexpansion
if not defined EXEC ( if not defined EXEC (
set EXEC="build\main.exe" set EXEC="build\sabp.exe"
) )
if not defined TEST_FOLDER ( if not defined TEST_FOLDER (
set TEST_FOLDER=test\reduced set TEST_FOLDER=test\reduced
) )
if defined ARGS ( rem I need to fix this later, dear God...
set ARGS=-%ARGS% set ARGS=-ic
)
if defined SOLUTIONS_FILE ( if defined SOLUTIONS_FILE (
for /f "tokens=1,2 skip=1" %%a in (%SOLUTIONS_FILE%) do ( for /f "tokens=1,2 skip=1" %%a in (%SOLUTIONS_FILE%) do (

6
run.sh
View File

@@ -3,15 +3,15 @@
IFS=$'\n' IFS=$'\n'
if [[ -z $EXEC ]]; then if [[ -z $EXEC ]]; then
EXEC="build/main.out" EXEC="build/sabp"
fi fi
if [[ -z $TEST_FOLDER ]]; then if [[ -z $TEST_FOLDER ]]; then
TEST_FOLDER="test" TEST_FOLDER="test/reduced"
fi fi
if [[ -z $SOLUTIONS_FILE ]]; then if [[ -z $SOLUTIONS_FILE ]]; then
SOLUTIONS_FILE=solucoes.txt SOLUTIONS_FILE=test/solucoes.txt
fi fi
declare -A solutions declare -A solutions

View File

@@ -219,7 +219,7 @@ class solution {
sequence10.reserve(boxes.size()); sequence10.reserve(boxes.size());
sequence11.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)) { if (boxes[choice].swappable10(boxes[i], capacity)) {
sequence10.push_back((int)i); sequence10.push_back((int)i);
} }