Bom, não sei se aqui é um bom lugar para postar isso, mas o que eu vou mostrar aqui é algo que eu venho estudando recentemente: Algoritmos Genéticos (e Programação Genética), o que são: Basicamente eu pego um vetor com várias Strings inicializadas aleatoriamente (lixo) e através de algoritmos genéticos evoluimos essas strings dando preferencias às strings apresentando a menor diferença com a String alvo (nesse caso há um alvo pré-definido, mas o algoritmo poderia ser utilizado para evoluir até uma solução ótima não definida pelo operador, algo como: evoluir o melhor circuito para tais componentes poder realizar tais tarefas).
Bom, vamos lá, todos os exemplos vão mostrar 300 strings competindo entre si e será mostrada a melhor a cada iteração.
Reprodução sexuada funciona assim:
Temos 2 strings: a) XXXXXXXXXX e b) YYYYYYYYYY e cria-se uma string filha copiando partes das 2 em uma posição aleatória, resultando em algo como: XXXYYYYYYY ou XXXXXXYYYY.
Mutação: Quando ocorre muda uma posição determinada da String, como: a) XXXXXXXXXX vira XXYXXXXXXX (estamos considerando apenas as letras X e Y aqui, mas não é o caso do exemplo que vai considerar todo o codigo ASCII com 256 possiveis letras.
Uma nota: Na saída, o numero entre parenteses é o "Erro", ou seja, a diferença entre a string e a string alvo, quanto menor, melhor, sendo (0) a String alvo.
Vamos lá, começando (apaguei algumas saídas para não ficar muita coisa):
Reprodução Assexuada:
(1266) Iterações:0 Best: Nç{#´??c¡zRF"À?U?ÇN?£ÖF
(1266) Iterações:1 Best: Nç{#´??c¡zRF"À?U?ÇN?£ÖF
(1067) Iterações:2 Best: wqÇèvn?eÅnE. ´?+?y-?fB©V
(1067) Iterações:3 Best: wqÇèvn?eÅnE. ´?+?y-?fB©V
(934) Iterações:4 Best: JPÊsXBEeiªx_?l?|gK5Q?³)i
(878) Iterações:5 Best: JPÊsXBEeiªx_?l?|gK5ÇN?£m+
(686) Iterações:10 Best: JPÊsXBEeiÏ?*ZZR?gct^&v?
(686) Iterações:11 Best: JPÊsXBEeiÏ?*ZZR?gct^&v?
(564) Iterações:12 Best: JPÊsXBEec¡F+<c;R?gct^&v?
(564) Iterações:13 Best: JPÊsXBEec¡F+<c;R?gct^&v?
(552) Iterações:14 Best: LLwf -@eiªF+<c;R?gct^&v?
(477) Iterações:15 Best: LLwf?!6NTd??lKJ?gct^&v?
(436) Iterações:18 Best: LLwf?!6NTd??lKJ?gct^sv?
(426) Iterações:19 Best: JPwfXBEeRd??lKJ?gct^sv?
(402) Iterações:20 Best: LLwfXBEeinx<c;R?gct^BZ?
(389) Iterações:21 Best: JPwfXBEeinx+5?+?gct^&v?
(374) Iterações:22 Best: LLwfXBEeinE.?lRoij??sv?
(354) Iterações:23 Best: LpwfXBEeinx+<c;R?gctjsv?
(337) Iterações:24 Best: LLwf?!EeTdx+5?+ogctnsZV
(321) Iterações:25 Best: LewsXBEeiox<cJ?gct^sv?
(297) Iterações:26 Best: LpwsXBQeinx??+ogct^sv?
(237) Iterações:33 Best: LewfX!Qtinx??+ogctjsv?
(141) Iterações:64 Best: LeokX!Wtinqy?Jogctjape
(141) Iterações:65 Best: LeokX!Wtinqy?Jogctjape
(137) Iterações:66 Best: JeokX Wtinqy?Jogctjarh
(137) Iterações:67 Best: JeokX Wtinqy?Jogctjarh
(134) Iterações:68 Best: LeokX Wtinqy?Jogctjarh
(132) Iterações:69 Best: JeokX Wtinqy?Jogctjarh
(132) Iterações:70 Best: JeokX Wtinqy?Jogctjarh
(130) Iterações:71 Best: JeokX WtinlyzJogctjarh
(130) Iterações:72 Best: JeokX WtinlyzJogctjarh
(128) Iterações:73 Best: JeokX Wninly?Jogctjarh
(126) Iterações:74 Best: JeokX WtinqyzJogctjarh
(126) Iterações:75 Best: JeokX WtinqyzJogctjarh
(123) Iterações:76 Best: Jeok_ WtinlyzJogctjarh
(123) Iterações:77 Best: Jeok_ WtinlyzJogctjarh
(121) Iterações:78 Best: Jeok_ Wtinly?Hogctjaph
(119) Iterações:79 Best: Jeok_ WtinlyzJogctjarh
(106) Iterações:85 Best: Heok_ WtinluzJogctjalh
(106) Iterações:86 Best: Heok_ WtinluzJogctjalh
(102) Iterações:87 Best: Hemk_ WninlyzHogctjalh
(101) Iterações:88 Best: Heok_ WtrnlyzJogctjalh
(100) Iterações:89 Best: HemkX WtrnluzHogctjalh
(95) Iterações:90 Best: Jemk_ WtrnluzHogctjaph
(93) Iterações:91 Best: Hemk_ Wtrnl!uzHogctjalh
(93) Iterações:92 Best: Hemk_ Wtrnl!uzHogctjalh
(91) Iterações:93 Best: Heok_ WnrnlyzHogctjall
(91) Iterações:94 Best: Heok_ WnrnlyzHogctjall
(89) Iterações:95 Best: Hemk_ WnrnluzHogctjalh
(89) Iterações:96 Best: Hemk_ WnrnluzHogctjalh
(85) Iterações:97 Best: Hemk_ WnrnluzHogctjall
(85) Iterações:98 Best: Hemk_ WnrnluzHogctjall
(82) Iterações:99 Best: Hemkb WnrnluzHogctjall
(82) Iterações:100 Best: Hemkb WnrnluzHogctjall
(82) Iterações:101 Best: Hemkb WnrnluzHogctjall
(82) Iterações:102 Best: Hemkb WnrnluzHogctjall
(81) Iterações:103 Best: Hemk_ WnrnluzDogctjall
(81) Iterações:104 Best: Hemk_ WnrnluzDogctjall
(80) Iterações:105 Best: Hemkb WnrlluzHogctjall
(78) Iterações:106 Best: Hemkb WnrnluzDogctjall
(78) Iterações:107 Best: Hemkb WnrnluzDogctjall
(74) Iterações:108 Best: Hemkb WnrnlqzDogctjall
(74) Iterações:109 Best: Hemkb WnrnlqzDogctjall
(74) Iterações:110 Best: Hemkb WnrnlqzDogctjall
(68) Iterações:111 Best: Hemkb WnrnlkzDogctjall
(68) Iterações:112 Best: Hemkb WnrnlkzDogctjall
(68) Iterações:113 Best: Hemkb WnrnlkzDogctjall
(68) Iterações:114 Best: Hemkb WnrnlkzDogctjall
(57) Iterações:122 Best: Hemkb WnrndkzDsgctjall!
(57) Iterações:123 Best: Hemkb WnrndkzDsgctjall!
(53) Iterações:124 Best: Hemkb WnrndezDogctjall!
(53) Iterações:125 Best: Hemkb WnrndezDogctjall!
(53) Iterações:126 Best: Hemkb WnrndezDogctjall!
(52) Iterações:127 Best: Hemkb WnrndezDsgctjall
(52) Iterações:128 Best: Hemkb WnrndezDsgctjall
(51) Iterações:129 Best: Hemkb WnrndezDsgctjall!
(47) Iterações:130 Best: Hemkb WnrndezDsggtjall!
(47) Iterações:131 Best: Hemkb WnrndezDsggtjall!
(45) Iterações:132 Best: Hemkd WnrndezDsggtjall!
(45) Iterações:133 Best: Hemkd WnrndezDsggtjall!
(42) Iterações:134 Best: Hemkd WnrndbzDsggtjall!
(42) Iterações:135 Best: Hemkd WnrndbzDsggtjall!
(42) Iterações:136 Best: Hemkd WnrndbzDsggtjall!
(20) Iterações:167 Best: Hemkj WnrndbyDsjstjaln!
(20) Iterações:168 Best: Hemkj WnrndbyDsjstjaln!
(19) Iterações:169 Best: Hemkj WnrndbyDsjstjamn!
(16) Iterações:176 Best: Hemkn WnrndbyDsjrtjamn!
(15) Iterações:177 Best: Hemkn WnrndbyDsjstjamn!
(15) Iterações:178 Best: Hemkn WnrndbyDsjstjamn!
(14) Iterações:179 Best: Hemkn WnrndbyDsjstjamo!
(14) Iterações:180 Best: Hemkn WnrndbyDsjstjamo!
(13) Iterações:181 Best: Hemkn WnrmdbyDsjstjamo!
(13) Iterações:182 Best: Hemkn WnrmdbyDsjstjamo!
(13) Iterações:183 Best: Hemkn WnrmdbyDsjstjamo!
(12) Iterações:184 Best: Hemkn WnrmdbyDrjstjamo!
(12) Iterações:185 Best: Hemkn WnrmdbyDrjstjamo!
(12) Iterações:186 Best: Hemkn WnrmdbyDrjstjamo!
(12) Iterações:187 Best: Hemkn WnrmdbyDrjstjamo!
(12) Iterações:188 Best: Hemkn WnrmdbyDrjstjamo!
(11) Iterações:189 Best: Hemkn WnrmdbyDrjstjano!
(11) Iterações:190 Best: Hemkn WnrmdbyDrjstjano!
(11) Iterações:191 Best: Hemkn WnrmdbyDrjstjano!
(11) Iterações:192 Best: Hemkn WnrmdbyDrjstjano!
(10) Iterações:193 Best: Hemko WnrmdbyDrjstjano!
(10) Iterações:194 Best: Hemko WnrmdbyDrjstjano!
(10) Iterações:195 Best: Hemko WnrmdbyDrjstjano!
(10) Iterações:196 Best: Hemko WnrmdbyDrjstjano!
(9) Iterações:197 Best: Hemko WnrmdbyCrjstjano!
(9) Iterações:198 Best: Hemko WnrmdbyCrjstjano!
(9) Iterações:199 Best: Hemko WnrmdbyCrjstjano!
(9) Iterações:200 Best: Hemko WnrmdbyCrjstjano!
(9) Iterações:201 Best: Hemko WnrmdbyCrjstjano!
(8) Iterações:202 Best: Hemko WnrldbyCrjstjano!
(8) Iterações:203 Best: Hemko WnrldbyCrjstjano!
(7) Iterações:204 Best: Hemko Wnrmdby Crjstjano!
(7) Iterações:205 Best: Hemko Wnrmdby Crjstjano!
(7) Iterações:206 Best: Hemko Wnrmdby Crjstjano!
(4) Iterações:237 Best: Helko Worldby Crjstjano!
(4) Iterações:238 Best: Helko Worldby Crjstjano!
(4) Iterações:239 Best: Helko Worldby Crjstjano!
(4) Iterações:240 Best: Helko Worldby Crjstjano!
(4) Iterações:241 Best: Helko Worldby Crjstjano!
(4) Iterações:242 Best: Helko Worldby Crjstjano!
(3) Iterações:243 Best: Helko Worldby Cristjano!
(3) Iterações:244 Best: Helko Worldby Cristjano!
(3) Iterações:245 Best: Helko Worldby Cristjano!
(3) Iterações:246 Best: Helko Worldby Cristjano!
(3) Iterações:247 Best: Helko Worldby Cristjano!
(3) Iterações:248 Best: Helko Worldby Cristjano!
(3) Iterações:249 Best: Helko Worldby Cristjano!
(2) Iterações:250 Best: Helko Worldby Cristiano!
(2) Iterações:251 Best: Helko Worldby Cristiano!
(2) Iterações:252 Best: Helko Worldby Cristiano!
(2) Iterações:253 Best: Helko Worldby Cristiano!
(2) Iterações:254 Best: Helko Worldby Cristiano!
(2) Iterações:261 Best: Helko Worldby Cristiano!
(2) Iterações:262 Best: Helko Worldby Cristiano!
(2) Iterações:263 Best: Helko Worldby Cristiano!
(2) Iterações:264 Best: Helko Worldby Cristiano!
(2) Iterações:265 Best: Helko Worldby Cristiano!
(2) Iterações:266 Best: Helko Worldby Cristiano!
(2) Iterações:267 Best: Helko Worldby Cristiano!
(2) Iterações:268 Best: Helko Worldby Cristiano!
(2) Iterações:269 Best: Helko Worldby Cristiano!
(2) Iterações:270 Best: Helko Worldby Cristiano!
(2) Iterações:271 Best: Helko Worldby Cristiano!
(2) Iterações:272 Best: Helko Worldby Cristiano!
(2) Iterações:273 Best: Helko Worldby Cristiano!
(2) Iterações:274 Best: Helko Worldby Cristiano!
(2) Iterações:275 Best: Helko Worldby Cristiano!
(2) Iterações:276 Best: Helko Worldby Cristiano!
(2) Iterações:277 Best: Helko Worldby Cristiano!
(1) Iterações:278 Best: Hello Worldby Cristiano!
(1) Iterações:279 Best: Hello Worldby Cristiano!
(1) Iterações:280 Best: Hello Worldby Cristiano!
(1) Iterações:281 Best: Hello Worldby Cristiano!
(1) Iterações:282 Best: Hello Worldby Cristiano!
(1) Iterações:283 Best: Hello Worldby Cristiano!
(1) Iterações:284 Best: Hello Worldby Cristiano!
(1) Iterações:285 Best: Hello Worldby Cristiano!
(1) Iterações:286 Best: Hello Worldby Cristiano!
(1) Iterações:287 Best: Hello Worldby Cristiano!
(1) Iterações:288 Best: Hello Worldby Cristiano!
(1) Iterações:289 Best: Hello Worldby Cristiano!
(1) Iterações:290 Best: Hello Worldby Cristiano!
(1) Iterações:291 Best: Hello Worldby Cristiano!
(1) Iterações:292 Best: Hello Worldby Cristiano!
(1) Iterações:293 Best: Hello Worldby Cristiano!
(1) Iterações:294 Best: Hello Worldby Cristiano!
(1) Iterações:295 Best: Hello Worldby Cristiano!
(1) Iterações:296 Best: Hello Worldby Cristiano!
(1) Iterações:297 Best: Hello Worldby Cristiano!
(1) Iterações:298 Best: Hello Worldby Cristiano!
(1) Iterações:299 Best: Hello Worldby Cristiano!
(1) Iterações:300 Best: Hello Worldby Cristiano!
(1) Iterações:301 Best: Hello Worldby Cristiano!
(1) Iterações:302 Best: Hello Worldby Cristiano!
(1) Iterações:303 Best: Hello Worldby Cristiano!
(1) Iterações:304 Best: Hello Worldby Cristiano!
(1) Iterações:305 Best: Hello Worldby Cristiano!
(1) Iterações:306 Best: Hello Worldby Cristiano!
(1) Iterações:307 Best: Hello Worldby Cristiano!
(1) Iterações:308 Best: Hello Worldby Cristiano!
(1) Iterações:309 Best: Hello Worldby Cristiano!
(1) Iterações:310 Best: Hello Worldby Cristiano!
(1) Iterações:311 Best: Hello Worldby Cristiano!
(1) Iterações:312 Best: Hello Worldby Cristiano!
(1) Iterações:313 Best: Hello Worldby Cristiano!
(1) Iterações:314 Best: Hello Worldby Cristiano!
(1) Iterações:315 Best: Hello Worldby Cristiano!
(1) Iterações:316 Best: Hello Worldby Cristiano!
(1) Iterações:317 Best: Hello Worldby Cristiano!
(1) Iterações:330 Best: Hello Worldby Cristiano!
(1) Iterações:331 Best: Hello Worldby Cristiano!
(1) Iterações:332 Best: Hello Worldby Cristiano!
(1) Iterações:333 Best: Hello Worldby Cristiano!
(1) Iterações:334 Best: Hello Worldby Cristiano!
(1) Iterações:335 Best: Hello Worldby Cristiano!
(1) Iterações:336 Best: Hello Worldby Cristiano!
(0) Iterações:337 Best: Hello World by Cristiano!
Bom, 337 iterações (essa é a média, variando pouca coisa entre uma e outra tentativa)
Agora, sem mutação, para testar:
(240) Iterações:31 Best: ?f{ok9Thih!j?6?t??nkok0
(231) Iterações:32 Best: ?f{ok9TuihQ!j?6?t??nkok0
(231) Iterações:33 Best: ?f{ok9TuihQ!j?6?t??nkok0
(231) Iterações:34 Best: ?f{ok9TuihQ!j?6?t??nkok0
(225) Iterações:35 Best: ?f{ok9ThihQ!j?R?g??nkok0
(220) Iterações:36 Best: ?f{ok9TuihQ!j?6?t??nkok%
(220) Iterações:37 Best: ?f{ok9TuihQ!j?6?t??nkok%
(211) Iterações:38 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:39 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:40 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:41 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:42 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:43 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:44 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:45 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:46 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:146 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:147 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:148 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:149 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:150 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:151 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:152 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:153 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:154 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:155 Best: ?f{ok9TuihQ!j?6?g??nkok%
(211) Iterações:156 Best: ?f{ok9TuihQ!j?6?g??nkok%
(ad infinitum)
O que houve: Sem mutação, o código genético não muda, nova informação não é inserida, o resultado são strings imcompletas e imutáveis (o que levaria a extinção das frases já que o conteúdo é lixo).
Agora, reprodução assexuada (ou seja, a string filha é idêntica à string pai, mas a filha sofre ação da mutação).
Bom, está rodando aqui, já possui 1700 iterações e o erro ainda é de 1250, mutações é um processo lento, 3000 iterações e erro de 1209...
O problema maior: não há cooperação entre as Strings, com reprodução sexuada, 2 strings boas dão lugar a uma string melhor, com mutação isso não acontece já que é cada um por si.
Vou parar o experimento, pois estamos em 4779 iterações e o erro subiu para 1213, eis as ultimas saídas:
(1226) Iterações:4745 Best: %æfá]???)n¿?*?}¦äO?wV
(1226) Iterações:4746 Best: %æfá]???)n¿?*?}¦äO?wV
(1221) Iterações:4747 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1221) Iterações:4748 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1221) Iterações:4749 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1221) Iterações:4750 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1221) Iterações:4751 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1221) Iterações:4752 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4753 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4754 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4755 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4756 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4757 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1218) Iterações:4758 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1218) Iterações:4759 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1218) Iterações:4760 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1218) Iterações:4761 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1218) Iterações:4762 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1218) Iterações:4763 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1218) Iterações:4764 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1218) Iterações:4765 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1218) Iterações:4766 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1218) Iterações:4767 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1218) Iterações:4768 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4769 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4770 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4771 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4772 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4773 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4774 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4775 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4776 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1219) Iterações:4777 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1217) Iterações:4778 Best: %æfÜ]???)n¿?*?}¦äO?wV
(1213) Iterações:4779 Best: %æfÜU???)n¿?*?}¦äO?wV
Conclusão: Reprodução sexuada obviamente é a melhor solução que a natureza apresenta para variação genética de forma coordenada e produtiva, e rápida pois demanda poucas gerações para se adequar às mudanças no ambiente.
Espero que seja util esse texto.
Ps:Quem quiser o programa em Java, é só me avisar.
Ultimamente venho testando Algoritmos Geneticos com minha máquina virtual do microcontrolador 8051 com o objetivo de fazer programas automaticamente, provavelmente vou ter que mudar a abordagem para algo de maior nivel, como Programação Genética, mas por hora, até que funcionou relativamente bem.
Abraços,
Cristiano