• Nenhum resultado encontrado

3 OTIMIZAÇAO MULTIOBJETIVO

3.2 ALGORITMOS EVOLUTIVOS MULTIOBJETIVOS

Segundo a teoria de Charles Darwin [20], a seleção natural é definida como a preservação de indivíduos mais adaptados ao ambiente. Dessa forma, na natureza tais indivíduos são aqueles que apresentam as maiores chances de sobreviver, competir e reproduzir. Durante o processo de evolução, normalmente, os indivíduos que apresentam características inferiores são eliminados.

Tais características são controladas por unidades, denominadas genes, que formam um conjunto chamado cromossomo. Durante as novas gerações, os melhores indivíduos sobrevivem e também repassam suas características genéticas para os descendentes durante o processo de reprodução.

Os Algoritmos Evolutivos (Evolutionary Algorithms - EAS) são inspirados na teoria da seleção natural e evolução biológica dos seres vivos, sendo empregados para otimização de processos considerados complexos. Esses algoritmos trabalham com uma população formada por um conjunto de cromossomos. Geralmente, um cromossomo representa uma única solução em um espaço de soluções. Pela utilização de operadores de recombinação (ou cruzamento) e mutação, os quais realizam alterações nos códigos genéticos dos indivíduos, novos elementos são gerados. Caso apresentem melhor código genético, os novos elementos são mantidos, substituindo seus antecessores. Para determinar se um elemento é melhor do que outro, faz-se uso de uma função de avaliação, denominada função de fitness [49].

Existem diferentes tipos de algoritmos evolutivos, sendo um deles os Algoritmos Genéticos (AGs). Os passos básicos do funcionamento de um AG são descritos a seguir [49]:

1. Inicialização: Consiste em gerar uma população com soluções candidatas, geralmente confeccionadas de maneira aleatória.

2. Avaliação: Com a população inicial gerada ou uma nova população descendente criada, avalia-se o fitness das soluções candidatas.

3. Seleção: Consiste em selecionar soluções com os melhores valores de fitness, para receberem operações genéticas.

4. Cruzamento: O cruzamento realiza a combinação de partes de duas soluções pais para criar novas soluções denominadas filhos, que possivelmente, apresentarão melhor valor de fitness.

5. Mutação: A mutação introduz mudanças aleatórias nas características do indivíduo, o que promove a diversidade genética na população.

6. Atualização: A população descendente criada a partir da seleção, cruzamento e mutação substitui a população pai.

7. Enquanto a condição de parada do algoritmo não for alcançada, os Passos 2-6 devem ser repetidos.

Algoritmos Evolutivos também são utilizados para resolver problemas de otimização multiobjetivo. Tais algoritmos são denominados Evolutionary Multiobjective Algorithms (EMOAs). Os EMOAs trabalham simultaneamente com um conjunto de possíveis soluções (população), o que possibilita que sejam encontradas várias soluções não-dominadas, consideradas ótimas, em apenas uma execução do algoritmo [12].

O primeiro EMOA implementando foi o Vector Evaluation Genetic Algorithm (VEGA).

Esse algoritmo foi introduzido em meados da década de 1980 tendo como objetivo principal

solucionar problemas de aprendizado de máquina. Foi a primeira vez que um algoritmo genético foi utilizado para resolver problemas multiobjetivos e, desde então, uma ampla variedade de algoritmos neste sentido foram propostos na literatura [15].

O algoritmo Non-dominated Sorting Genetic Algorithm II (NSGA-II) [20] é um dos mais utilizados no ramo de SBSE [39] e apresentou bons resultados para o problema de LPS [37, 55], incluído o problema de seleção abordado neste trabalho [60, 61]. O algoritmo NSGA-II é descrito na seção seguinte.

3.2.1 Non-dominated Sorting Genetic Algorithm II (NSGA-II)

