• Nenhum resultado encontrado

O NSTA é uma proposta de hibridização do framework do NSGA-II com os operadores dos ATs. Modificações tanto do framework quanto dos operadores dos ATs foram necessárias para essa hibridização. O Algoritmo 7 apresenta o arcabouço geral do NSTA.

O comportamento do algoritmo é conforme segue. A população inicial é gerada de maneira aleatória de acordo com as características do problema abordado. Depois, os cro- mossomos (soluções) da população inicial são avaliados e o Rank de Dominância e o valor de

Algoritmo 7 Pseudocódigo Genérico do NSTA

1: Gerar e Avaliar a População Inicial

2: Associar um rank baseado em Dominância de Pareto para cada indivíduo

3: Inicializar os repositórios a priori e a posteriori do hospedeiro

4: Associar um valor de crowding a cada indivíduo

5: probPlasmídio ← valorInicialProbPlasmídio

6: probTransposon ← 1,0 - probPlasmídio

7: Repetir:

8: Escolher o repositório do hospedeiro a ser utilizado - a priori ou a posteriori

9: Selecionar a melhor cadeia de informação (CI)

10: Se (geraçãoAtual % β = 0) /*mudança de patamar*/

11: decrementar(probPlasmídio)

12: incrementar(probTransposon)

13: Fim Se

14: Para j = 1 até tamanhoPop fazer

15: SE (random() < probPlasmídio)

16: Filho[j] ← Plasmídio(Cromossomo[j], melhor(CI))

17: Senão

18: Filho[j] ← Transposon(Cromossomo[j], melhor(CI))

19: Fim Se

20: Fim Para

21: Unir a população de Filhos com a população de Cromossomos

22: Associar um rank baseado em Dominância de Pareto para cada indivíduo

23: Associar um valor de crowding a cada indivíduo

24: Escolher a próxima população baseando-se nos valores de rank e crowding

25: Atualizar o repositório de informações a posteriori do hospedeiro

26: Remover o melhor(CI) do repositório utilizado

27: Gerar uma nova cadeia de informação para o repositório utilizado

28: geraçãoAtual = geraçãoAtual + 1

29: Até: que o critério de parada seja satisfeito.

crowdingsão calculados. Então, dois repositórios de informações são criados. O primeiro repo- sitório, chamado de repositório a priori, é iniciado com informação sobre o problema abordado que podem ser obtidas antes do início do processo evolutivo. O segundo repositório, conhecido por repositório a posteriori, é iniciado com fragmentos dos melhores cromossomos gerados na população inicial. Os MC melhores cromossomos são armazenados neste repositório de maneira a gerar as cadeias de informação (fragmentos de soluções), onde MC é a quantidade de melhores cromossomos considerada para a geração das cadeias de informação. Diferentemente do que ocorre no MOTA/D, os melhores cromossomos são determinados pelo melhor Rank de Dominância e, em caso de empate com relação ao rank, pelo valor de crowding.

Cada repositório (a priori e a posteriori) é composto por uma quantidade fixa de cadeias de informação. Essa quantidade, geralmente, é proporcional a uma variável do pro- blema (ao número de mercados, por exemplo, no caso do caixeiro comprador). As cadeias de

informação possuem um tamanho mínimo e máximo que devem ser respeitados. Esses limites de tamanho podem ser variáveis no caso de problemas com representações de tamanho variável. Os fragmentos de uma solução que irão compor uma cadeia de informação são selecionados de maneira aleatória.

