Escolar Documentos
Profissional Documentos
Cultura Documentos
BANCA EXAMINADORA:
____________________________________________
Prof. D.Sc. Philippe Leal Freire dos Santos (orientador)
Instituto Federal Fluminense
____________________________________________
Prof. D.Sc. Mark Douglas de Azevedo Jacyntho
Instituto Federal Fluminense
____________________________________________
Prof. M.Sc. Rogério de Avellar Campos Cordeiro
Instituto Federal Fluminense
Dedicamos este trabalho aos nossos
familiares e amigos que de forma direta ou
indireta nos ajudaram a vencer as etapas
deste desafio.
AGRADECIMENTOS
1
Algoritmos Genéticos com Chaves Aleatórias (Random Key Genetic Algorithms –
RKGA, em inglês). A partir da estrutura estabelecida pelo RKGA, Ericsson et al.
(2002) propuseram uma alteração na escolha de um dos dois indivíduos que serão
submetidos ao processo de cruzamento, dando origem aos Algoritmos Genéticos
com Chaves Aleatórias Tendenciosas (em inglês, Biased Random Key Genetic
Algorithms – BRKGA).
Assim, o presente trabalho tem o objetivo de propor heurísticas baseadas nos
Algoritmos Genéticos com Chaves Aleatórias Tendenciosas para solucionar o
Problema da Mochila Binária (PMB), tendo como foco investigar, dentre os métodos
de seleção Roleta, Torneio e o padrão do BRKGA, aquele que apresenta as
melhores soluções para o problema, baseando-se em medidas de qualidade.
Este trabalho está organizado em cinco capítulos. O Capítulo II apresenta o
Problema da Mochila e algumas de suas variações, dentre elas o Problema da
Mochila Binária. As heurísticas propostas baseadas na metaheurística BRKGA a fim
de solucionar o PMB são descritas no Capítulo III. O Capitulo IV apresenta os
experimentos computacionais realizados, bem como os resultados obtidos. Por fim,
as conclusões e sugestões para trabalhos futuros são apresentadas no Capitulo V.
2
II. O Problema da Mochila
2.1. Introdução
2.2. Formulação
ganho Vi são dados, i = 1,...,n, deseja-se escolher a quantidade de cada item que
será alocado na mochila, de modo que a sua capacidade não seja ultrapassada e o
ganho total seja máximo. Assim, pode-se definir um modelo matemático para o
problema por:
Variável de Decisão:
- : quantidade de itens do tipo i selecionados, i = 1,...,n.
Modelagem Matemática:
(2.1)
sujeito a:
(2.2)
(2.3)
3
A função objetivo (2.1) maximiza a soma dos ganhos dos itens alocados. A
restrição (2.2) impõe que o peso total dos itens alocados não ultrapasse a
capacidade da mochila, enquanto a restrição (2.3) indica que a variável tem que
ser inteira não-negativa.
4
Variável de Decisão:
- : 1 se o item i for selecionado e caso contrário, i = 1,...,n.
Modelagem Matemática:
(2.4)
sujeito a:
(2.5)
(2.6)
A função objetivo (2.4) maximiza a soma dos ganhos dos itens alocados. A
restrição (2.5) impõe que o peso total dos itens alocados não ultrapasse a
capacidade da mochila, enquanto a restrição (2.6) indica a integralidade da variável
.
Mochila Binária, onde Vi = Pi, para i = 1,...,n, sendo também conhecido como o
Problema da Mochila de Valor Independente.
5
2.3.4 O Problema do Troco
(i = 1,...,n), tal que o peso total seja C e o número total de itens selecionados seja
mínimo.
O problema é chamado Problema do Troco, pois pode ser interpretado como
o problema de um caixa (supermercado, banco, etc.), que deve devolver uma
determinada quantia C, usando, para isto, um número mínimo de moedas de valores
mochilas (m ≤ n) cujas capacidades são dadas por Cj, j = 1,...,m. O mesmo consiste
em selecionar subconjuntos disjuntos de itens, tal que o valor de utilidade destes
itens seja máximo e cada subconjunto possa ser associado a uma mochila diferente,
cuja capacidade não seja menor que o peso total dos itens no subconjunto.
6
associar cada item a exatamente uma mochila, visando maximizar o ganho real total,
sem associar a nenhuma mochila um peso total que ultrapasse sua capacidade.
7
III. Algoritmos Genéticos com Chaves Aleatórias
Tendenciosas
9
Seleção: indivíduos são selecionados para a reprodução (cruzamento). A
probabilidade de uma dada solução i ser selecionada é proporcional à sua aptidão;
Cruzamento: características das soluções escolhidas são recombinadas,
gerando novos indivíduos;
Mutação: características dos indivíduos resultantes do processo de
reprodução são alteradas, acrescentando assim variedade à população;
Atualização: os indivíduos criados nesta geração são inseridos na população;
Finalização: analisa se as condições de encerramento da evolução foram
atingidas, retornando para a etapa de avaliação em caso negativo e encerrando a
execução em caso positivo.
10
são indivíduos gerados do mesmo modo que aqueles da população inicial e com
finalidade idêntica ao operador de mutação presente nos AGs. Os demais indivíduos
são gerados pelo cruzamento de outros dois, que são selecionados aleatoriamente
de toda a população corrente (elite e não-elite). A Figura 2 ilustra esse processo de
evolução da população.
11
probabilidade do descendente herdar o alelo do indivíduo elite e de herdar
do indivíduo não-elite.
A Figura 3 demonstra o processo de cruzamento de um indivíduo elite com
outro não-elite. O número de genes (n) é igual a 5 e o valor de é igual a 0,7. Então,
um número real é gerado aleatoriamente no intervalo [0,1). Caso o valor gerado seja
menor do que a 0,7, o descendente herda o alelo do indivíduo elite. Caso contrário,
ele herda o alelo do indivíduo não-elite. Neste exemplo, o descendente herdou o
alelo do indivíduo elite do primeiro, terceiro e quinto genes.
12
Figura 4: Fluxograma de um BRKGA (Extraída de Gonçalves e Resende (2011)).
Para problemas de otimização mais complexos, como o Problema da Mochila,
e que exigem uma solução em tempo hábil, a heurística BRKGA vem sendo utilizada
em várias áreas, por sua confiabilidade e geração de bons resultados.
Para exemplificar, no trabalho de Brito et al. (2017), o BRKGA foi utilizado
para solucionar o Problema de Agrupamento com Soma Mínima. Neste problema,
devem-se alocar os n objetos de uma base de dados em k grupos, de forma que o
somatório das distâncias entre todos os pares de objetos, dentro de cada um dos
grupos, seja mínimo.
Em Rizzi et al. (2017), os autores aplicaram o BRKGA ao Problema de
Alocação Tática de Berços, que consiste em alocar navios nos berços de atracação
e definir o perfil de guindastes que serão utilizados para carregamento e
descarregamento das cargas. O objetivo é minimizar o custo de serviço em transferir
as cargas entre os navios atracados e otimizar a utilização dos guindastes
disponíveis para as tarefas.
Outra aplicação pode ser encontrada em Cavalheiro e Filho (2017), que
abordaram o Problema de Distribuição de Energia Elétrica. O trabalho estuda
alternativas de encontrar as melhores configurações de redes de distribuição
utilizando o BRKGA com a inclusão de uma busca local. Os estudos de casos
indicam que a inserção da busca local no processo evolutivo pode trazer benefícios
na qualidade das soluções encontradas.
Como demonstrado, o BRKGA tem sido utilizado em diversas aplicabilidades
práticas, juntamente com outros métodos, como Programação Dinâmica (DIAS,
13
2010), Algoritmos Gulosos (ROCHA; DORINI, 2004), Branch-and-Bound
(NARENDRA; FUKUNAGA, 1977), entre outros.
Na seção seguinte serão apresentados o decodificador e os métodos de
seleção empregados nas heurísticas baseadas nos Algoritmos Genéticos com
Chaves Aleatórias Tendenciosas (BRKGA) propostas neste trabalho a fim de
solucionar o Problema da Mochila Binária (PMB).
3.1.1. Decodificador
14
Algoritmo 1: Decodificador
Entrada: Indivíduo I.
Saída: Valor de fitness do indivíduo I.
1 Ordene os itens It pelas suas chaves aleatórias:
2
3
4 para e faça
5 se então
6
7
8 fim se
9 fim para
10
15
seleção comumente empregados. Os métodos utilizados neste trabalho são
descritos a seguir.
16
Apresentados os componentes das heurísticas propostas, as mesmas foram
nomeadas de acordo com o método de seleção empregado, sendo importante
ressaltar que todas elas utilizaram o mesmo decodificador. A heurística que utilizou
o método de seleção padrão dos BRKGAs, que é a seleção aleatória de um
indivíduo elite e de outro não-elite, foi intitulada simplesmente de BRKGA. A que
empregou o método de seleção Roleta foi chamada de BRKGA-Roleta, sendo
intitulada BRKGA-Torneio a que fez uso do método Torneio. Os experimentos
computacionais com tais heurísticas sobre um conjunto de instâncias do PMB, a fim
de avaliá-las na resolução do problema, são descritos no próximo capítulo.
17
IV. Experimentos Computacionais
utilizado. A quantidade de itens n assumiu os valores 50, 100, 200, 1000, 2000,
5000, 10000. Considerou-se também, segundo Pisinger (2003), a faixa de
coeficientes igual 1000, o número de instâncias igual a 1, o índice da instância
também igual a 1 e o tipo de critério Weakly Correlated Instances (Instâncias
Fracamente Correlatas), onde o peso ( ) de cada item é escolhido randomicamente
em [1,R] e o ganho ( ) em [ – R/10, + R/10], sendo maior ou igual a 1. Para
cada valor assumido por n, uma instância foi gerada e um valor para a capacidade
da mochila foi calculado a partir da seguinte fórmula:
onde:
C: capacidade da mochila;
i: índice da instância;
S: número de instâncias;
n: quantidade de itens;
j: índice do item;
: peso do item j.
Foram realizados teste de ajustes para definir qual seria a melhor combinação
de valores para os seguintes parâmetros: tamanho da população (P), porcentagem
19
5.2 Análise de Qualidade das Soluções
Tempo
Melhor Menor Valor Maior Desvio
Instância Médio
Valor Valor Médio Valor Médio (%)
(s)
50 12867 12643 12742,60 12783 9,62 0,001
100 27659 27193 27412,50 27542 8,87 0,001
200 51151 50648 50874,80 51151 5,35 0,002
2000 592910 589110 590509,80 592910 4,01 0,020
5000 1260010 1257620 1258294,00 1259510 1,30 0,054
10000 2516590 2512100 2513399,00 2514680 1,20 0,115
Tabela 2: Valores obtidos pela heurística BRKGA.
20
Tempo
Melhor Menor Valor Maior Desvio
Instância Médio
Valor Valor Médio Valor Médio (%)
(s)
50 12867 12683 12755,40 12859 8,63 0,001
100 27659 27253 27418,60 27547 8,65 0,001
200 51151 50750 50889,10 51128 5,09 0,002
2000 592910 589710 590580,00 591210 3,88 0,021
5000 1260010 1257410 1258338,00 1259230 1,27 0,055
10000 2516590 2512200 2513530,00 2514890 1,17 0,112
Tabela 3: Valores obtidos pela heurística BRKGA-Roleta.
Tempo
Melhor Menor Valor Maior Desvio
Instância Médio
Valor Valor Médio Valor Médio (%)
(s)
50 12867 12716 12801,90 12867 5,01 0,001
100 27659 27385 27508,70 27659 5,37 0,001
200 51151 50779 50935,00 51112 4,15 0,002
2000 592910 590002 590829,00 592610 3,46 0,021
5000 1260010 1258360 1258993,00 1260010 0,77 0,057
10000 2516590 2513180 2514708,00 2516590 0,70 0,114
Tabela 4: Valores obtidos pela heurística BRKGA-Torneio.
21
valor de Dev, melhor é a performance do algoritmo. Pode-se verificar um modelo
matemático para encontrar o valor de Dev por:
22
V. Conclusão e Trabalhos Futuros
Como pôde ser visto, até o momento não foi encontrado nenhum algoritmo
determinístico de tempo polinomial que resolva problemas pertencentes à classe
NP-Completo, sendo uma boa alternativa para resolvê-los o uso de metaheurísticas.
Neste trabalho a metaheurística abordada foram os Algoritmos Genéticos com
Chaves Aleatórias Tendenciosas (BRKGA). Desse modo, foram implementados o
decodificador, com a finalidade de traduzir o Problema da Mochila Binária (PMB)
para o BRKGA, e os métodos de seleção Roleta e Torneio, gerando três heurísticas
baseadas na metaheurística BRKGA: BRKGA com o método de seleção padrão
(BRKGA), BRKGA com seleção Roleta (BRKGA-Roleta) e BRKGA com seleção
Torneio (BRKGA-Torneio). Assim, o intuito foi comparar estas heurísticas avaliando
a performance de cada uma na resolução do PMB a partir de medidas de qualidade.
Após a realização dos experimentos computacionais, foi realizada a
comparação dos algoritmos propostos, sendo observado que o BRKGA-Torneio foi o
que apresentou os melhores valores para as medidas utilizadas. Realizando uma
análise criteriosa, pode-se perceber que este método de seleção teria sido
considerada uma má escolha devido ao seu funcionamento, que possibilita que
indivíduos representando soluções não tão boas sejam escolhidos com a mesma
probabilidade dos bons indivíduos, já que a escolha é feita de forma aleatória.
Porém, este método de seleção possui uma característica que provavelmente
foi relevante para o seu bom desempenho, que é gerar diversidade na população,
elevando a cobertura do espaço de busca do problema.
Como trabalhos futuros podem ser aplicados outros métodos de seleção,
conforme foi mostrado no Capítulo 2, com a heurística BRKGA para fazer uma
comparação das suas performances e serem analisadas suas medidas,
possibilitando uma melhor avaliação de tais métodos.
Outra proposta seria aumentar o número de gerações juntamente com o
tamanho da população. Este aumento pode proporcionar uma melhora no valor de
solução, pois cresce o número de tentativas de se obter indivíduos mais bem
adaptados, embora também resulte no aumento do tempo de execução.
23
REFERÊNCIAS BIBLIOGRÁFICAS
Bean, James C. Genetic algorithms and random keys for sequencing and
optimization. ORSA Journal on Computing, v. 6, n. 2, p. 154-160, 1994.
Brito, José A.; Fadel, Augusto C.; Semaan, Gustavo S.; Brito, Luciana R. Algoritmo
Genético de Chaves Aleatórias Viciadas Aplicado ao Problema de
Agrupamento com soma mínima. Blumenau. XLIX Simpósio Brasileiro de
Pesquisa Operacional, 2017.
Brandão, Julliany S.; Noronha, Thiago F.; Resende, Mauricio G. C.; Ribeiro, Celso C.
A biased random‐key genetic algorithm for single‐round divisible load
scheduling. International Transactions in Operational Research, v. 22, n. 5, p. 823-
839, 2015.
Ericsson, M.; Resende, Mauricio G. C.; Pardalos, Panos .M. A genetic algorithm for
the weight setting problem in OSPF routing. Journal of Combinatorial
Optimization, v. 6, n. 3, p. 299-333, 2002.
24
Marques-Silva, João P.; Sakallah, Karem A. GRASP: A search algorithm for
propositional satisfiability. IEEE Transactions on Computers, v. 48, n. 5, p. 506-
521, 1999.
Pisinger,D.; Martello. S; Toth, P. New Trends in Exact Algorithms for the 0-1
Knapsack Problem. Technical Report 97-10, DIKU, University of Copenhagen,
Denmark,1997.
Pisinger,D. Where Are the Hard Knapsack Problems?. Technical Report 03-08,
DIKU, University of Copenhagen, Denmark, 2003.
Resende, Mauricio G. C.; Martí, R.; Gallego, M.; Duarte, A. GRASP and path
relinking for the max–min diversity problem. Computers & Operations Research,
v. 37, n. 3, p. 498-508, 2010.
Ribeiro, Celso C.; Uchoa, Eduardo; Werneck, Renato F. A hybrid GRASP with
perturbations for the Steiner problem in graphs. INFORMS Journal on
Computing, v. 14, n. 3, p. 228-246, 2002.
Rizzi, Mateus M.; Pomari, Carlos Z.; Oliveira, Rudinei M.; Chaves, Antonio A.;
Lorena, Luiz A. N. Metaheurística híbrida aplicada ao problema de alocação
tática de berços. Blumenau. XLIX Simpósio Brasileiro de Pesquisa Operacional,
2017.
25
Santos, Philippe L. F. Heurísticas para o Problema da Partição Cromática de
Custo Mínimo. 110 f. Tese (Doutorado em Computação) - Instituto de Computação,
Universidade Federal Fluminense, Niterói, 2018.
Van Laarhoven, Peter J.M.; Aarts, Emile H.L. Simulated annealing. In: Simulated
annealing: Theory and applications. Springer, Dordrecht, 1987. p. 7-15.
26
ANEXO I: Decodificador
/*
* SampleDecoder.cpp
*
*Criado em: Agosto, 2018
*Autor: Caio & Patricia
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <stdlib.h>
#include <sys/time.h>
#include "SampleDecoder.h"
#include "VetorGanhoPeso.h"
SampleDecoder::SampleDecoder() { }
SampleDecoder::~SampleDecoder() { }
std::vector<RandomKeyItem> VetorItemRK(chromosome.size());
std::vector<unsigned> ItemAlocado(chromosome.size());
for(int i = 0; i <chromosome.size();i++)
{
VetorItemRK[i].first = chromosome[i]; // first é a
chave aleatória
VetorItemRK[i].second = i; // second é a posição do
item
ItemAlocado[i] = 0; // vetor que informa se o item foi
alocado "1" ou não "0"
}
27
// Verifica se o item pode ser alocado na mochila e calcula o
valor de todos os itens
for (int i; (i < chromosome.size()) && (pesoAlocado <
sizeknapsack);i++){
item = VetorItemRK[i].second;
if (pesoAlocado + VetorGanhoPeso[item].second
<= sizeknapsack)
{
pesoAlocado =
VetorGanhoPeso[item].second + pesoAlocado;
ganhoAlocado =
VetorGanhoPeso[item].first + ganhoAlocado;
ItemAlocado[i] = 1;
28
ANEXO II: Método de Seleção Roleta
/*-----------------------Criando Vetores----------------------------*/
vtElite[y].first = y;
vtElite[y].second = vtPerctFitness[y].second;
somaElite = somaElite + vtElite[y].second;
}
29
std::sort(vtElite.rbegin(), vtElite.rend());
}
*/
/*Inserir porcetagem Vetor População Elite*/
vtElite[y].second = (vtElite[y].second)/somaElite;
}
/*
for (y=0; y < pe; y++){
}
*/
/*--------------------Vetor Não Elite - Inserindo valores------------*/
std::sort(vtNaoElite.begin(), vtNaoElite.end());
}
*/
/*Inserir porcetagem Vetor População Não Elite*/
/*
for (y = pe; y < p; y++){
}
*/
identElite = 0;
selecionadoElite = vtElite[identElite].second;
sorteioElite = refRNG.rand();
selecionadoElite=selecionadoElite+vtElite[identElite].second;
identNaoElite = pe;
selecionadoNaoElite = vtNaoElite[identNaoElite].second;
sorteioNaoElite = refRNG.rand();
31
//std::cout << "\n\n SORTEIO NÃO ELITE: " << sorteioNaoElite;
identNaoElite++;
selecionadoNaoElite = selecionadoNaoElite +
vtNaoElite[identNaoElite].second;
32
ANEXO III: Método de Seleção Torneio
/*-----------------------Criando Vetores-----------------------------*/
33
vtElite[y].first = y;
vtElite[y].second = vtNewFitness[y].second;
}
*/
/*
for (y= pe; y < p; y++){
*/
auxiliarElite = pe;
//std::cout << "\n\n\n\n\nAuxiliar Elite: " <<
auxiliarElite;
for (y = 0; y < k; y++)
{
34
/*Compara os itens Elite*/
selecionadoElite = vtElite[auxiliarElite].second;
auxiliarNaoElite = p - pe;
//std::cout << "\n\n\n\n\nAuxiliar Não Elite: " <<
auxiliarNaoElite;
for (y = pe; y < pe + k ; y++)
{
posicaoNaoElite = pe + auxiliarNaoElite;
//std::cout << "\n\nPosição não Elite: " <<
posicaoNaoElite;
selecionadoNaoElite =
vtNaoElite[posicaoNaoElite].second;
/*-------------------------------------------------------------------*/
35