Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Aula 4: Acelerando a Otimização com a Biblioteca DEAP

Seção 1: Abertura e Engajamento

1.1. Problema Motivador

Nas aulas anteriores, construímos algoritmos de otimização “do zero”. Embora seja um exercício fundamental para entender os mecanismos internos de um Algoritmo Genético ou Simulated Annealing, você deve ter notado a quantidade de código repetitivo e propenso a erros: gerenciar a população, implementar operadores de crossover e mutação, garantir que os formatos dos dados sejam consistentes, etc.

Imagine agora que você é um engenheiro de software em uma equipe ágil. Sua tarefa não é pesquisar novos algoritmos, mas sim aplicar a otimização para resolver um problema real da empresa, como alocar centenas de tarefas para dezenas de desenvolvedores, otimizando o tempo de entrega e o balanceamento da carga de trabalho. Escrever tudo do zero seria inviável, ineficiente e difícil de manter. Como podemos passar da teoria para a prática de forma rápida e robusta, focando no problema de negócio em vez de na infraestrutura do algoritmo?

1.2. Objetivos deste Capítulo

Ao final deste capítulo, você será capaz de:

Seção 2: Fundamentos Teóricos (Versão Expressa)

DEAP (Distributed Evolutionary Algorithms in Python) é um framework que nos permite focar na formulação do problema, em vez de na mecânica do algoritmo de otimização. Ele trata os componentes de um algoritmo evolutivo como “blocos de montar” que podemos configurar e conectar.

A filosofia do DEAP gira em torno de dois conceitos centrais: o creator e a toolbox.

  1. creator (O Arquiteto): Define a estrutura das suas soluções. Ele cria “fábricas” de classes. Você o usa para definir duas coisas essenciais:

    • A Fitness: Como a qualidade de uma solução será medida (ex: FitnessMin para minimizar um valor, FitnessMax para maximizar).

    • O Indivíduo: A estrutura de dados que representa uma solução (ex: uma lista de 0s e 1s, uma permutação de inteiros, etc.), já associada à sua Fitness.

  2. toolbox (A Caixa de Ferramentas): Armazena as funções (operadores) que atuarão sobre os indivíduos. É um contêiner para os “verbos” do seu algoritmo. Nela, você “registra” as ferramentas que irá usar:

    • Geradores de Genes e Indivíduos: Funções para criar valores aleatórios (ex: random.randint(0, 1)) e para popular um indivíduo com esses genes.

    • Operadores Evolutivos: As funções de evaluate (sua função de fitness), mate (crossover), mutate (mutação) e select (seleção).

Com a estrutura definida no creator e as ferramentas registradas na toolbox, basta escolher um dos algorithms prontos do DEAP (como eaSimple, eaMuPlusLambda), passar a toolbox para ele, e o framework orquestra todo o fluxo evolutivo para você.

Seção 3: Laboratório Prático Guiado (Google Colab)

3.1. Roteiro do Notebook: workshop.ipynb

No laboratório prático, vamos parar de reinventar a roda e usar o poder do DEAP para resolver problemas de otimização de forma profissional. Primeiro, revisitaremos o Problema da Mochila para entender como a mesma lógica que implementamos manualmente pode ser expressa de forma muito mais concisa com o DEAP. Em seguida, aplicaremos esse conhecimento a um problema mais realista de engenharia de software: alocar tarefas a desenvolvedores para minimizar o tempo de conclusão e maximizar o balanceamento da carga de trabalho.

3.2. Estrutura do Laboratório

O notebook será dividido nas seguintes partes:

Seção 4: Análise e Discussão dos Resultados

4.1. Interpretando os Resultados

Ao final do notebook, teremos dois resultados principais:

  1. Solução da Mochila: O DEAP encontrará uma combinação de itens que maximiza o valor sem exceder o peso da mochila. O log de saída mostrará a evolução da melhor fitness (valor) ao longo das gerações. Por que a convergência não é sempre linear?

  2. Plano de Alocação de Tarefas: A solução será um plano de trabalho ótimo. O resultado não será apenas um número de fitness, mas uma distribuição de tarefas legível. Vamos analisar: A solução encontrada parece “justa”? Existe algum desenvolvedor sobrecarregado ou ocioso? Como a função de fitness que projetamos influenciou esse resultado?

4.2. O “Porquê” das Decisões

Seção 5: Síntese e Próximos Passos

5.1. Resumo do Capítulo

5.2. Preparação para o Próximo Bloco

Nesta aula, usamos o DEAP para encontrar uma única solução ótima. No entanto, muitos problemas do mundo real, como o Next Release Problem (NRP), envolvem trade-offs inerentes. Por exemplo, queremos maximizar o valor para o cliente, mas ao mesmo tempo minimizar o custo de desenvolvimento. Não existe uma única “melhor” solução, mas sim um conjunto de soluções ótimas que representam diferentes balanços entre esses objetivos. Na próxima aula, exploraremos a Otimização Multi-Objetivo e como algoritmos como o NSGA-II nos ajudam a encontrar a “Fronteira de Pareto” de soluções de trade-off.