Академический Документы
Профессиональный Документы
Культура Документы
Disciplina: Computao evolucionaria Professor: Bruno Henrique Groenner Barbosa Aluno: Elson Claudio Correa Moraes
computao para achar solues aproximadas em problemas de otimizao e busca, fundamentado principalmente pelo americano John Henry Holland. Algoritmos genticos so uma classe particular de algoritmos evolutivos que usam tcnicas inspiradas pela biologia evolutiva como hereditariedade, mutao, seleo natural e recombinao. Algoritmos genticos so implementados como uma simulao de computador em que uma populao de representaes abstratas de soluo selecionada em busca de solues melhores. A evoluo geralmente se inicia a partir de um conjunto de solues criado aleatoriamente e realizada por meio de geraes. A cada gerao, a adaptao de cada soluo na populao avaliada, alguns indivduos so selecionados para a prxima gerao, e recombinados ou mutados para formar uma nova populao. A nova populao ento utilizada como entrada para a prxima iterao do algoritmo.
1.2 O problema da caixa preta O problema consistem em encontrar a melhor configurao para um conjunto de 9 (a) botes que esto disponveis em uma caixa, sendo que cada boto pode assumir 16 posies distintas(b) Para representar a posio de cada boto no algoritmo, cada posio do boto representando com um conjunto de 4 bits (c) e cada individuo (cromossomo) representado pela disposio destes 9 botes, portanto 36 bits.
Representao para cada posio dos botes da caixa preta (c) 2. Codificao O trabalho pratico foi desenvolvido utilizando a ferramenta Matlab 8.0.0.783 (R2012b) 32 bits. O trabalho foi organizado em funes e um corpo principal para a chamada das funes chamado BlackBox.m. 2.1 Populaes iniciais e avaliao dos indivduos A populao inicial foi gerada no prprio main(BlackBox.m) em seguida chamada a funo avalia.m para gerao da avaliao de cada individuo de acordo com a funo abaixo:
sinalDeSaida = 9+(teta(2)*teta(5))-(teta(23)*teta(14))+... (teta(24)*teta(4))-(teta(21)*teta(10))+(teta(36)*teta(15))-... (teta(11)*teta(26))+(teta(16)*teta(17))+(teta(3)*teta(33))+... (teta(28)*teta(19))+(teta(12)*teta(34))-(teta(31)*teta(32))-... (teta(22)*teta(25))+(teta(35)*teta(27))-(teta(29)*teta(7))+... (teta(8)*teta(13))-(teta(6)*teta(9))+(teta(18)*teta(20))-... (teta(1)*teta(30))+(teta(23)*teta(4))+(teta(21)*teta(15))+... (teta(26)*teta(16))+(teta(31)*teta(12))+(teta(25)*teta(19))+... (teta(7)*teta(8))+(teta(9)*teta(18))+(teta(1)*teta(33));
Sendo teta a posio do bit dentro do indivduo (36 bits) 2.2 Selees dos indivduos Os mtodos de seleo dos indivduos para cruzamento foram implementadas nas funes roleta.m e sel_torneio.m. a- Seleo por roleta viciada cada indivduo da populao representado na roleta de forma proporcionalmente ao seu valor de aptido. b- Seleo por torneio: Em cada sorteio, dois indivduos so escolhidos aleatoriamente, e o melhor deles selecionado para a prxima gerao 2.3 Operadores genticos Aps a seleo dos individuos os mesmos vo cruzar entre si, gerando assim novos individuos. Foram adotados dois meios de cruzamento: Uniforme e ponto de corte,
cruzamento_corte.m. a- Cruzamento uniforme - Dois indivduos (pais) so selecionados aleatoriamente e os indivduos filhos so gerados com base em uma mscara de bit.
b- Ponto de Corte: So selecionados dois indivduos (pais) que do origem a dois novos indivduos (filhos). Um ponto de corte escolhido aleatoriamente nos pais e as partes separadas por esse ponto so trocadas.
2.4 Mutao A mutao muito importante para prevenir a convergncia para um maximo local. Na figura abaixo o objetivo da mutao a de evitar que o algoritmo admita que o ponto C uma Maximo global, realizando a mutao teremos maiores chances de encontrar o real maximo global (Ponto A).
A mutao feia pelas funes mutao_escolha_bit.m e mutao_bit_bit.m. a) Escolha aleatria do bit: Em cada indivduo, um bit escolhido aleatoriamente e o seu valor invertido. Esse operador aplicado em todos os indivduos da populao e a mutao ocorre de acordo com a taxa de mutao definida. b) Mutao bit a bit: A mutao ocorre bit a bit segundo uma probabilidade (taxa de mutao). A mutao bit a bit aplicada em todos os indivduos da populao.
2.5 Elitismo O elitismo ocorre na funo comelitismo.m e tem como objetivo preservar os melhores indivduos da gerao, de forma que o melhor indivduo de uma gerao sempre passado para a gerao seguinte.
2.6 Apresentao dos Resultados A apresentao dos resultados obtidos pelo Algoritmo Gentico feita no script principal padro, e BlackBox.m. A cada N* execues so apresentados o nmero de o boxplot dos valores de fitness. apresentado tambm o sucessos, o maior valor de fitness, o menor valor de fitness, a mdia, o desvio histograma dos melhores indivduos. *Valor de N a ser definido no programa 3 Testes e analise dos resultados 3.1 Primeiro teste: Para o primeiro teste, o algoritmo foi executado com a seguinte configurao de parmetros e foi utilizado o cruzamento com um ponto de corte e o cruzamento uniforme:
Utilizando cruzamento uniforme temos: Nmero de Sucessos: 0 Maior Fitness (Melhor caso): 23 Menor Fitness (Pior caso): 15 Valor mdio de Fitness: 20,34 Desvio-padro dos valores de Fitness: 2.48
Utilizando seleo por torneio temos: Nmero de Sucessos: 0 Maior Fitness (Melhor caso): 16 Menor Fitness (Pior caso): 11 Valor mdio de Fitness: 11,30 Desvio-padro dos valores de Fitness: 1,01
3.3. Terceiro Teste: Avaliao do Efeito do Tipo de Mutao Para avaliar o efeito do tipo de mutao, o algoritmo foi executado utilizando a configurao abaixo: a) Sem elitismo.
Utilizando mutao bit a bit temos: Nmero de Sucessos: 0 Maior Fitness (Melhor caso): 21 Menor Fitness (Pior caso): 16 Valor mdio de Fitness: 19.16 Desvio-padro dos valores de Fitness: 1.16
Utilizando mutao aleatria de bit temos: Nmero de Sucessos: 0 Maior Fitness (Melhor caso): 23 Menor Fitness (Pior caso): 16 Valor mdio de Fitness: 21.20 Desvio-padro dos valores de Fitness: 2,02
3.4. Quarto Teste: Avaliao do Efeito da Probabilidade de Cruzamento Foram realizados trs testes, variando o valor dessa probabilidade e mantendo fixos todos os outros parmetros. Foram utilizados os valores de parmetros a seguir e os valores utilizados para a taxa de cruzamento foram 0,2, 0,5 e 0,8:
Utilizando a taxa de cruzamento igual a 0,8 o resultado foi: Nmero de Sucessos: 0 Maior Fitness (Melhor caso): 24 Menor Fitness (Pior caso): 15 Valor mdio de Fitness: 21,08 Desvio-padro dos valores de Fitness: 2.73
Fig.14 Histograma utilizando taxa de cruzamento 0,8 Utilizando a taxa de cruzamento igual a 0,5 o resultado foi: Nmero de Sucessos: 0 Maior Fitness (Melhor caso): 25 Menor Fitness (Pior caso): 15 Valor mdio de Fitness: 20.17 Desvio-padro dos valores de Fitness: 1.9125
Utilizando a taxa de cruzamento igual a 0,2 o resultado foi: Nmero de Sucessos: 0 Maior Fitness (Melhor caso): 21
Utilizando a taxa de mutao igual a 0,05 o resultado foi: Nmero de Sucessos: 0 Maior Fitness (Melhor caso): 21 Menor Fitness (Pior caso): 16 Valor mdio de Fitness: 18,48 Desvio-padro dos valores de Fitness: 1,21
Utilizando a taxa de mutao igual a 0,25 o resultado foi: Nmero de Sucessos: 0 Maior Fitness (Melhor caso): 23 Menor Fitness (Pior caso): 17 Valor mdio de Fitness: 20,72 Desvio-padro dos valores de Fitness: 1,81
Fig.26 Histograma utilizando taxa de mutao 0,75 3.6. Sexto Teste: Avaliao do Efeito do Elitismo Para avaliar os efeitos causados pelo processo de elitismo, foi utilizada a configurao abaixo e o algoritmo foi testado com e sem a aplicao do elitismo. a) Cruzamento Uniforme b) Seleo por Roleta c) Mutao por escolha aleatria do bit d) Probabilidade de cruzamento: 0.8 e) Probabilidade de mutao: 0.75 f) Nmero de indivduos da populao: 30. g) Nmero de geraes: 50. Sem a utilizao de elitismo: Nmero de Sucessos: 0 Maior Fitness (Melhor caso): 21 Menor Fitness (Pior caso): 16 Valor mdio de Fitness: 19,58 Desvio-padro dos valores de Fitness: 1.18
Fig.28 Histograma sem elitismo Utilizando elitismo temos: Nmero de Sucessos: 12 Maior Fitness (Melhor caso): 27 Menor Fitness (Pior caso): 16
TESTE
N ELISTISMO SELEO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 NO NO NO NO NO NO NO NO NO NO NO NO NO NO SIM ROLETA ROLETA ROLETA TORNEIO ROLETA ROLETA ROLETA ROLETA ROLETA ROLETA ROLETA ROLETA ROLETA ROLETA ROLETA
TESTE 4
TESTE 5 TESTE 6
CRUZAMENTO PONTO DE CORTE UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME
MUTAO BIT A BIT BIT A BIT BIT A BIT BIT A BIT BIT A BIT ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO
TC 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,5 0,2 0,8 0,8 0,8 0,8 0,8 0,8
TM 0,025 0,025 0,025 0,025 0,025 0,025 0,025 0,025 0,025 0,05 0,1 0,25 0,75 0,75 0,75
N IND 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
N GERAO 50 50 50 50 50 50 50 50 50 50 50 50 50 50 50
TESTE 4
TESTE 5 TESTE 6
N 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
N DE SUCESSO 0 0 0 0 0 0 0 0 0 0 0 0 0 0 12
MAIOR FITNESS 23 23 26 16 21 23 24 22 21 21 21 23 23 21 27
MENOR FITNESS 18 15 16 11 16 16 15 16 15 16 15 17 17 16 16
FITNESS MDIO DESVIO PADRO 21,14 1,37 20,34 2,48 23,7 2,58 11,3 1,01 19,16 1,16 21,2 2,02 21,08 2,73 19,5 1,47 18,9 1,85 18,48 1,21 19,16 1,43 20,72 1,81 21,34 1,86 19,58 1,18 23,78 3,39
Tabela 3: Resultados
TESTE ELISTISMO TESTE 1 SIM TESTE 2 SIM TESTE 3 SIM TESTE 4 SIM TESTE 5 SIM TESTE 6 SIM TESTE 7 SIM TESTE 8 SIM TESTE 9 SIM TESTE 10 SIM
SELEO ROLETA ROLETA ROLETA ROLETA ROLETA ROLETA ROLETA ROLETA ROLETA ROLETA
CRUZAMENTO UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME UNIFORME
MUTAO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO ALEARTRIO
TC 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8 0,8
TM 0,75 0,75 0,75 0,75 0,75 0,75 0,75 0,75 0,75 0,75
TESTE TESTE 1 TESTE 2 TESTE 3 TESTE 4 TESTE 5 TESTE 6 TESTE 7 TESTE 8 TESTE 9 TESTE 10
MAIOR FITNESS 24 27 27 26 23 25 23 26 27 27
MENOR FITNESS 16 16 18 16 16 17 16 17 18 17
FITNESS MDIO DESVIO PADRO 21,46 2,177 24,5 2,28 23,76 2,83 24,8 2,45 22,5 1,54 24,87 0,71 22,87 0,79 25,46 1,52 26,63 1,29 26,83 0,99
pop_size num_ger numero de loops N valor medio fitness 60 75 125 25,89 120 75 125 26,73 120 250 125 26,8 600 250 125 27 Menor fitness Maior fitness Numero de sucesso 23 27 37 25 27 93 25 27 102 27 27 125
for rodar = 1:N pop=round(rand(popsize,tam_ind)); % random da populao de 1s e 0s for i=1:popsize vetorAvaliacao(i) = avalia(pop(i,1:tam_ind)); % somatorio das avaliaes
end
end if tipo_selecao == 0 % roleta selecionados = roleta(vetorAvaliacao,popsize); else % torneio selecionados = sel_torneio(vetorAvaliacao); end
% Cruzamento
end if tipo_cruzamento == 1% uniforme mascara = round(rand(popsize/2,tam_ind)); filhos = cruzamento_uniforme(pop,selecionados,tam_ind,popsize,mascara,pcross); end if tipo_mutacao == 0 %0 - escolha aleatoria mutacao_escolha_bit(filhos,taxaMutacao,popsize); else % 1 - bit a bit mutacao_bit_bit (filhos,taxaMutacao,popsize,tam_ind); end if elitismo == 1 filhos = comelistismo(popsize,pop,filhos,vetorAvaliacao); end
end end Valor_medio_fitness=mean(Melhor_Ind) desvio_pad_fitness=std(Melhor_Ind) ll=sort(Melhor_Ind); Menor_Fitness=(ll(1)) Maior_Fitness=(ll(N)) pp=0; for hh=1:N if Melhor_Ind(hh)==27 pp=pp+1; else pp=pp; end end Num_Sucesso=PP % % % % % % Criar Estatisticas Melhor Avaliao no Teste Pior Avaliacao no Teste Media Avaliacao no Teste Desvio Padro da Avaliacao Box-Plot
sinalDeSaida = 9+(teta(2)*teta(5))-(teta(23)*teta(14))+... (teta(24)*teta(4))-(teta(21)*teta(10))+(teta(36)*teta(15))-... (teta(11)*teta(26))+(teta(16)*teta(17))+(teta(3)*teta(33))+... (teta(28)*teta(19))+(teta(12)*teta(34))-(teta(31)*teta(32))-... (teta(22)*teta(25))+(teta(35)*teta(27))-(teta(29)*teta(7))+... (teta(8)*teta(13))-(teta(6)*teta(9))+(teta(18)*teta(20))-... (teta(1)*teta(30))+(teta(23)*teta(4))+(teta(21)*teta(15))+... (teta(26)*teta(16))+(teta(31)*teta(12))+(teta(25)*teta(19))+... (teta(7)*teta(8))+(teta(9)*teta(18))+(teta(1)*teta(33));
Funo cruzamento_corte.m
%=================================================================== % DISCIPLINA DE COMPUTAO EVOLUCIONRIA - TRABALHO DA CAIXA PRETA % PROFESSOR:Bruno Henrique Groenner Barbosa % ALUNO:Elson Claudio Correa Moraes %=================================================================== %funo cruzamento com 1 ponto de corte function filhos = cruzamento_corte(pop,selecionados,pcross) for i = 1:length(selecionados)/2
if rand<pcross pcorte = ceil(rand*34 + 0.1); filhos(2*i-1,:) = [pop(selecionados(2*i-1),1:pcorte) pop(selecionados(2*i),pcorte+1:end)]; filhos(2*i,:) = [pop(selecionados(2*i),1:pcorte) pop(selecionados(2*i-1),pcorte+1:end)]; else filhos(2*i-1,:) = pop(selecionados(2*i-1),:); filhos(2*i,:) = pop(selecionados(2*i),:); end
end
Funo cruzamento_uniforme.m
%=================================================================== % DISCIPLINA DE COMPUTAO EVOLUCIONRIA - TRABALHO DA CAIXA PRETA % PROFESSOR:Bruno Henrique Groenner Barbosa % ALUNO:Elson Claudio Correa Moraes %=================================================================== %funo cruzamento uniforme function filhos = cruzamento_uniforme(pop,selecionados,tam_ind,popsize,mascara,pcross)
%Cruzamento Uniforme
for i=1:popsize/2 % fazer so a metade tam_pop/2, use a mesma mascara para criar dois filhos
for j=1:tam_ind
end
Funo roleta.m
%=================================================================== % DISCIPLINA DE COMPUTAO EVOLUCIONRIA - TRABALHO DA CAIXA PRETA % PROFESSOR:Bruno Henrique Groenner Barbosa % ALUNO:Elson Claudio Correa Moraes %=================================================================== %funo roleta viciada function selecionados = roleta( vetorAvaliacao,popsize ) soma = sum(vetorAvaliacao); for k = 1:popsize s = rand*soma;
Funo mutao_escolha_bit.m
%=================================================================== % DISCIPLINA DE COMPUTAO EVOLUCIONRIA - TRABALHO DA CAIXA PRETA % PROFESSOR:Bruno Henrique Groenner Barbosa % ALUNO:Elson Claudio Correa Moraes %=================================================================== %Funo para para mutar individuo escolha aleatoria de bit function filhos = mutacao_escolha_bit(filhos,taxaMutacao,popsize)
for i=1:popsize for j=ceil(rand*34 + 0.1) if rand<taxaMutacao if filhos(i,j)==0 filhos(i,j)=1; else filhos(i,j)=0; end end end end
end
Funo mutao_bit_bit.m
%=================================================================== % DISCIPLINA DE COMPUTAO EVOLUCIONRIA - TRABALHO DA CAIXA PRETA % PROFESSOR:Bruno Henrique Groenner Barbosa % ALUNO:Elson Claudio Correa Moraes %===================================================================
for i=1:popsize for j=1:tam_ind if rand<taxaMutacao if filhos(i,j)==0 filhos(i,j)=1; else filhos(i,j)=0; end end end end
end
Funo sel_torneio.m
%=================================================================== % DISCIPLINA DE COMPUTAO EVOLUCIONRIA - TRABALHO DA CAIXA PRETA % PROFESSOR:Bruno Henrique Groenner Barbosa % ALUNO:Elson Claudio Correa Moraes %=================================================================== % Funcao Torneio function selecionados = sel_torneio(vetorAvaliacao)
for i = 1:length(vetorAvaliacao) d=ceil(rand*29 + 0.1); if vetorAvaliacao(i)<vetorAvaliacao(d) selecionados(i) = vetorAvaliacao(d); else selecionados(i) = vetorAvaliacao(i); end
end
Funo comelitismo.m
%===================================================================
for i = 1:length(vetorAvaliacao) d=ceil(rand*29 + 0.1); if vetorAvaliacao(i)<vetorAvaliacao(d) selecionados(i) = vetorAvaliacao(d); else selecionados(i) = vetorAvaliacao(i); end
end