O Non-dominated Sorting Genetic Algorithm (NSGA-II) [20] é um EMOA baseado em Algoritmo Genético que possui forte estratégia de elitismo, sendo considerado um dos algoritmos mais eficazes para resolução de problemas multiobjetivos. O NSGA-II visa a realizar a classificação das fronteiras fazendo uso de dois procedimentos de ordenação: a ordenação da população em um ranking por não-dominância (Fast Non-dominated Sorting Algorithm) e a ordenação individual pela distância de multidão (Crowding Distance Sorting), realizando a busca por soluções bem distribuídas no espaço [14, 20]. O pseudocódigo do NSGA-II é apresentado no Algoritmo 1. O algoritmo recebe como entrada o tamanho da população N, número de gerações g e as funções que serão otimizadas f k(x), sendo k o número de objetivos que serão otimizados.

A população inicial é gerada com base no tamanho da população recebido como entrada (linha

2). Os indivíduos são ordenados com base em seu rank (linhas 3 e 4) e então a população filha é gerada por meio de cruzamento e mutação (linhas 5 a 10).

Algoritmo 1: Pseudocódigo do NSGA-II (adaptado de [15]).

Entrada: N , g, f k(x) i início

Inicializa a população P0 de tamanho N ;

Avalia os valores dos objetivos dos indivíduos de P0;

Atribui um rank para os indivíduos de P0;

Gera a população filho Q0;

início

Seleção por torneio binário;

Cruzamento e mutação;

Calcula os valores dos objetivos dos indivíduos criados;

fimp ara t = 1 até g faça Rt = Pt + Qt;

p ara cada x e Rt faça

| Atribui um rank para x;

fim

Gera as fronteiras de soluções não dominadas (Ft) de acordo com o rank de cada solução;

Calcula o crowding distance para cada solução de Ft;

População Pt+i com as soluções das melhores fronteiras F ; Gera a população filho Qt+1;

início

Seleção por torneio binário;

Cruzamento e mutação;

Calcula os valores dos objetivos dos indivíduos criados;

23

A cada geração do algoritmo, os indivíduos das populações pais e filhos obtidos são ordenados e classificados de acordo com a dominância entre as soluções, formando diversas fronteiras (linhas 14 e 16). A primeira fronteira corresponde às soluções não-dominadas de toda a população, a segunda é constituída por todas a soluções que passam a ser não-dominadas, após a retirada das soluções da primeira fronteira, a terceira é composta por soluções que passam a ser não dominadas após a retirada das primeira e segunda fronteiras, e assim consecutivamente até que todas as soluções estejam classificadas em alguma fronteira.

Em cada fronteira uma ordenação é realizada utilizando uma outra medida, denominada distância de multidão (crowding distance), que tem como objetivo assegurar a diversidade das soluções (linha 17). O crowding distance calcula o quão distante uma solução está em relação aos seus vizinhos da mesma fronteira. Assim, é possível estabelecer uma ordem decrescente que privilegia as soluções mais espalhadas no espaço de busca. As soluções que estão no limite de espaço de busca possuem somente um vizinho, porém, são as mais diversificadas da fronteira, por isso, recebem altos valores de forma a ficarem no topo da ordenação.

As duas ordenações, de fronteiras e por distância de multidão, são utilizadas para determinar quais indivíduos irão sobreviver para a próxima geração. Além disso, também são

utilizadas pelo operador de seleção (linhas 7 e 21). A criação de novos indivíduos é realizada mediante aplicação dos operadores de cruzamento e mutação (linhas 8 e 22).

O processo de funcionamento do NSGA-II é representado na Figura 3.2, onde Pt representa a população pai e Qt representa a população filho. F1, F2 e F3 são fronteiras de soluções já ordenadas da união de Pt e Qt. Por fim, Pt+1 representa o conjunto de soluções que serão usadas na próxima geração, levando em consideração o tamanho da população, formada pelas melhores fronteiras (F1 e F2) e as soluções com a melhor distância de multidão da fronteira F3.

Figura 3.2: Funcionamento do NSGA-II (adaptada de [15]).

O algoritmo NSGA-II gera um conjunto de soluções espalhadas por todo o espaço de busca, formando a frente de Pareto, como descrito anteriormente. Entretanto, por muita vezes o testador esta interessando em uma única solução ou conjunto específicos dessa soluções. Para realizar tal tarefa, torna-se viável a utilização de algoritmos baseados em preferência, que guiam a busca por soluções que expressam especificamente o interesse do testador. Tais algoritmos são descritos nas seções seguintes.