A computação evolucionária tem prometido máquinas de autoprogramação por 60 anos - então, onde estão elas?
p Crédito:Shutterstock
p E se os computadores pudessem se programar? Em vez do trabalho trabalhoso de descobrir como um computador poderia resolver um problema e, em seguida, escrever instruções codificadas precisas, tudo o que você teria que fazer é dizer a ele o que deseja e o computador gerará um algoritmo que resolverá o seu problema. p Entre na computação evolutiva, que pode ser visto como um tipo de inteligência artificial e um ramo do aprendizado de máquina. Sugerido pela primeira vez na década de 1950, computação evolutiva é a ideia de que um computador pode desenvolver suas próprias soluções para problemas, em vez de os humanos terem que passar por uma série de etapas possivelmente complexas para escrever o programa de computador por conta própria. Em teoria, isso significa que os programas de computador que podem levar semanas para serem programados manualmente podem estar prontos em questão de minutos.
p Essa ideia permitiu que os computadores resolvessem problemas complexos que podem não ser bem compreendidos e são difíceis para os humanos resolverem. Os cientistas da computação têm usado a computação evolutiva em muitos problemas, incluindo a formulação da melhor mistura de ingredientes para ração de camarão, otimização de portfólio, telecomunicações, jogos e empacotamento automatizado.
p E os pesquisadores que estudam a computação evolucionária há mais de 60 anos fizeram avanços tremendos. É até assunto de várias revistas científicas. Ainda, como observei em um artigo recente, a ideia ainda não é amplamente utilizada fora da comunidade de pesquisa. Então, por que a computação evolucionária não está evoluindo mais rápido?
p
Como funciona a computação evolutiva?
p A computação evolutiva baseia-se nos princípios de evolução natural de Charles Darwin, comumente conhecido como sobrevivência do mais apto. Isso é, os membros mais fracos (menos adaptados) de uma espécie morrem e os mais fortes sobrevivem. Ao longo de muitas gerações, a espécie irá evoluir para se tornar melhor adaptada ao seu ambiente.
p Árvore de programação genética. Crédito:Wikimedia
p Na computação evolutiva, o computador cria uma população de soluções potenciais para um problema. Muitas vezes, são soluções aleatórias, portanto, é improvável que eles resolvam o problema que está sendo abordado ou mesmo cheguem perto. Mas alguns serão ligeiramente melhores do que outros. O computador pode descartar as piores soluções, retenha os melhores e use-os para "criar" mais soluções potenciais. Partes de diferentes soluções serão combinadas (geralmente chamado de "crossover") para criar uma nova geração de soluções que podem ser testadas e o processo começa novamente.
p Outro elemento importante da computação evolutiva, como acontece com a seleção natural, é mutação. De vez em quando um pequeno, a mudança aleatória é feita em uma das soluções que estão sendo testadas. Isso significa que novas soluções potenciais podem ser criadas que não seriam possíveis apenas com o uso de crossover.
p Esperançosamente, uma combinação de crossover e mutação irá produzir novas soluções potenciais que são melhores do que seus "pais". Isso pode não acontecer sempre, mas à medida que mais gerações são produzidas, melhores soluções são mais prováveis de surgir. Não é incomum que a computação evolutiva envolva muitos milhões de gerações, assim como a seleção natural pode levar muitos milhões de anos para alterar perceptivelmente uma espécie viva.
p Um dos tipos mais populares de computação evolutiva é a programação genética. Isso envolve um programa de computador desenvolvendo outro programa de trabalho para resolver um problema específico. O usuário fornece alguma medida do que compreende um bom programa e, em seguida, o processo evolutivo assume, espero retornar um programa que resolva o problema.
p Podemos rastrear a programação genética até o final dos anos 1980, com um dos principais proponentes sendo John Koza. Mas, embora tenha feito avanços significativos na pesquisa, a programação genética não é usada diariamente por organizações comerciais ou usuários de computadores domésticos. Dado o quão complicado pode ser desenvolver sistemas de software que funcionem de forma eficaz e eficiente, parece sensato fazer com que os computadores ajudem da mesma forma que estão mudando muitos outros setores.
Seleção, Mutação e Crossover. p
Por que a computação evolucionária não foi adotada?
p O setor comercial não abraçou a computação evolutiva, pois possui outras tecnologias desenvolvidas por pesquisadores. Por exemplo, A impressão 3-D foi inventada na década de 1980 e, após um longo período de desenvolvimento, agora está sendo usada na fabricação industrial e até mesmo pelas pessoas em suas casas. De forma similar, realidade aumentada, realidade virtual e inteligência artificial surgiram da comunidade de pesquisa e se tornaram produtos importantes para grandes empresas de tecnologia.
p Um dos principais problemas que impedem a computação evolucionária é o fracasso dos pesquisadores em se concentrar em problemas que o setor comercial reconheceria. Por exemplo, os cientistas da computação estudaram intensamente como a computação evolucionária poderia ser usada para agendar horários de exames ou calcular rotas de veículos.
p Mas os pesquisadores geralmente estudam apenas versões simplificadas de problemas que são de pouca utilidade no mundo real. Por exemplo, muitas simulações de roteamento de veículos envolvem o cálculo da distância entre dois pontos usando uma linha reta. As rotas de veículos no mundo real raramente seguem linhas retas, e tem que lidar com sistemas unilaterais, separação, questões legais (como quanto tempo antes que um motorista deve descansar), time constraints and a whole lot more. Contudo, this complexity is actually where evolutionary computation could help. If you can adequately define the problem as it occurs in the real world, then the evolutionary algorithm should be able to deal with its complexity.
p Another problem is that the solutions evolutionary computation generates are often hard to explain. Por exemplo, even though a genetic programming system might create a solution with a perfect outcome, how it actually works might be a mystery to a human programmer as the system may have produced complex code that is difficult to interpret and understand.
p An evolutionary computation system is also complex to implement and support and this may put off some commercial organisations. It would help if there was an easy-to-use framework that hid much of the underlying complexity. While these frameworks exist in the scientific community, they are not easily accessible by the commercial sector, never mind home users.
p IBM's famous computer architect Frederick Brooks said that you cannot tackle increasingly large software development projects simply by throwing more people at them. It would be an immense help to the software development industry if, instead of having to manually develop every piece of a system, developers could specify the requirements of its key parts and let an evolutionary process deliver the solutions. p Este artigo foi publicado originalmente em The Conversation. Leia o artigo original.