Utilizando o Solver Excel para Programação Fina

Em Sistemas de Produção estamos estudando muitas coisas bem legais, algumas realmente complexas e, por isso mesmo, bastante divertidas. Entre elas, depois de ver MRP, Plano Agregado, MRP II, agora estamos estudando Sequenciamento ou Programação Fina, que é a definição de qual a melhor sequencia de produção ou de utilização das máquinas conforme alguns critérios como tempo médio de atraso na entrega.

Bom, voltando ao assunto do título do post, pra distribuir tarefas de modo a minimizar o tempo total de execução podemos utilizar um complemento do Excel chamado Solver, para instalar clique no botão do Office bem no topo esquerdo e clique em Opções do Excel, vai abrir a seguinte janela.

Opções do Excel -> Suplementos -> Solver -> Ir

Marcou Solver, clicar em Ok e aguardar a instalação.

Bom, com o complemento instalado, ele vai aparecer na aba Dados -> Análise -> Solver. Antes de utilizarmos o Solver precisamos montar uma estrutura no Excel para resolvermos nosso problema, digamos que a matriz abaixo mostra os custos em milhares de dólares na atribuição de trabalhos aos indivíduos A, B, C e D para as tarefas 1, 2, 3 e 4 e nós queremos descobrir qual a melhor atribuição final para minimizar os custos.

Custos em milhares

Cada indivíduo vai fazer um trabalho (apenas 1 por linha) e cada trabalho deve ser feito somente uma vez (apenas 1 por coluna), essa são nossas restrições. Vamos começar por ai, crie duas matrizes novas do mesmo tamanho dessa inicial (4x4), deixe uma em branco e na outra crie as restrições conforme imagem abaixo. Para criar as restrições utilize a função do Excel SOMARPRODUTO que faz a multiplicação e adição dos valores nas linhas das matrizes selecionadas.

Crie restrições na linha e na coluna!
Após ter definido as restrições, precisa fazer isso pra usar o Solver, utilize a mesma função SOMARPRODUTO mas desta vez para nossa "função Objetivo", selecione a matriz inicial com os custos e também a que está vazia, deve ficar zero. Salve a planilha Excel.

Função objetivo, vai nos dizer o custo final
Agora vamos achar a solução para este problema com o Solver, clique em Solver na aba Dados, na janela que abrir, defina a célula de destino a célula que temos o resultado do somarProduto ao lado de "Função Objetivo" e marque "Igual a " * Mín. Nas células variáveis selecione a matriz em branco, que é onde o Solver vai preencher para nós de maneira que tenhamos o mínimo de custo.

Agora vamos configurar as restrições no Solver, para isso clique no botão "Adicionar", na janela que abrir selecione as restrições conforme figura abaixo.

Executar cada tarefa apenas uma vez e cada pessoa executar uma tarefa.
Também os valores que serão preenchidos devem ser binários, apenas 0 ou 1.

Após adicionar as restrições, clique em Opções na janela do Solver e marque a opção "Presumir modelo linear" para resolver este tipo de problema.

Dependendo do tamanho da matriz é interessante diminuir a precisão e aumentar a tolerância, as vezes vai levar muito tempo pra processar tudo ou vai travar o Excel, uma dica, salve tudo antes de executar o Solver.
Bom, Solver deve ter ficado assim:

Parâmetros do Solver
Agora basta clicar em Resolver e rezar pra não dar pau no Excel, pra mim ele ainda não conseguiu ir até o fim, mas ai clico em "Manter solução do solver" e consigo ver o que ele conseguiu fazer pra mim.


Bom, meu resultado final foi 17 milhões, veja planilha.

Resultados
Bem, pode notar que ele respeitou as restrições e conseguiu chegar a um resultado minizando os custos, fazer com apenas 4 indivíduos e 4 trabalhos eu até me arriscava fazer no olho, mas imagina fazer algo com 100 máquinas e 100 trabalhos, ai melhor usar o Solver mesmo!

Depois de ler A Meta, Corrente Crítica e estar estudando essa cadeira de Sistemas de Produção estou gostando desse tipo de sistema, acho que vale a pena desenvolver algo na área, talvez com IA, idéias pro meu TCC ano que vem, alguma sugestão?

Abraços!