Você está na página 1de 4

- Trabalho Prático 2 -

Neste trabalho prático você, dentre outras, irá demonstrar suas habilidades com funções,
estruturas de dados, passagens de parâmetros por referência e valor. Em referido trabalho será
abordada a solução de problemas combinatórios, os quais, se resolvidos de maneira exata, irão
requerer um alto tempo de execução, mas que podem ser resolvidos com meio de heurísticas.

De modo geral, as soluções exatas podem ser obtidas com algoritmos de força bruta, e
buscam uma solução ótima para o problema (como ótimo adote a que gera o maior benefício). Por
outro lado, as heurísticas tentam encontrar uma solução aceitável através de estratégias bem
definidas para um problema específico, em um tempo inferior ao tratamento exato, mas abrem mão
da garantia de otimalidade da solução. Diferentemente das heurísticas, as metaheurísticas são
técnicas genéricas, independentes de problemas específicos, e podem ser aplicadas a uma ampla
gama de problemas de otimização. Neste trabalho serão implementados 4 diferentes abordagens
para solucionar o problema da Mochila Binaria (o mesmo explicado em sala de aula).

1. Uma abordagem gulosa, baseada na inserção de itens pelo menor peso;


2. Uma abordagem gulosa, baseada na inserção de itens pelo maior benefício;
3. Uma abordagem gulosa, baseada na inserção de itens pela maior relação benefício/peso;
4. Uma abordagem aleatória baseada na Meta-heurística Multi-Start;

Para explicações sobre o problema da Mochila Binaria, bem como sua representação computacional
em vetores, olhe o material de aula, e veja a gravação com a explicação de tal problema.

Entrada de dados:
Cada abordagem implementada deverá ser executada com base em valores lidos de um arquivo. Tal
arquivo será disponibilizado pelo professor, e possuirá as seguintes características.
Abordagem gulosa, baseada na inserção de itens pelo menor peso.
Tal abordem deverá começar a preencher o vetor de soluções da mochila a partir do item de menor
peso. No caso de haver dois itens com mesmo peso, o item escolhido deve ser o primeiro a ser
encontrado no vetor. Caso não seja possível incluir mais nenhum item sem extrapolar o limite da
mochila, a inserção deverá ser finalizada. Uma vez um item colocado na mochila, tal abordagem
não o retira mais, por isso é chamada abordagem gulosa.
No exemplo mostrado acima, os itens inseridos seriam na ordem:
“Item 1 ($1, 1Kg) + Item 3 ($5, 1Kg) + Item 6 ($1, 1Kg) + Item 2 ($4, 2Kg)”
O que gera um benefício de $11, e não extrapola a mochila, pois o peso total é de 5Kg, o limite que
a mochila suporta.

Abordagem gulosa, baseada na inserção de itens pelo maior benefício.


Tal abordem deverá começar a preencher o vetor de soluções da mochila a partir do item de maior
lucro ($ benefício). No caso de haver dois itens com mesmo benefício, o item escolhido deve ser o
primeiro a ser encontrado no vetor. Caso não seja possível incluir mais nenhum item sem extrapolar
o limite da mochila, a inserção deverá ser finalizada. Uma vez um item colocado na mochila, tal
abordagem não o retira mais, por isso é chamada abordagem gulosa.
No exemplo mostrado acima, os itens inseridos seriam na ordem:
“Item 4 ($8, 2Kg) + Item 3 ($5, 1Kg) + Item 2 ($4, 2Kg)”
O que gera um benefício de $17, e não extrapola a mochila, pois o peso total é de 5Kg, o limite que
a mochila suporta.

Abordagem gulosa, baseada na inserção de itens pela maior relação benefício/peso.


Tal abordem deverá começar a preencher o vetor de soluções da mochila a partir do item de maior
relação benefício/peso. No caso de haver dois itens com a mesma relação, o item escolhido deve
ser o primeiro a ser encontrado no vetor. Caso não seja possível incluir mais nenhum item sem
extrapolar o limite da mochila, a inserção deverá ser finalizada. Uma vez um item colocado na
mochila, tal abordagem não o retira mais, por isso é chamada abordagem gulosa.

Neste caso se deve calcular a relação benefício/peso de cada item antes de começar a inserção.
• Item 1: 1/1 = 1
• Item 2: 4/2 = 2
• Item 3: 5/1 = 5
• Item 4: 8/2 = 4
• Item 5: 1/3 = 0,333
• Item 6: 1/1 = 1

No exemplo mostrado acima, os itens inseridos seriam na ordem:


“Item 3 (relação 5, $5, 1Kg) + Item 4 (relação 4 $8, 2Kg) + Item 2 (relação 2 $4, 2Kg)”
O que gera um benefício de $17, e não extrapola a mochila, pois o peso total é de 5Kg, o limite que
a mochila suporta.

Abordagem aleatória baseada na Meta-heurística Multi-Start.


Um vez a solução pensada com um vetor, ela pode ser representada com o vetor binário preenchido
aleatoriamente, exemplo:

