Programação Científica onde você menos espera encontrar

AVISO!

  • Esta é uma experiência que passei recentemente, a qual, por motivação de amigos, estou registrando-a em texto;
  • Para fins de discrição e anonimato (e manter o foco na história em si), nomes (exceto o meu), quantidades, e outros dados serão substituídos por “coisas fantasiosas”;

Prólogo

Programação é uma área do conhecimento a qual você aplicação direta em áreas como física, bioinformática, games, bolsas de valores, serviços de recomendação de conteúdo etc. E na Administração, é possível? Sim, porque existem os “Sistemas de Informação”, ferramentas imprescindíveis para o fazer administrativo diário de que qualquer organização (pública ou privada).

Ainda assim, eu levanto a seguinte pergunta: é possível aplicar Programação “pesada” (que vai além do controle de fluxo de informação) em um ambiente “puramente administrativo”? Sim, é possível, e eis aqui o relato desta experiência. Vamos à história.

Tudo começou….

No famoso “Zoológico das Terras Geladas”, mais especificamente no escritório da administração local, em que uma de suas missões diárias é garantir que os animais do Zoológicos (Ursos Polares, Morsas etc.) não morram de fome. Semanalmente é realizado “O Chamado dos Suprimentos”, em que são definidos quanto de cada um (dos “variados”) suprimentos virão para o zoológico.

Pois bem, um belo dia estávamos com o seguinte prognóstico de suprimentos:

  • 80 quilos de pessegos silvestres (a 1.6 dracmas douradas o quilo);
  • 100 litros de mel do báltico (a 1.5 dracmas douradas o litro);
  • 100 quilos de batatas peruanas (a 1.8 dracmas douradas o quilo);
  • 90 quilos de cereais dos andes (a 2.2 dracmas douradas o quilo);

Fazendo umas contas de padaria, temos um custo total de 656 dracmas douradas. Até aqui tudo bem, salvo um pequeno detalhe…


Recentes tratados comerciais lideranças das Terras Geladas com as grandes corporações do Cinturão Tropical, de onde vem os suprimentos dos Zoológico, colocaram a administração do Zoológico diante do seguinte desafio: diminuir as quantidades dos pedidos de pêssego silvestre e mel do bático, bem como aumentar as quantidades dos pedidos de batatas peruanas e cereais dos andes, de modo que o custo total se mantivesse como 656 dracmas douradas. E agora? Quem poderia nos ajudar? O Chapolin? Também, mas nesse caso, eu chamei a ajuda para a….


Otimização Combinatória

Apesar do termo pouco usual, trata-se de um ramo da computação o qual, com um pouco de reflexão e curiosidade, pode ser usado em muitas ocasiões, visto que seu objetivo, em linhas gerais, é “encontrar as melhores soluções possíveis para problemas ‘complicados demais’”. Por “problemas complicados demais”, é só pensar em um problema (ou solução) que exiga um “resultado”, porém que você sabe que (1) ou “não vai dar” para atingir esse resultado; ou (2) que você consegue chegar em um resultado muito próximo do “ideal”, mas não exatamente o ideal.

No caso do problema dos suprimentos acima, podemos pensá-lo da seguinte forma:

  • Vamos chamar de Qp a quantidade de pessego desse novo pedido;
  • Vamos chamar de Qm a quantidade de mel desse novo pedido;
  • Vamos chamar de Qb a quantidade de batata desse novo pedido;
  • Vamos chamar de Qc a quantidade de cereais desse novo pedido;

Conhecendo já os “preços por unidade” de cada suprimento, podemos calcular o custo total de um pedido da seguinte forma:

Custo = (1.6 * Qp) + (1.5 * Qm) + (1.8 * Qb) + (2.2 * Qc)

Substituindo Custo pelas 656 dracmas douradas, temos:

656 = (1.6 * Qp) + (1.5 * Qm) + (1.8 * Qb) + (2.2 * Qc)

Melhorando a leitura…

(1.6 * Qp) + (1.5 * Qm) + (1.8 * Qb) + (2.2 * Qc) = 656

Podemos considerar a fórmula acima, pois, como um “Problema de Otimização”, em que é preciso definir valores para Qp, Qm, Qb, e Qc, de modo que, jogando na fórmula acima, “dê 656” (ou algo próximo a isso).

Transformamos, dessa forma, um “problema real” em um “problema matemático”. Para nossa sorte, problemas como esse tem sido estudados pela matemática e computação há muito tempo, de modo que hoje dispomos de ferramentas que resolvam eles “numa boa”.

Beleza.. mas cadê a programação?

Umas das ferramentas que ajudam na solução de equações do tipo são justamente algoritmos de otimização combinatória (“mini-programas” de computador). Em linhas gerais, eles inicialmente geram combinações de “valores aleatórios” para cada uma das variáveis do problema e, ao longo de sua execução, “combinam essas combinações” de modo que, ao final, encontrem uma combinação capaz de chegar ao “resultado ideal” o mais próximo possível. No caso acima, esses algoritmos vão gerar combinações de quatro valores (a,b,c,d), um valor para cada variável.

Um detalhe interessante: nesses algortimos, você pode definir para cada variável “faixas de valores” para a geração aleatória. No caso em questão, as seguintes faixas foram definidas:

  • 80 <= Qp <= 160
  • 100 <= Qm <= 200
  • 50 <= Qb <= 100
  • 30 <= Qc <= 90

Uma vez definidas as variáveis do problema, a equação do problema em si (também chamada de função de avaliação ou fitness), restava agora programar tudo isso. Para a tarefa, utilizei-me de um framework python que já traz muita coisa pronta para o desafio. Chama-se DEAP. O maior “trabalho pesado” (que acabou sendo bem leve) que tive nele foi definir as variáveis e a função de avaliação. Fiz isso, “coloquei” para rodar um algoritmo que tem nele de otimização

E o resultado de tudo isso foi que…

O bendito algoritmo que tinha lá forneceu quantidades para cada suprimento cujo custo total dava exatamente as 656 dracmas (sim, às vezes, dependendo do problema, isso é possível). Pense numa felicidade que bateu. O Zoológico conseguiu remodelar seu pedido mantendo o mesmo custo, e agora é só aguardar os suprimentos chegarem.


Epílogo

E foi através desta rápida “epopéia” que eu tive a oportunidade de aplicar conhecimentos aprendidos (na vida e) na faculdade em um ambiente real, para a gente ver como tudo está conectado, inclusive fantasia e realidade.

P.S.

O problema descrito nessa histórica, mesmo tendo sido “real”, já é estudado pela matemática e computação há anos. Chama-se “problema da mochila”. No fim das contas, bastou-me “fazer as equivalências” entre a situação real com a qual me encontrei com o que esse problema propõe e… “resolver” (como diria o Luiz Almir, “aaahh ladrão…”).

Enfim: mais uma vez, “teoria e prática” se encontram.