Problemas de Mistura Prof. Gustavo Peixoto Silva Departamento de Computação Univ. Federal de Ouro Preto
Problemas de Mistura Problemas deste tipo consistem em combinar materiais obtidos na natureza (ou matérias primas) para gerar novos materiais ou produtos com características convenientes. Rações Fábricas de rações produzem vários tipos de rações para determinados animais: bovinos, equinos, caninos, galináceos, etc. Essas rações são produzidas pela mistura de alimentos ou farinhas de restos de alimentos como: milho, farelo de arroz, farinha de osso, soja, entre outros. Os preços e a composição nutricional destes ingredientes também são conhecidas, ou seja, a quantidade de cálcio, ferro, manganês, etc. A nutrição especifica as necessidades mínimas e máximas desses nutrientes por kilo de ração para cada tipo de animal. O problema de otimização tem como objetivo determinar quais e quanto de cada tipo de cada ingrediente deve fazer parte de cada kilo de ração, tal que as necessidades sejam atendidas com o menor custo possível. Outros exemplos: Produção de adubo, Sucos concentrados, Lotes de minério, etc
Considere a produção de ração animal a partir de três ingredientes básicos: osso, soja e farinha de peixe. Os principais nutrientes da ração são: proteína e cálcio. As necessidades mínimas desses nutrientes por kilo de ração são 30% de proteína e 50% de cálcio. Os custos e quantidades de nutriente (em porcentagem) por ingrediente são dados na tabela. Nutrientes Ingredientes Osso Soja Peixe Qtd minima Proteína 0,2 0,5 0,4 0,3 Cálcio 0,6 0,4 0,4 0,5 Custo ($/Kg) 0,56 0,81 0,46 ------ Devemos determinar as quantidades de cada ingrediente a compor a ração de tal forma que as necessidades mínimas sejam satifeitas com o menor custo possível.
Modelo 1 de PL Variáveis de decisão: x 1 = kg de osso, x 2 = Kg de soja e x 3 = Kg de peixe na ração Função objetivo Min f(x) = 0,56x 1 + 0,81x 2 + 0,46x 3 Restrições 0,2x 1 + 0,5x 2 + 0,4 x 3 >= 0,3 (quant. mínima de proteína) 0,6x 1 + 0,4x 2 + 0,4x 3 >= 0,5 (quant. mínima de cálcio) x 1 + x 2 + x 3 = 1 (para termos uma unidade (Kg) da mistura) x 1 >= 0, x 2 >= 0, x 3 >= 0
Modelo 2 de PL Variáveis de decisão: vetor x[1..3], (x1 = kg de osso, x2 = Kg de soja e x3 = Kg de peixe na ração) Variáveis de entrada: vetor custo[1..3] com os custos / kg de ingrediente vetor prot[1..3] com as quantidades de proteína por kg ingrediente vetor calcio[1..3] com as quantidades de cálcio por kg de ingrediente É claro que os vetores de entrada devem ser alimentados com os dados técnicos antes de executar o modelo. custo[ ] = 0.56, 0.81, 0.46; prot[ ] = 0.2, 0.5, 0.4; calcio[ ] = 0.6, 0.4, 0.4;
MPL - Mathematical Programming Language Usado no GUSEK /*Parametros*/ /*quantidades de ingredientes e nutrientes*/ param qnt_ingre, integer, >=0; param qnt_nutri, integer, >=0; /*Conjuntos*/ set I := 1.. qnt_ingre; set N := 1..qnt_nutri; /*Parametros*/ param nutri_ingre{n in N, i in I}, >=0; param custo_ingre{i in I}, >=0; param nece_nutri{n in N}, >= 0; /*Variaveis de decisão*/ var x{i in I}, >=0; p1
MPL - Mathematical Programming Language Usado no GUSEK /*Função Objetivo*/ minimize custo: sum{i in I}(custo_ingre[i]*x[i]); /*restrições*/ s.t. r1{n in N}: sum{i in I}(nutri_ingre[n,i]*x[i]) >= nece_nutri[n]; solve; p2
MPL - Mathematical Programming Language Usado no GUSEK /* Entrada dos dados */ data; param qnt_ingre := 3; param qnt_nutri := 2; param nutri_ingre : 1 2 3:= 1 0.2 0.5 0.4 2 0.6 0.4 0.4; param nece_nutri := 1 0.3 2 0.5; param custo_ingre := 1 0.562 2 0.813 3 0.46; end; p3
Modelos com o Lingo A seguir são apresentados modelos utilizando o pacote Lingo. Este pacote é bastante amigável, mas por ser um software pago, sua versão demo limitada consideravelmente o tamanho dos problemas a serem resolvido. Assim NÃO SERÁ POSSÍVEL FAZER O TRABALHO com ele. É possível conseguir uma licença completa, para problemas com tamanho ilimitado, pelo período de um semestre, para quem estiver vinculado a uma instituição de ensino. O preço deste software é muito elevado!!!
PRIMEIRO MODELO NO LINGO Model: Min = 0.56*x1 + 0.81*x2 + 0.46*x3;!Restrições; 0.2*x1 + 0.5*x2 + 0.4*x3 >= 0.3;!(quant. mínima de proteína); 0.6*x1 + 0.4*x2 + 0.4*x3 >= 0.5;!(quant. mínima de cálcio); x1 + x2 + x3 = 1;!(para termos uma unidade (Kg) da mistura);!x1 >= 0, x2 >= 0, x3 >= 0 não é necessário, ; End
Modelo 2 de PL Variáveis de decisão: vetor x[1..3], (x1 = kg de osso, x2 = Kg de soja e x3 = Kg de peixe na ração) Variáveis de entrada: vetor custo[1..3] com os custos / kg de ingrediente vetor prot[1..3] com as quantidades de proteína por kg ingrediente vetor calcio[1..3] com as quantidades de cálcio por kg de ingrediente É claro que os vetores de entrada devem ser alimentados com os dados técnicos antes de executar o modelo. custo[ ] = 0.56, 0.81, 0.46; prot[ ] = 0.2, 0.5, 0.4; calcio[ ] = 0.6, 0.4, 0.4;
Modelo 2 de PL Variáveis de decisão: vetor x[1..3], (x1 = kg de osso, x2 = Kg de soja e x3 = Kg de peixe na ração) Variáveis de entrada: vetor custo[1..3] com os custos / kg de ingrediente vetor prot[1..3] com as quantidades de proteína por kg ingrediente vetor calcio[1..3] com as quantidades de cálcio por kg de ingrediente Função objetivo Min f(x) = Soma(j [1..3] : custo[ j ]*x[ j ]);
Modelo 2 de PL Variáveis de decisão: vetor x[1..3], (x1 = kg de osso, x2 = Kg de soja e x3 = Kg de peixe na ração) Variáveis de entrada: vetor custo[1..3] com os custos / kg de ingrediente vetor prot[1..3] com as quantidades de proteína por kg ingrediente vetor calcio[1..3] com as quantidades de cálcio por kg de ingrediente Função objetivo Min f(x) = Soma(j [1..3] : custo[ j ]*x[ j ]); Restrições Soma(j [1..3] : prot[ j ]*x[ j ]) >= 0,3; (0,2x1 + 0,5x2 + 0,4 x3 >= 0,3 (quant. mín. de proteína)) Soma(j [1..3] : calcio[ j ]*x[ j ]) >= 0,5; (0,6x1 + 0,4x2 + 0,4x3 >= 0,5 (quant. mín. de cálcio)) Soma(j [1..3] : x[ j ]) = 1; (x1 + x2 + x3 = 1 (unidade (Kg) da mistura))
Modelo 2 de PL Variáveis de decisão: vetor x[1..3], (x1 = kg de osso, x2 = Kg de soja e x3 = Kg de peixe na ração) Variáveis de entrada: vetor custo[1..3] com os custos / kg de ingrediente vetor prot[1..3] com as quantidades de proteína por kg ingrediente vetor calcio[1..3] com as quantidades de cálcio por kg de ingrediente Função objetivo Min f(x) = Soma(j [1..3] : custo[ j ]*x[ j ]); Restrições Soma(j [1..3] : prot[ j ]*x[ j ]) >= 0,3; (0,2x1 + 0,5x2 + 0,4 x3 >= 0,3 (quant. mín. de proteína)) Soma(j [1..3] : calcio[ j ]*x[ j ]) >= 0,5; (0,6x1 + 0,4x2 + 0,4x3 >= 0,5 (quant. mín. de cálcio)) Soma(j [1..3] : x[ j ]) = 1; (x1 + x2 + x3 = 1 (unidade (Kg) da mistura))
SEGUNDO MODELO NO LINGO Model:!para definir variáveis; sets: ingredientes/1..3/: x, prot, calcio, custo; end sets!para ler os dados de entrada; data: prot = 0.2, 0.5, 0.4;!A VIRGULA PODE SER SUBS. POR ESPAÇO; calcio = 0.6, 0.4, 0.4; custo = 0.56, 0.81, 0.46; enddata min = @sum(ingredientes(j): custo(j)*x(j));!função OBJETIVO; @sum(ingredientes(j): prot(j)*x(j)) >= 0.3;!RESTRIÇÃO PROTEÍNA; @sum(ingredientes(j): calcio(j)*x(j)) >= 0.5;!RESTRIÇÃO CÁLCIO @sum(ingredientes(j): x(j)) = 1;!RESTRIÇÃO DA UNIDADE; End
Considere a produção de ração animal a partir de três ingredientes básicos: osso, soja e farinha de peixe. Os principais nutrientes da ração são: proteína e cálcio. As necessidades mínimas desses nutrientes por kilo de ração são 30% de proteína e 50% de cálcio. Os custos e quantidades de nutriente (em porcentagem) por ingrediente são dados na tabela. Nutrientes Ingredientes Osso Soja Peixe Ração Proteína 0,2 0,5 0,4 0,3 Cálcio 0,6 0,4 0,4 0,5 Custo ($/Kg) 0,56 0,81 0,46 ------ Devemos determinar as quantidades de cada ingrediente a compor a ração de tal forma que as necessidades mínimas sejam satifeitas com o menor custo possível.
Uma refinaria fabrica dois tipos de gasolina (1 e 2) a partir de dois tipos de petróleo bruto (A e B). Os custos, os preços de venda e a matéria-prima para fabricar as gasolinas são. Tipo de Petróleo Disp (barris/dia) Custo ($R/barril) A 100 36,00 B 200 33,00 Gasolina % mínima do petróleo A Preço de venda ($R/barril) 1 60 45,00 2 30 42,00 Considerando que o petróleo bruto é convertido totalmente em combustível, sem perdas, formular um PPL para maximizar o seu lucro diário da refinaria.