Utilizando o Pacote lpSolve • Pacote utilizado para Resolução de Problemas de Programação Linear e Inteira. Função: lp(direction = "min", objective.in, const.mat, const.dir, const.rhs, transpose.constraints = TRUE, int.vec, presolve=0, compute.sens=0, binary.vec, all.int=FALSE, all.bin=FALSE, scale = 196, dense.const, num.bin.solns=1, use.rw=FALSE) Descrição dos Parâmetros: Max cx s.a Ax <= b, x≥0 direction = “min” ou “max” probl. Minimização ou Maximização objective= vetor com os coeficientes da função objetivo ( c ) const.mat = matriz com os coeficientes associados às restrições (A) const.dir=vetor de caracteres associados com as restrições (“=”,”<=”) const.rhs= vetor com os termos de b (lado direito) Exemplos: (1) Problema da Dieta Paula deseja saber quanto gastar para fazer uma dieta alimentar que forneça diariamente toda a energia, proteína e cálcio que ela necessita. Seu médico recomendou que ela se alimente de forma a obter diariamente no mínimo 2000 kcal de energia, 65g de proteína e 800 mg de cálcio. Tabela 1 – Valor nutritivo e custo dos alimentos alimento tamanho energia Proteína cálcio da porção (kcal) (g) (mg) arroz ovos leite feijão 100g 2un 237ml 260g 205 160 160 260 32 13 8 14 12 54 285 80 1 porção de arroz ==> 205 kcal 1 porção de ovos ==> 160 kcal 1 porção de leite ==> 160 kcal 1 porção de feijão ==>260 kcal x1=porções de arroz x2=porções de ovos x3=porções de leite x4=porções de feijão preço p/ porção (centavos) 14 13 9 19 min z = 14 x1 + 13x2 + 9 x3 + 19 x4 205 x1 + 160 x2 + 160 x3 + 260 x4 ≥ 2000 32x1 + 13x 2 + 8x3 + 14x 4 ≥ 65 12x1 + 54x2 + 285x3 + 80x4 ≥ 800 Restrição de Energia Restrição da Proteína Restrição do Cálcio Considerando que a dieta deve conter pelos uma unidade de cada um dos alimentos: Restringindo o número de unidades “leite” em 4 (2) Problema de Maximização de Produção Uma firma faz três produtos e tem três máquinas disponíveis para a produção. Para resolver sua escala de produção, modela o seguinte PPL: Max z = 4 x1 + 4 x2 + 7 x3 s.a x1 + 7 x2 + 4 x3 ≤ 100 2 x1 + x2 + 7 x3 ≤ 100 8 x1 + 4 x2 + x3 ≤ 100 Horas maq. 1 Horas maq. 2 Horas maq. 3 (3) Problema de Minimização de Custos com Empregados Uma companhia aérea está estudando a possibilidade de aumentar o seu número de voos. Para esse efeito, tornou-se necessário considerar a hipótese de contratar mais funcionários para as mais diversas funções, como por exemplo, para trabalharem no check-in, embora não seja claro quantos são necessários. Uma equipe de pesquisa operacional está estudando o problema, no sentido de minimizar o custo com o pessoal, garantindo uma qualidade de serviço imposta pela administração da empresa. Com base nos voos agendados, a equipe de IO obteve o número mínimo de funcionários que são necessários para cada período de tempo do dia, de acordo com a tabela abaixo. Por imposição da legislação do trabalho, os turnos dos funcionários não podem ultrapassar as oito horas de trabalho diário. Após algum estudo, a equipe de IO resolveu que existiriam cinco turnos, de oito horas cada um. Os salários dos turnos variam por forma a cativar os funcionários para os turnos menos agradáveis. Minimizar 170x1+160x2+175x3+180x4+195x5 s.a x1 ≥ 48 x1+x2 ≥ 79 x1+x2 ≥ 65 x1+x2+x3 ≥ 87 x2+x3≥ 64 x3+x4≥ 73 x3+x4≥ 82 x4≥ 43 x4+x5≥ 52 x5≥15 x1, x2, x3, x4, x5 = número de funcionários em cada um dos turnos (4) Problema de Padrões de Corte O problema consiste a cortar bobinas de papel de largura L em rolos de largura li (onde i = 1, . . . ,m) a fim de satisfazer uma demande di . Largura das bobinas: L = 100 cm. Rolo Rolo Largura 1 25 2 30 3 42 4 55 Largura (li ) Demanda (di) Total de Rolos 150 175 80 75 Variáveis de decisão: É preciso identificar primeiro os diferentes padrões de corte realizados pela máquina de corte. • Seja xj a variável que indica o número de bobinas cortadas de segundo o padrão de corte j. Minimizar Z=20x2+8x3+15x4+3x5+20x6+10x7+15x8 +16x9 +3x10 4x1+ 2x2 +2x3 + 1x4 + 1x5 +1x6≥150 (Mínimo de rolos tipo 1) 1x2+ 2x4 +1x5 +1x6+3x7 + 1x8 +≥175 (Mínimo de rolos tipo 2) 1x3+ 1x5 +2x9 + 1x10 ≥80 (Mínimo de rolos tipo 3) 1x6+ 1x8 +1x10 ≥75 (Mínimo de rolos tipo 4) (5) Problema de Caminho Mínimo (Extraído de Lachtermacher) Uma fábrica de artigos de decoração, localizada em Lambari (MG), deve entregar uma grande quantidade de peças na cidade de Baependi (MG). A empresa quer saber qual o caminho que seu caminhão de entregas deve fazer para minimizar a distância total percorrida. A figura a seguir, extraída de Lachtermacher (2004), representa, na forma de rede, as ligações entre as cidades da região. Deve-se determinar o caminho mínimo de Lambari para Baependi. Nesse problema xij é uma variável de decisão que assume valor 1 se o arco [i,j] faz parte do caminho e zero caso contrário. Variáveis { x12, x13, x15, x24, x35, x46, x56} (Integralidade e não-negatividade) Função Objetivo: Minimizar 41x12 + 44x13+ 50x15 +37x24 +27 x35 + 45x46 + 4x56 Nó origem = 1 Nó destino = 6 Restrições de Equilíbrio de Fluxo: x12+x13+x15=1 x46+x56=1 x12-x24=0 x13-x35=0 x24-x46=0 x15+x35-x56=0 • Em relação à variável x1j, temos a soma dos fluxos que saem do nó 1 deve igual a 1 => um arco escolhido • Em relação à variável xi6, temos a soma dos fluxos que chegam ao nó 6 deve ser igual a 1 => um escolhido. • Para os outros vértices, temos que a soma dos fluxos que chegam menos os fluxos que saem deve ser igual à zero. De forma a utilizar o lpSolve, vamos estabelecer a seguinte correspondência: x12, x13, x15, x24, x35, x46, x56 => y1, y2, y3, y4, y5, y6, y7 Minimizar 41 y1 + 44 y2+ 50 y3 +37 y4 +27 y5 + 45 y6 + 4 y7 y1+ y2+ y3=1 y6+ y7=1 y1- y4=0 y2- y5=0 y4- y6=0 y3+ y5- y7=0 y3=1 e y7=1 => x15 =1 e x56=1 Caminho: Lambari -> Caxambu -> Baependi (6) Problema da Cooperativa Agrícola Uma cooperativa agrícola opera 3 fazendas que possuem produtividades aproximadamente iguais entre si. A produção total por fazenda basicamente da área disponível para o plantio e da água de irrigação. A cooperativa procura diversificar sua produção de modo que vai plantar este ano três tipos de cultura em cada fazenda a saber: milho, arroz e feijão. Cada tipo de cultura demanda por certa quantidade de água. Para reduzir o conflito no uso das colheitadeiras, que são alugadas pela cooperativa estabeleceram-se limites de área de produção dentro de cada tipo de cultura. Para evitar a concorrência entre os cooperados, acordou-se que a proporção de área cultivada seja a mesma para cada uma das fazendas. As tabelas a seguir resumem os dados do problema. Pede-se a elaboração de um programa de produção que defina a área de cada cultura que será plantada em cada fazenda, de modo a otimizar o lucro total da produção da cooperativa. Água Disponível e Área de Cultivo por Fazenda Fazenda 1 2 3 Área Total p/ Cultivo 400 650 350 Água Disponível (Litros) 1800 2200 950 Consumo de Água, Área de Cultivo e Lucro por Cultura Cultura Miho Arroz Feijão Área Máxima de Cultivo (Acres) 660 880 400 Consumo de Água (L/Acre) 5,5 4,0 3,5 Lucro (R$/Acre) 5000 4000 1800 • xij = Variáveis de decisão = quantidade de unidades de acres que, na fazenda i será destinada à cultura j. Função Objetivo: Maximizar z=5000(x11+x21+x31)+4000(x12+x22+x32)+1800(x13+x23+x33) {Restrições de Cultivo} x11+x12+x13≤400 x21+x22+x23≤650 x31+x32+x33≤350 {Restrições de Consumo} 5.5 x11+4.0 x12+ 3.5x13≤1800 5.5 x21+4.0 x22+ 3.5x23≤2200 5.5 x31+4.0 x32+ 3.5x33≤950 {Restrições de Plantio} x11+ x21+ x31≤660 x12+ x22+ x32≤880 x13+ x23+ x33≤400 {Restrições associadas à proporção de área cultivada} (x11+ x12+ x13)/400=( x21+ x22+ x23)/650 (x21+ x22+ x23)/650=( x31+ x32+ x33)/350