Nesta abordagem, devem ser geradas n soluções aleatórias, como no exemplo acima. O seu
algoritmo deve para cada solução gerada, verificar se é viável, se sim, calcular o beneficio dela. Se
o beneficio for maior que o da melhor solução já encontrada, armazene tal solução. Seu algoritmo
deve sempre a cada solução gerada, armazenar a melhor encontrada, desde que seja viável. Tal
funcionamento pode ser descrito no pseudocódigo abaixo.

Pesquisa bibliográfica
Cada grupo deverá realizar uma profunda pesquisa sobre o tema a ser trabalhado. Tal pesquisa
devera abordar os temas de soluções exatas, heurísticas e metaheurísticas. De modo introdutório ao
tema, essa pesquisa pode se iniciar em fontes não cientificas, como canais do YouTube, ou sites
como Wikipedia. Contudo, o trabalho de fato deverá ser embasado em fontes com um devido rigor
cientifico, e.g., artigos publicados ou livros disponíveis na biblioteca virtual de UFES. A
documentação do trabalho deverá obrigatoriamente conter uma seção de referências bibliográficas,
caso seja citado algum documento sem o devido rigor cientifico, serão descontados pontos
referentes a esta etapa.

Implementação
Nesta etapa deverão ser implementados as 4 abordagens descritas acima. Os algoritmos deverão ser
implementados na linguagem C, em um computador físico (não usar o GBD online), de forma
modularizada com cometários, utilizado funções, passagem de parâmetros e alocação dinâmica de
memória. Códigos que não funcionam, não, ou pouco comentados, e práticas indevidas de
programação, como nomear errado as variáveis e funções, acarretarão desconto de nota.

Documentação
A documentação deverá conter, nesta ordem, obrigatoriamente :
1. Nome e matrícula dos integrantes do grupo.
2. Descrição das atividades de cada componente do grupo.
3. Introdução geral ao problema. Quem apresentar e explicar o modelo matemático do
problema, ganhará 1 ponto extra.
4. Explicação textual dos algoritmos, com comentários sobre características, prós e contras de
cada um (não é necessário detalhar a complexidade de cada algoritmo). Esta etapa exige
uma pesquisa intensa e observação dos resultados.
5. Seção de experimentação (a ser detalhada na sequência).
6. Conclusões.
7. Referencias bibliográficas.
Experimentações
Os experimentos devem ser conduzidos em um único computador, e sem outros softwares
executando em simultâneo, pois, pode afetar o tempo de processamento. Você deverá descrever o
ambiente de experimentação (computador) utilizado para executar os experimentos. Devem ser
utilizados para os experimentos as 4 abordagens implementados pelo seu grupo. A cada
experimento deve ser reportado o benefício da melhor solução viável gerada, bem como o tempo de
execução para achar tal solução. Logo, cronometre o tempo de execução como feito no trabalho
prático I. Por boa prática, os gráficos dos tempos devem ser mostrados em escala logarítmica. Cada
gráfico deve ser comentado, a profundidade da análise dos cometários sobre os gráficos irá implicar
na nota desta etapa.

Serão disponibilizadas 5 instâncias do problema pelo professor. Cada instância deve ser avaliada
com uma abordagem diferente, e ter seus resultados mostrados em um gráfico (ou coluna de
gráfico). Para a abordagem Multi-Start, devem obrigatoriamente serem feitos experimentos com os
valores de n ∈{250, 500, 1000, 2000}.

Explicação da implementação
Todos integrantes do grupo devem estar presentes em uma entrevista a ser agendada pelo Google
Meet. Na entrevista poderão ser perguntados aspectos do código, com foco nos algorítimos. Tal
entrevista terá entre 5 e 10 minutos.

Geral
Copias textuais ou de código da internet, se percebidas, serão penalizadas, ficando a etapa/trabalho
com nota 0. Todos os códigos devem ser comentados. A nota é para o grupo, certifique-se que o seu
colega está desempenhando um papel correto na equipe, se necessário ajude-o, ou realoque-o para
outra função. Caso algum aluno não esteja em sincronia com o grupo, favor comunicar o professor
para que a solução seja repensada, e as devidas atitudes tomadas.

Distribuição de pontos
No semestre são 30 pontos de trabalhos, como são 2 trabalhos, cada um valerá 15 pontos. Neste
trabalho os pontos são distribuídos da seguinte forma:
• Implementação – 5 pontos
• Documentação com experimentação – 5 pontos
• Explicação da implementação – 5 pontos

Regras de atrasos:
Se o trabalho for entregue com o atraso de 1 dia, a nota total será de até 70% da original.
Se o trabalho for entregue com o atraso de 2 dias, a nota total será de até 40% da original.
Se o trabalho for entregue com o atraso de 3 dias ou mais, a nota total será 0.
Data de entrega: 01 de outubro (não posso adiar, devido as provas finais)

No caso de dúvidas, pergunte o professor antes das aulas síncronas, ou por e-mail :)
Um abraço, e adiantem-se, quanto mais cedo começarem, mais cedo vão terminar!

Você também pode gostar