Após esta etapa de inicializações, o algoritmo NSTA entra no seu laço principal (Passos de 7 a 29 do Algoritmo 7. Nesta etapa são aplicados os vetores transgenéticos e a população e os repositórios de informações do hospedeiro são atualizados.

O primeiro passo na aplicação dos vetores transgenéticos é a escolha aleatória do repo- sitório que irá fornecer a cadeia de informação a ser utilizada. Ambos os repositórios costumam ter a mesma probabilidade de serem escolhidos. A melhor cadeia de informação do repositório escolhido é utilizada de acordo com o menor valor para a soma dos valores das funções obje- tivo. Esta cadeia de informação é utilizada como informação dos vetores transgenéticos para a manipulação de todos os cromossomos da população em uma determinada geração. Atual- mente, o NSTA utiliza apenas plasmídios e transponsons como vetores transgenéticos, mas isso não é uma restrição do algoritmo. A escolha entre utilizar plasmídios ou transponsons se dá de maneira aleatória e depende do estágio evolutivo do algoritmo: nos estágios iniciais a proba- bilidade de escolha do vetor plasmídio é maior, enquanto nos estágios finais a probabilidade de escolha do vetor transponson costuma ser superior. A variação da probabilidade de escolha de um ou outro vetor transgenético ocorre a cada β gerações, onde β é o tamanho dos patamares evolutivos adotados.

O vetor plasmídio age inserindo a cadeia de informação selecionada no cromossomo sendo manipulado. Cabe salientar que, diferentemente do que normalmente ocorre na Trans- genética Computacional, o vetor plasmídio utilizado no NSTA não faz uso do procedimento de ataque (p1). Isso ocorre para adequar o algoritmo ao arcabouço do NSGA-II, permitindo que um filho e o cromossomo original possam estar presentes na próxima população de cromos- somos; ou ainda que nem o cromossomo original nem seu filho estejam presentes. O primeiro caso, a longo prazo, pode resultar numa perda de diversidade da população. O vetor transponson corresponde à manipulação de uma parte do cromossomo sendo atacado.

Após a aplicação dos vetores transgenéticos, as populações de cromossomos originais e cromossomos filhos são unidas. Isto é contrário aos princípios da TC, a qual não aplica procedimentos de reprodução, mas foi necessário para a adaptação ao framework NSGA-II. Então, os cromossomos filhos são avaliados e os valores de Rank de Dominância e de crowding de cada cromossomo são recalculados, seguindo o mesmo procedimento adotado pelo NSGA- II. A seleção dos cromossomos que farão parte da próxima população é análoga àquela adotada

pelo NSGA-II e se baseia nos valores de rank e crowding dos cromossomos.

O repositório de informações a posteriori do hospedeiro é atualizado neste ponto do algoritmo. A atualização corresponde à inserção do melhor cromossomo gerado nesta iteração do laço principal. O melhor cromossomo é determinado pela soma dos valores dos seus obje- tivos. Esse melhor cromossomo somente é inserido no repositório caso ele seja melhor que o pior cromossomo armazenado no repositório. Caso isso ocorra o pior cromossomo armazenado é descartado para dar lugar ao melhor cromossomo desta geração. Caso contrário, nada ocorre durante a atualização.

Na sequência, a cadeia de informação utilizada durante a geração corrente (melhor(CI)) é eliminada do repositório utilizado, que pode ter sido tanto o repositório a priori quanto o a posteriori. Isto ocorre para evitar a convergência prematura do algoritmo. Uma nova cadeia de informação é gerada para substituir a que foi eliminada. O cromossomo que servirá como base para a geração da cadeia é sorteado de maneira aleatória dentre os cromossomos que compõem o repositório utilizado. Os fragmentos do cromossomo que irão compor a nova cadeia são escol- hidos de maneira aleatória. No caso da informação armazenada no repositório de informações a priorinão corresponder a um cromossomo (solução), esta informação é manipulada de forma a gerar fragmentos de soluções (um exemplo deste tipo de manipulação seria o uso de partes de uma árvore geradora mínima para o problema do caixeiro viajante).

Finalmente, é testado se o critério de parada foi satisfeito. Caso isso ocorra o algoritmo é encerrado; caso contrário uma nova iteração do laço principal é executada (nova geração) Os

Figura 16: Fluxograma com os passos do NSTA.

Para testar o seu potencial, o algoritmo NSTA também foi implementado e testado em dois diferentes problemas: o Problema do Caixeiro Comprador Biobjetivo (2PCC) e o Problema Quadrático de Alocação Multiobjetivo (mPQA). Estas duas implementações são detalhadas as seções a seguir.