UNIVERSIDADE FEDERAL DO AMAZONAS INSTITUTO DE COMPUTAÇÃO Lista de Exercícios I - Gabarito ICC500 - Introdução à Otimização Combinatória PGINF566 - Otimização Combinatória Profa. Rosiane de Freitas Questão 1. Correlacione a coluna da esquerda com a da direita. (a) Programação linear (b) Variáveis de folga (c) Método gráfico (d) Simplex (e) Variáveis não-básicas (f) Folgas complementares (g) Programação inteira (h) CPLEX (i) Branch-and-bound (j) Métodos de corte (j) Adiciona restrições a um problema relaxado (d) Algoritmo para obter soluções de programação linear contínua (i) Enumera subproblemas e limites para um problema discreto (h) Software para solução de modelos de programação linear (c) Obtém soluções de programação linear com até duas variáveis (f) Solução do primal a partir do dual (b) Variáveis usadas em inequações das restrições (a) Problemas com variáveis contínuas (e) Variáveis com valor zero na solução ótima (g) Problemas com variáveis discretas Questão 2. Considere o cenário a seguir: Uma pequena cooperativa de artigos artesanais de Manaus deseja efetuar a distribuição de suas peças em cidades do estado do Amazonas. Para isso, contratou um regateiro, que deverá entregar os itens em um conjunto de localidades do interior. Para otimizar o processo, a empresa quer aproveitar o conhecimento do regateiro, a geografia amazônica e usar o setor de logística da empresa para determinar qual a rota que o regateiro deve fazer para minimizar os custos de deslocamento, sendo que, ao final, o regateiro permanecerá na última localidade visitada. E se, após as entregas, o mesmo retornar à sua cidade de origem? E se ele tivesse apenas uma localidade (p. ex., Anamã) para entregar os produtos? Analise os 3 problemas. A figura a seguir representa as ligações hidrográficas entre as cidades da região, considerando as distâncias fluviais entre as cidades. Manaus 44km Novo Airão Caapiranga 37km 41km 50km 19km 25km 45km 4km Anamã Iranduba 27km Manacapuru a) Descreva teoricamente cada um dos 3 problemas. A figura dada é um grafo não-direcionado, onde as cidades são os vértices e as arestas indicam as distâncias entre pares de cidades, quando há um caminho direto entre as duas cidades da aresta. Quando o regateiro precisa visitar todas as cidades, sem retornar à origem, tem-se que, no grafo, deve-se determinar um caminho hamiltoniano de custo (distância) mínimo. Determinar a existência de tal caminho é um problema NP-completo, e encontrar o menor caminho desse tipo é um problema NP-difícil. 1
Se o regateiro retornar a sua cidade de origem, tem-se que a viagem dele forma um ciclo hamiltoniano, que é um caminho hamiltoniano adicionado de uma aresta extra entre o ponto final e o inicial do caminho, o que fecha o ciclo. A determinação do ciclo hamiltoniano de custo mínimo é equivalente ao problema do caixeiro viajante, um clássico problema de otimização NP-difícil. Os problemas do caminho hamiltoniano mínimo e do caixeiro viajante são equivalentes, uma vez que, adicionando um vértice artificial adjacente a todos os outros e cuja distância é 0 a todos os outros, tem-se que o ciclo hamiltoniano obtido neste grafo aumentado é equivalente ao caminho hamiltoniano mínimo no grafo original, bastando remover o vértice artificial e as arestas incidentes ao mesmo do ciclo. A figura abaixo mostra como ficaria o grafo aumentado da figura do enunciado. Vértice artificial 0 0km 0km 0km 0km 0km 0km Novo Airão 37km Caapiranga Manaus 44km 41km 50km 19km 25km 45km 4km Anamã Iranduba 27km Manacapuru Por fim, se o regateiro precisar entregar em apenas uma cidade, sem retornar à origem, tem-se o problema do caminho mínimo, que, ao contrário dos anteriores, pertence à classe P, uma vez que possui algoritmos polinomiais conhecidos (algoritmos de Dijkstra, Bellman-Ford e Floyd-Warshall). b) Forneça o modelo matemático para os 3 problemas, fazendo as considerações que julgar necessárias. Primeiramente, será mostrado o modelo para o caixeiro viajante. O grafo de entrada deve ser completo, logo, se não existir aresta entre dois vértices, deve-se adicionar uma aresta artificial de custo muito alto (matematicamente, custo infinito) de forma que elas nunca façam parte do ciclo ótimo. As variáveis de decisão são: { 1, se a aresta (i, j) faz parte do ciclo x ij = 0, caso contrário. Como o grafo não é direcionado, a versão do problema do caixeiro viajante abordada é simétrica, ou seja, (i, j) = (j, i) e d ij = d ji. Assim, só existirão variáveis x ij quando j > i ( i, j V ). O modelo então é o seguinte: Minimizar d ij x ij (1) Sujeito a (i,j) E j V : (i,j) E i,j S : (i,j) E x ij + j V : (i,j) E x ji = 2 (i V ) (2) x ij S 1 ( S V ) (3) x ij {0, 1} ( i, j V j > i) (4) A função objetivo (1) envolve a minização da distância total percorrida no ciclo hamiltoniano. O conjunto de restrições (2) faz com que, para cada vértice, existam pelo menos duas arestas incidentes ao mesmo no ciclo (de 2
forma a fechar o ciclo). Já o conjunto de restrições (3) consiste nas restrições de eliminação de sub-rota, de forma que, para todo subconjunto S dos vértices, existam, no máximo S 1 arestas entre eles, o que impede que um ciclo seja formado apenas com os vértices de S. Por fim, as restrições (4) são de integralidade. Para o problema do caminho hamiltoniano mínimo, como mostrado anteriormente, deve-se encontrar um ciclo hamiltoniano mínimo no grafo adicionado de um vértice artificial adjacente a todos os outros e com distância zero. Sendo 0 o tal vértice, o modelo matemático fica como o anterior, fazendo as seguintes alterações: V = V {0}. E = E {(0, l) l V }. Que devem ser usadas no modelo: Minimizar d ij x ij (i,j) E Sujeito a x ij + x ji = 2 (i V ) (2) j V : (i,j) E j V : (i,j) E x ij S 1 ( S V ) (3) i,j S : (i,j) E x ij {0, 1} ( i, j V j > i) (4) Para o problema do caminho mínimo, a formulação também é ligeiramente parecida, observando-se as seguintes características: Não há eliminação de sub-rotas, uma vez que não exige que o caminho passe por todos os vértices uma vez só. Sendo s o vértice inicial e f o final do caminho, tem-se que o número de arestas incidentes a s deve ser exatamente 1, sendo o mesmo exigido para f. Para os outros vértices, a quantidade de arestas incidentes deve respeitar a propriedade de que a quantidade de arestas que entram no vértice deve ser igual a quantidade das que saem (conservação de fluxo). Pode-se observar que, para os vértices i V {s, f}, tal quantidade de arestas incidentes será 0 ou 2. A função objetivo e as variáveis de decisão são as mesmas do caixeiro viajante, no entanto, será considerado que, para cada par i, j V, existirá uma variável x ij indicando se o caminho contém a aresta (i, j), como feito anteriormente, também tomando proveito de o grafo poder ser completado com arestas artificiais. O modelo então é o seguinte: Minimizar d ij x ij (1) (i,j) E Sujeito a x si x js = 1 (2) i V j V x fi x jf = 1 (3) i V j V x ip x jp = 0 ( p V {s, f}) (4) i V j V x ij {0, 1} ( i, j V ) (5) A restrição (2) garante que haja apenas uma aresta incidente ao vértice de início. A restrição (3) garante a mesma coisa em relação ao vértice final. Já o conjunto de restrições (4) diz respeito à conservação de fluxo. Por fim, as restrições (5) são de integralidade. c) Quais os problemas clássicos associados a este cenário? Existe algoritmo eficiente (polinomial) para algum deles? Justifique. (1) 3
Como abordado na letra a), os problemas são: caminho hamiltoniano mínimo, caixeiro viajante e caminho mínimo entre dois vértices. Dentre eles, apenas o problema do caminho mínimo admite algoritmo polinomial (algoritmos de Dijkstra, Bellman-Ford e Floyd-Warshall). Questão 3. Uma pessoa, sentindo-se sempre muito cansada e com a pele pálida, procurou um médico e foi diagnosticada com anemia ferropriva. Para melhora do quadro, o médico informou que o paciente deveria ingerir uma quantidade mínima de ferro, necessário para produção de hemoglobina, uma metaloproteína utilizada para transporte de oxigênio no sangue, além de vitamina C, que aumenta a absorção do ferro ingerido. O paciente, então, procurou um nutricionista, que forneceu a ele informações sobre a quantidade de ferro e vitamina C em diversos alimentos. Após isso, o paciente procurou, em um supermercado local, os preços dos alimentos indicados. Considere que os dados resultantes 1 são dados na tabela a seguir. Açaí Carne de frango Leite Carne de boi Brócolis Necessidade Vitamina C 3mg 4mg 4mg 6mg 2mg 30mg Ferro 1mg 2mg 6mg 4mg 3mg 45mg Preço (R$) 5,00 7,00 4,00 8,00 1,00 a) Forneça o modelo matemático para o problema, fazendo as considerações que achar necessárias. Variáveis de decisão: x A : quantidade de açaí. x F : quantidade de carne de frango. x L : quantidade de leite. x C : quantidade de carne de boi. x B : quantidade de brócolis. Todas as variáveis maiores ou iguais a zero. Função objetivo: minimização do custo da alimentação, equivalente à soma dos custos por unidade de cada alimento multiplicado pela quantidade do mesmo: Restrições: Necessidade mínima de vitamina C: 30mg. Necessidade mínima de ferro: 45mg. O modelo fica, então, da seguinte forma: Minimizar z = 5x A + 7x F + 4x L + 8x C + x B 3x A + 4x F + 4x L + 6x C + 2x B 30 x A + 2x F + 6x L + 4x C + 3x B 45 Minimizar z = 5x A + 7x F + 4x L + 8x C + x B Sujeito a 3x A + 4x F + 4x L + 6x C + 2x B 30 x A + 2x F + 6x L + 4x C + 3x B 45 x A, x F, x L, x C, x B 0 b) Apresente o dual do modelo matemático. Para facilitar o entendimento do dual, as variáveis e restrições do mesmo serão denotadas do seguinte modo: 1 Não necessariamente realistas. 4
Variáveis de decisão: u C : variável dual relacionada à restrição de vitamina C no primal. u F : variável dual relacionada à restrição de ferro no primal. Restrições: Restrição associada à variável do açaí no primal: 3u C + u F 5 Restrição associada à variável da carne de frango no primal: Restrição associada à variável do leite no primal: 4u C + 2u F 7 4u C + 6u F 4 Restrição associada à variável da carne de boi no primal: 6u C + 4u F 8 Restrição associada à variável do brócolis no primal: O dual do modelo, então, fica da seguinte forma: 2u C + 3u F 1 Maximizar w = 30u C + 45u F Sujeito a 3u C + u F 5 4u C + 2u F 7 4u C + 6u F 4 6u C + 4u F 8 2u C + 3u F 1 u C, u F 0 c) Resolva o dual utilizando o método gráfico. Para cada reta definida pelas restrições no dual, deve-se descobrir dois pontos para que seja possível tracejar as mesmas: Restrição 1: 3u C + u F 5 reta 3u C + u F = 5. Para u C = 0: u F = 5 ponto (0, 5). Para u F = 0: 3u F = 5 u F = 5 3 = 1, 666 ponto ( 5 3, 0). Restrição 2: 4u C + 2u F 7 reta 4u C + 2u F = 7. Para u C = 0: 2u F = 7 u F = 7 2 = 3, 5 ponto (0, 7 2 ). Para u F = 0: 4u C = 7 u C = 7 4 = 1, 75 ponto ( 7 4, 0). Restrição 3: 4u C + 6u F 4 reta 4u C + 6u F = 4. Para u C = 0: 6u F = 4 u F = 4 6 = 0, 666 ponto (0, 4 6 ). Para u F = 0: 4u C = 4 u C = 1 ponto (1, 0). Restrição 4: 6u C + 4u F 8 reta 6u C + 4u F = 8. Para u C = 0: 4u F = 8 u F = 2 ponto (0, 2). Para u F = 0: 6u C = 8 u C = 8 6 = 1, 333 ponto ( 8 6, 0). 5
Restrição 5: 2u C + 3u F 1 reta 2u C + 3u F = 1. Para u C = 0: 3u F = 1 u F = 1 3 = 0, 333 ponto (0, 1 3 ). Para u F = 0: 2u C = 1 u C = 1 2 = 0, 5 ponto ( 1 2, 0). O gráfico então é desenhado como na figura a seguir. 5 4 3 Restrição 1-3u C + u F 5 Restrição 2-4u C + 2u F 7 Restrição 3-4u C + 6u F 6 Restrição 4-6u C + 4u F 8 Restrição 5-2u C + 3u F 1 Região factível uf 2 1 0 A O B 0 0,5 1 1,5 2 u C Observe que, apesar da quantidade de restrições, a região factível é determinada apenas pela intersecção da reta da restrição 5 com os eixos de u C e u F - todos os coeficientes das restrições são positivos e são inequações de menor ou igual, logo, a região factível correspondente à cada restrição está à esquerda e abaixo da reta (lembrando que isto não é geral!). Para facilitar a visualização da região factível, a figura a seguir mostra o gráfico em uma escala diferente. 1 0,8 0,6 Restrição 1-3u C + u F 5 Restrição 2-4u C + 2u F 7 Restrição 3-4u C + 6u F 6 Restrição 4-6u C + 4u F 8 Restrição 5-2u C + 3u F 1 Região factível uf 0,4 A 0,2 0 O B 0 0,5 1 1,5 2 u C Deve-se então analisar os pontos extremos (vértices) da região factível, denotados no gráfico por O, A e B. Ponto O: origem (O = (0, 0)). Aplicando na função objetivo: z = (30 0) + (45 0) z = 0. Ponto A: intersecção do eixo de u F (ou seja, u C = 0) e a reta da restrição 5. Este ponto foi calculado anteriormente para traçar a reta da restrição 5 A = (0, 1 3 ). Aplicando na função objetivo: z = (30 0) + (45 1 3 ) z = 45 3 = 15. Ponto B: intersecção do eixo de u C (ou seja, u F = 0) e a reta da restrição 5. Este ponto foi calculado anteriormente para traçar a reta da restrição 5 B = (0, 1 2 ). 6
Aplicando na função objetivo: z = (30 1 2 ) + (45 0) z = 30 2 = 15. Ambos os pontos A = (0, 1 3 ) e B = (0, 1 2 ) possuem o mesmo valor de função objetivo, que é o máximo possível. Assim, qualquer um dos dois é solução ótima do problema dual, com z = 15. d) Resolva o primal utilizando o algoritmo simplex. O modelo primal, fornecido na letra a), tem a seguinte forma: Minimizar z = 5x A + 7x F + 4x L + 8x C + x B Sujeito a 3x A + 4x F + 4x L + 6x C + 2x B 30 x A + 2x F + 6x L + 4x C + 3x B 45 x A, x F, x L, x C, x B 0 Para utilização do método simplex, deve-se colocar o problema no formato padrão. Cada restrição é uma desigualdade do tipo, portanto, serão adicionadas variáveis de folga com coeficiente -1 para transformá-las em igualdades (caso fossem, os coeficientes seriam 1). Minimizar z = 5x A + 7x F + 4x L + 8x C + x B + 0s 1 + 0s 2 Sujeito a 3x A + 4x F + 4x L + 6x C + 2x B s 1 + 0s 2 = 30 x A + 2x F + 6x L + 4x C + 3x B + 0s 1 s 2 = 45 x A, x F, x L, x C, x B, s 1, s 2 0 Outra característica a ser verificada é que, quando temos um problema de maximização, os coeficientes das variáveis na função objetivo devem entrar no quadro simplex com o sinal trocado. No caso do problema desta questão, o problema é de minimização. Minimizar z é equivalente ao oposto da maximização de z. Portanto, pode-se transformar a minimização na maximização da função objetivo com os coeficientes multiplicados por -1. Porém, como estamos maximizando z e não z, o valor ótimo da função objetivo do problema de maximização deverá ser multiplicado por 1 para obtermos o mínimo de z. O problema a ser considerado então será: Maximizar z = 5x A 7x F 4x L 8x C x B + 0s 1 + 0s 2 Sujeito a 3x A + 4x F + 4x L + 6x C + 2x B s 1 + 0s 2 = 30 x A + 2x F + 6x L + 4x C + 3x B + 0s 1 s 2 = 45 x A, x F, x L, x C, x B, s 1, s 2 0 O quadro simplex inicial para este problema, considerando as variáveis de folga como a base inicial (uma vez que as colunas das mesmas são linearmente independentes) seria: Linha (L) BASE x A x F x L x C x B s 1 s 2 b 1 a 1 3 4 4 6 2 1 0 30 2 a 2 1 2 6 4 3 0 1 45 3 z 5 7 4 8 1 0 0 0 Olhando os custos reduzidos iniciais (ou seja, os coeficientes da função objetivo), verifica-se que todos são maiores ou iguais a zero, o que faz parecer que a solução inicial com s 1 = 30, s 2 = 45 e x A = x F = x L = x C = x B = 0, com z = 0, é ótima. Porém, essa leitura do quadro é incorreta, como mostrado a seguir. Como x A = x F = x L = x C = x B = 0, tem-se, pela restrição 1: 3x A + 4x F + 4x L + 6x C + 2x B s 1 + 0s 2 = 30 0 + 0 + 0 + 0 + 0 s 1 + 0 = 30 s 1 = 30 Porém, tem-se que todas as variáveis do problema são maiores ou iguais a zero, logo, não é possível trabalhar com este quadro. A leitura incorreta se deve ao fato de que a base utilizada tem valores negativos e não é canônica - 7
para que o valor da variável seja diretamente o valor na mesma linha da variável e na coluna b, a base utilizada deve ser canônica. O mesmo acontece com a linha 2 da restrição 2, que fornece s 2 = 45. Para resolver isso, serão usadas variáveis artificiais com o método do big-m, que envolve a adição de novas variáveis (uma por restrição que necessite de uma variável com coeficiente 1 para formar a base canônica) com custos muito ruins (denotado por um número M muito grande), de forma que elas saiam o mais depressa possível da base e não entrem mais. Se a solução final do problema contiver pelo menos uma delas, o problema original é infactível, caso contrário, é solução ótima do problema original. Se as variáveis artificiais forem colocadas no problema original de minimização, tem-se que os custos delas na função objetivo tem de ser muito altos (ou seja, +M), pois se deseja-se minimizar o valor, elas estão penalizando fortemente se tiverem valor acima de 0. Como as duas restrições precisam de variáveis com coeficiente 1 para formar a base canônica, tem-se que serão usadas duas variáveis artificiais, deixando o problema da seguinte forma: Minimizar z = 5x A + 7x F + 4x L + 8x C + x B + 0s 1 + 0s 2 + Ma 1 + Ma 2 Sujeito a 3x A + 4x F + 4x L + 6x C + 2x B s 1 + 0s 2 + a 1 + 0a 2 = 30 x A + 2x F + 6x L + 4x C + 3x B + 0s 1 s 2 + 0a 1 + a 2 = 45 x A, x F, x L, x C, x B, s 1, s 2, a 1, a 2 0 No problema modificado para maximização, as variáveis artificiais devem ter custos muito baixos (ou seja, M), pois também devem penalizar o valor máximo para que saiam da base depressa, deixando o problema da seguinte forma (que equivale a modificar diretamente o problema de minimização com as variáveis artificiais dado acima): Maximizar z = 5x A 7x F 4x L 8x C x B + 0s 1 + 0s 2 Ma 1 Ma 2 Sujeito a 3x A + 4x F + 4x L + 6x C + 2x B s 1 + 0s 2 + a 1 + 0a 2 = 30 x A + 2x F + 6x L + 4x C + 3x B + 0s 1 s 2 + 0a 1 + a 2 = 45 x A, x F, x L, x C, x B, s 1, s 2, a 1, a 2 0 O quadro inicial para o problema então, usando as variáveis artificiais como base, é: Linha (L) BASE x A x F x L x C x B s 1 s 2 a 1 a 2 b 1 a 1 3 4 4 6 2 1 0 1 0 30 2 a 2 1 2 6 4 3 0 1 0 1 45 3 z 5 7 4 8 1 0 0 M M 0 Antes de aplicar o simplex propriamente dito, deve-se consertar o valor da função objetivo. Tem-se que z = 0, porém, ao aplicar a 1 = 30 e a 2 = 45, com todas as outras variáveis como zero, tem-se que: z = 0 + 0 + 0 + 0 + 0 + 0 + 0 30M 45M z = 75M Para solucionar essa inconsistência, deve-se transformar os custos reduzidos das variáveis artificiais em zero, ou seja, na linha 3 (do z), deve-se efetuar operações entre linhas de forma que o valor nas colunas de a 1 e a 2 passem a ser zero. Isso pode ser feito efetuando a seguinte operação: L 3 = L 3 ML 1 ML 2 Que deixa o quadro da seguinte forma: Linha (L) BASE x A x F x L x C x B s 1 s 2 a 1 a 2 b 1 a 1 3 4 4 6 2 1 0 1 0 30 2 a 2 1 2 6 4 3 0 1 0 1 45 3 z 5 4M 7 6M 4 10M 8 10M 1 5M M M 0 0 75M Considerando M = 20 (que dá um custo pior que o das outras variáveis), o quadro fica: 8
Linha (L) BASE x A x F x L x C x B s 1 s 2 a 1 a 2 b 1 a 1 3 4 4 6 2 1 0 1 0 30 2 a 2 1 2 6 4 3 0 1 0 1 45 3 z 75 113 196 192 99 20 20 0 0 1500 Agora, pode-se aplicar o método simplex normalmente. A variável de menor custo reduzido (negativo) é x L, portanto, ela entrará na base. Para determinar quem sairá da base, deve-se calcular os quocientes entre o elemento da coluna b na linha de uma variável básica e o elemento da coluna na variável que entrará na base na mesma linha, sendo que quem sai da base é a variável cujo quociente é o menor. Para a 1 : 30 6 = 15. Para a 2 : 45 3 = 15. Ambas as variáveis possuem o mesmo quociente, logo, será escolhida a de menor índice (a 1 ). O pivô então será a intersecção da linha da variável que sairá com a coluna da variável que entrará, ou seja, 4. Na coluna da variável entrante, o pivô deve ser transformado em 1 e todos outros elementos da coluna em zero. Para isso, serão aplicadas as seguintes operações entre linhas: L nova 1 = 1 4 L 1. L nova 2 = L 2 6L nova 1. L nova 3 = L 3 + 196L nova 1. O próximo quadro, então, será: Linha (L) BASE x A x F x L x C x B s 1 s 2 a 1 a 2 b 1 x L 0, 75 1 1 1, 5 0, 5 0, 25 0 0, 25 0 7, 5 2 a 2 3, 5 4 0 5 0 1, 5 1 1, 5 1 0 3 z 72 83 0 102 1 29 20 0 0 30 A variável de menor custo reduzido (negativo) é s 1, portanto, ela entrará na base. Os quocientes para verificação de quem sairá da base são: Para x L : 7, 5 = 30 (negativo, não sairá da base). 0, 25 Para a 2 : 0 1, 5 = 0. Tem-se que a variável a sair da base é a 2. O pivô então será 1, 5 e, na coluna de s 1 (que entrará na base), para transformar o pivô em 1 e os outros elementos da coluna em zero, serão feitas as seguintes operações: L nova 2 = 1 1, 5 L 2. L nova 1 = L 1 + 1 4 Lnova 2. L nova 3 = L 3 + 29L nova 2. O próximo quadro, então, será: Linha (L) BASE x A x F x L x C x B s 1 s 2 a 1 a 2 b 1 x L 0, 166 0, 333 1 0, 666 0, 5 0 0, 166 0, 5 0, 166 7, 5 2 s 1 2, 333 2, 666 0 3, 333 0 1 0, 666 1 0, 666 0 3 z 4, 333 5, 666 0 198, 666 1 0 0, 666 29 19, 333 30 9
A variável de menor custo reduzido (negativo) é x B, portanto, ela entrará na base. Os quocientes para verificação de quem sairá da base são: Para x L : 7, 5 0, 5 = 15 Para s 1 : 0 0 = indeterminado (não sairá da base). Tem-se que a variável a sair da base é x L. O pivô então será 1. Na coluna de x B (que entrará na base), para transformar os outros elementos da coluna em zero, serão feitas as seguintes operações: L nova 1 = 2L 1. L nova 2 = L 2. L nova 3 = L 3 + L nova 1. O próximo quadro, então, será: Linha (L) BASE x A x F x L x C x B s 1 s 2 a 1 a 2 b 1 x B 0, 333 0, 666 2 1, 333 1 0 0, 333 1 0, 333 15 2 s 1 2, 333 2, 666 0 3, 333 0 1 0, 666 1 0, 666 0 3 z 4, 666 6, 333 2 200 0 0 0, 333 30 19, 666 15 Todos os custos reduzidos são maiores ou iguais a zero, e não há variáveis artificiais na base, logo, este quadro define a solução ótima para o problema, com x B = 15, todas as outras variáveis como 0 e z = 15 z = 15. Observe que o valor da função objetivo é o mesmo da calculada para o dual no item anterior. e) Utilizando o teorema das folgas complementares, mostre que, partindo da solução dual do item c), pode-se obter a solução primal do item d). A solução dual do item c) foi u C = 0 e u F = 0, 333 OU u C = 0, 5 e u F = 0, ambos com w = 15. Pelo teorema das folgas complementares, tem-se: u(ax b) = 0 { 0 = 0 0, 333x A + 0, 666x F + 2x L + 1, 333x C + x B 15) = 0 Para determinar quais variáveis tem valor zero, utiliza-se a outra equação do teorema das folgas complementares: (c ua)x = 0 (5 3u C u F )x A = 0 (7 4u C 2u F )x F = 0 (4 4u C 6u F )x L = 0 (8 6u C 4u F )x C = 0 (1 2u C 3u F )x B = 0 4, 666x A = 0 x A = 0 6, 333x F = 0 x B = 0 2x L = 0 x L = 0 6, 666x C = 0 x C = 0 0x B = 0 x B =? Tem-se então que todas as variáveis, exceto x B, são zero. Aplicando no sistema obtido anteriormente: { 0 = 0 0, 333x A + 0, 666x F + 2x L + 1, 333x C + x B 15) = 0 Que é a mesma solução do primal obtida pelo simplex. x B 15 = 0 x B = 15 10
Questão 4. Considere o seguinte problema de programação inteira: Maximizar z = 5x 1 + x 2 (1) Sujeito a x 1 + 2x 2 4 (2) x 1 x 2 1 (3) 4x 1 + x 2 12 (4) x 1, x 2 0 (5) x 1, x 2 Z (6) a) Removendo a restrição (6), que exige que as variáveis sejam inteiras, tem-se um problema de programação linear contínua. Resolva o problema sem tal restrição. Tal problema possui apenas duas restrições, logo, pode ser resolvido pelo método gráfico, como visto a seguir. Para cada reta definida pelas restrições, deve-se descobrir dois pontos para que seja possível tracejar as mesmas: Restrição 1: x 1 + 2x 2 4 reta x 1 + 2x 2 = 4. Para x 1 = 0: 2x 2 = 4 x 2 = 2 ponto (0, 2). Para x 2 = 0: x 1 = 4 x 1 = 4 ponto ( 4, 0). Restrição 2: x 1 x 2 1 reta x 1 x 2 = 1. Para x 1 = 0: x 2 = 1 x 2 = 1 ponto (0, 1). Para x 2 = 0: x 1 = 1 ponto (1, 0). Restrição 3: 4x 1 + x 2 12 reta 4x 1 + x 2 = 12. Para x 1 = 0: x 2 = 12 ponto (0, 12). Para x 2 = 0: 4x 1 = 12 x 1 = 3 ponto (3, 0). O gráfico então é desenhado como na figura a seguir. 4 3 Restrição 1: -x 1 + 2x 2 4 Restrição 2: x 1 - x 2 1 Restrição 3: 4x 1 + x 2 12 Região factível C x2 2 A D 1 0 O B 0 1 2 3 x 1 Deve-se então analisar os pontos extremos (vértices) da região factível, denotados no gráfico por O, A, B, C e D. Ponto O: origem (O = (0, 0)). Aplicando na função objetivo: z = (5 0) + 0 z = 0. 11
Ponto A: intersecção do eixo de x 2 (ou seja, x 1 = 0) e a reta da restrição 1. Este ponto foi calculado anteriormente para traçar a reta da restrição 1 A = (0, 2). Aplicando na função objetivo: z = (5 0) + 2 z = 2. Ponto B: intersecção do eixo de x 1 (ou seja, x 2 = 0) e a reta da restrição 2. Este ponto foi calculado anteriormente para traçar a reta da restrição 2 B = (1, 0). Aplicando na função objetivo: z = (5 1) + 0 z = 5. Ponto C: intersecção da reta da restrição 1 e a reta da restrição 3. Para determinar este ponto, deve-se resolver o sistema composto das equações das retas das restrições: { x1 + 2x 2 = 4 4x 1 + x 2 = 12 Cuja solução é x 1 = 20 9 = 2, 222 e x 2 = 28 9 = 3, 111. Aplicando na função objetivo: z = (5 20 9 ) + 28 9 z = 128 9 = 14, 222. Ponto D: intersecção da reta da restrição 2 e a reta da restrição 3. Para determinar este ponto, deve-se resolver o sistema composto das equações das retas das restrições: { x1 x 2 = 1 4x 1 + x 2 = 12 Cuja solução é x 1 = 13 5 = 2, 166 e x 2 = 8 5 = 1, 6. Aplicando na função objetivo: z = (5 13 5 ) + 8 5 z = 73 5 = 14, 6. Como o problema é de maximização, a solução ótima é o ponto cujo valor da função objetivo é o maior dentre todos. Assim, tem-se que a solução ótima da relaxação linear é x 1 = 13 5 = 2, 166 e x 2 = 8 5 = 1, 6, com z = 73 5 = 14, 6. b) A partir da solução obtida no item b) anterior, aplique arredondamento e truncamento na mesma para obter soluções inteiras. As mesmas são factíveis? Solução obtida por arredondamento: x A 1 = 2, 166 xa 1 = 3. x A 1 = 1, 6 xa 1 = 2. Testando factibilidade: x A 1 + 2xA 2 4 3 + (2 2) 4 3 + 4 4 1 4 OK. x A 1 xa 2 1 3 2 1 1 1 OK. 4x A 1 + 2xA 2 12 (4 3) + (2 2) 12 12 + 4 12 16 12 infactível. Solução obtida por truncamento: x T 1 = 2, 166 xa 1 = 2. x T 1 = 1, 6 xa 1 = 1. Testando factibilidade: x T 1 + 2xT 2 4 2 + (2 1) 4 2 + 2 4 0 4 OK. x T 1 xt 2 1 2 1 1 1 1 OK. 4x T 1 + 2xT 2 12 (4 2) + (2 1) 12 8 + 2 12 10 12 OK. c) Mostre, graficamente, as soluções (pontos) que satisfazem todas as restrições do problema original (variáveis inteiras), identificando as soluções calculadas no item b). Na figura abaixo, os pontos inteiros da região factível são denotados por I k. A solução obtida por arredondamento é denotada por A e a obtida por truncamento é denotada por T. 12
4 3 Restrição 1: -x 1 + 2x 2 4 Restrição 2: x 1 - x 2 1 Restrição 3: 4x 1 + x 2 12 Região factível I 9 x2 2 I 3 I 6 I 8 A 1 I 2 I 5 I 7 = T 0 I 1 I 4 0 1 2 3 x 1 Os pontos inteiros da região factível são: I 1 = (0, 0). I 2 = (0, 1). I 3 = (0, 2). I 4 = (1, 0). I 5 = (1, 1). I 6 = (1, 2). I 7 = (2, 1). I 8 = (2, 2). I 9 = (2, 3). As duas soluções obtidas por arredondamento e truncamento: A = (3, 2). T = I 7 = (2, 1). d) Determine a solução ótima do problema original usando o método branch-and-bound. Resposta: Primeiramente, observe o critério que será usado na seleção de subproblemas: subproblemas encontrados anteriormente serão resolvidos antes dos posteriores (ou seja, a cada ramificação, é resolvido cada subproblema e depois os subproblemas dos subproblemas). Este critério é semelhante ao algoritmo de busca em largura em grafos e será usado também em outras questões de branch-and-bound deste gabarito para melhor visualização da árvore de enumeração. Considere que o índice de cada subproblema P i indica a ordem de resolução de mesmo. 13
P 0 : Problema original relaxado: Maximizar z = 5x 1 + x 2 x 1 + 2x 2 4 x 1 x 2 1 4x 1 + x 2 12 0 x 1, x 2 0 Solução de P 0 : x 1 = 2, 6 x 2 = 1, 6 z = 14, 6 Ramificação na variável x 1 : P 1 terá a restrição x 1 3 e P 2 terá x 2 2. P 1 : Problema P 0 com restrição adicional x 1 3: Maximizar z = 5x 1 + x 2 x 1 + 2x 2 4 x 1 x 2 1 4x 1 + x 2 12 x 1 3 0 x 1, x 2 0 Solução de P 1 : Infactível Nó podado. P 2 : Problema P 0 com restrição adicional x 1 2: Maximizar z = 5x 1 + x 2 x 1 + 2x 2 4 x 1 x 2 1 4x 1 + x 2 12 x 1 2 0 x 1, x 2 0 Solução de P 2 : x 1 = 2 x 2 = 3 z = 13 Primeira solução incumbente (inteira): limite inferior passa a ser 13. Como não há mais ramificações, esta é a única incumbente gerada por este branch-andbound. P 0 x 1 = 2,6 x 2 = 1,6 z = 14,6 4 3 Restrição 1: -x1 + 2x2 4 Restrição 2: x1 - x2 1 Restrição 3: 4x1 + x2 12 Ótimo inteiro x 1 2 x 1 3 Ótimo da relaxação x 1 3 x 1 2 P 1 P 2 x2 2 P 1 Infactível x 1 = 2 x 2 = 3 z = 3 1 P 2 Incumbente Solução ótima 0 0 1 2 3 P 0 4 x1 Questão 5. Para o problema abaixo, responda o que se pede. Maximizar z = 9x 1 + 7x 2 + 5x 3 + 2x 4 5x 1 + 4x 2 + 3x 3 + 2x 4 7 x 1, x 2, x 3, x 4 {0, 1} 14
a) Qual o problema clássico associado? Existe algoritmo eficiente (polinomial) para o mesmo, apesar de ser modelado como PI? Justifique. Resposta: O problema clássico é o da mochila 0/1. A função objetivo consiste em maximizar o lucro dos itens colocados na mochila. A restrição do problema diz que o peso dos itens (os coeficientes das variáveis na restrição) colocados na mochila não deve ultrapassar a capacidade da mesma (no problema dado, pode-se verificar que a capacidade é 7). A mochila 0/1 é um problema clássico de otimização NP-difícil, logo, não é conhecido nenhum algoritmo polinomial para o mesmo. No entanto, o problema admite algoritmo pseudopolinomial (ou seja, polinomial no número de itens da entrada, mas exponencial nos valores numéricos da mesma) de tempo O(nC) (onde n é o número de itens e C é a capacidade da mochila) utilizando programação dinâmica. b) Resolva o modelo utilizando o método branch-and-bound. Dica: não é necessário usar o simplex, pois cada variável só pode assumir um entre dois valores (0 ou 1). Resposta: Pode-se verificar, pelo modelo dado e pela formulação genérica do problema, que tem-se 4 itens a serem colocados em uma mochila de capacidade 7. Os lucros e pesos dos itens são resumidos na tabela abaixo: Item (i) Lucro (l i ) Peso (p i ) 1 9 5 2 7 4 3 5 3 4 2 2 A relaxação linear do problema da mochila 0/1 é o problema da mochila fracionária, para o qual existe um algoritmo guloso eficiente para resolver a relaxação de forma ótima. Portanto, tal algoritmo será usado no lugar do simplex para computar os limites superiores. O algoritmo para o problema da mochila fracionária requer o cálculo das densidades dos itens. A densidade de um item i, denotada por d i é dada pela divisão de seu lucro pelo seu peso, isto é, d i = l i p i. A seguinte tabela completa a anterior com as densidades de cada item: Item (i) Lucro (l i ) Peso (p i ) Densidade (d i ) 1 9 5 1,8 2 7 4 1,75 3 5 3 1,6667 4 2 2 1 O método consiste, então, em procurar o item de maior densidade e o inserir na mochila, diminuindo o valor da capacidade C de acordo com o peso do item inserido. Repete-se esta operação para o resto dos itens até que o item de maior densidade não caiba inteiro na mochila. Nesse caso, coloca-se a maior parte possível do item para preencher a capacidade da mochila. Abaixo tem-se o pseudocódigo desse algoritmo. Require: conjunto I de itens, onde o item i tem lucro l i e peso p i ; capacidade C da mochila. 1: function Guloso-MochilaFracionaria(I, l, p, C) 2: itensm ochila 3: C restante 0 4: lucro 0 5: I I Conjunto de itens fora da mochila 15
6: for cada i I do 7: d i l i p i Cálculo das densidades 8: end for 9: while C restante > 0 do 10: i max 1 11: for cada i I do determinação do item de maior densidade em I 12: if d i > d imax then 13: i max i 14: end if 15: end for 16: if p i < C restante then 17: itensmochila itensmochila {i max } 18: C restante = C restante p imax 19: lucro lucro + l imax 20: else 21: fracaoitem C restante p imax 22: itensmochila itensmochila {fracaoitem i max } coloca apenas uma porção do item na mochila 23: C restante = C restante (fracaoitem p imax ) 24: lucro lucro + (fracaoitem l imax ) 25: end if 26: end while 27: return itensm ochila e lucro 28: end function É importante ressaltar que também pode-se usar o simplex e resolver a relaxação linear do modelo matemático ao invés desse algoritmo. Para a determinação de um limite inferior inicial (ao invés de iniciar com LI = ), pode-se usar uma heurística gulosa para a mochila 0/1, o que pode levar a podas mais cedo no algoritmo e, consequentemente, a uma economia de tempo na enumeração. A heurística é similar ao algoritmo anterior e consiste em inserir na mochila o item de maior densidade dentre os que ainda caibam nela (ou seja, não há a possibilidade de inserir somente a parte de um item na mochila). O algoritmo fica como se segue. Require: conjunto I de itens, onde o item i tem lucro l i e peso p i ; capacidade C da mochila. 1: function Guloso-Mochila0/1(I, l, p, C) 2: itensm ochila 3: C restante 0 4: lucro 0 5: I I Conjunto de itens fora da mochila 6: parar falso Utilizado para determinar se nenhum item restante cabe na mochila 7: for cada i I do 8: d i l i Cálculo das densidades p i 9: end for 10: while parar = falso do 11: i max 1 12: parar verdadeiro 13: for cada i I do determinação do item de maior densidade em I que ainda caiba 14: if p i < C restante then 15: parar falso 16: if d i > d imax then 17: i max i 18: end if 16
19: end if 20: end for 21: if parar = falso then 22: itensmochila itensmochila {i max } 23: C restante = C restante p imax 24: lucro lucro + l imax 25: end if 26: end while 27: return itensm ochila e lucro 28: end function Os algoritmos serão aplicados agora para determinação dos limites. Inicialmente será calculado o limite superior: Iteração #0: capacidade restante 7, itens na mochila =, lucro = 0. O item de maior densidade é 1, logo, ele entrará na mochila. Iteração #1: capacidade restante 2, itens na mochila = {1}, lucro = 9. O item de maior densidade é 2, logo, ele entrará na mochila. Como ele não cabe inteiro, será colocado C restante mochila. p 2 = 2 4 = 0, 5 do item na A solução para o problema relaxado, então, consiste no item 1 inteiro e 0, 5 do item 2, com lucro de 12,5. Equivalentemente, x 1 = 1; x 2 = 0, 5; x 3 = x 4 = 0. O limite superior então é 12,5. Agora, a determinação do limite inferior inicial: Iteração #0: capacidade restante 7, itens na mochila =, lucro = 0. O item de maior densidade que cabe na mochila é 1, logo, ele entrará na mochila. Iteração #1: capacidade restante 2, itens na mochila = {1}, lucro = 9. O item de maior densidade que cabe na mochila é 4, logo, ele entrará na mochila. Nenhum outro item cabe na mochila. A solução obtida pela heurística, então, consiste nos itens 1 e 4 na mochila com lucro de 11. Equivalentemente, x 1 = 1; x 2 = x 3 = 0; x 4 = 1. O limite inferior então é 11. A partir desses dados, o branch-and-bound será aplicado. P 0 : Problema original relaxado: Maximizar z = 9x 1 + 7x 2 + 5x 3 + 2x 4 5x 1 + 4x 2 + 3x 3 + 2x 4 7 0 x 1, x 2, x 3, x 4 1 P 1 : Problema P 0 com restrição adicional x 2 = 0: Maximizar z = 9x 1 + 7x 2 + 5x 3 + 2x 4 5x 1 + 4x 2 + 3x 3 + 2x 4 7 x 2 = 0 0 x 1, x 2, x 3, x 4 1 Solução de P 0 : x 1 = 1 x 2 = 0, 5 z = 12, 5 Ramificação na variável x 2 : P 1 terá a restrição x 2 = 0 e P 2 terá x 2 = 1. Solução de P 1 : x 1 = 1 x 3 = 0, 6667 z = 12, 3333 Ramificação na variável x 3 : P 3 terá a restrição x 3 = 0 e P 4 terá x 3 = 0. 17
P 2 : Problema P 0 com restrição adicional x 2 = 1: Maximizar z = 9x 1 + 7x 2 + 5x 3 + 2x 4 5x 1 + 4x 2 + 3x 3 + 2x 4 7 x 2 = 1 0 x 1, x 2, x 3, x 4 1 P 3 : Problema P 1 com restrição adicional x 3 = 0: Maximizar z = 9x 1 + 7x 2 + 5x 3 + 2x 4 5x 1 + 4x 2 + 3x 3 + 2x 4 7 x 2 = 0 x 3 = 0 0 x 1, x 2, x 3, x 4 1 P 4 : Problema P 1 com restrição adicional x 3 = 1: Maximizar z = 9x 1 + 7x 2 + 5x 3 + 2x 4 5x 1 + 4x 2 + 3x 3 + 2x 4 7 x 2 = 0 x 3 = 1 0 x 1, x 2, x 3, x 4 1 P 5 : Problema P 2 com restrição adicional x 1 = 0: Maximizar z = 9x 1 + 7x 2 + 5x 3 + 2x 4 5x 1 + 4x 2 + 3x 3 + 2x 4 7 x 2 = 1 x 1 = 0 0 x 1, x 2, x 3, x 4 1 P 6 : Problema P 2 com restrição adicional x 1 = 1: Maximizar z = 9x 1 + 7x 2 + 5x 3 + 2x 4 5x 1 + 4x 2 + 3x 3 + 2x 4 7 x 2 = 1 x 1 = 1 0 x 1, x 2, x 3, x 4 1 Solução de P 2 : x 1 = 0, 6 x 2 = 1 z = 12, 4 Ramificação na variável x 1 : P 5 terá a restrição x 1 = 0 e P 6 terá x 1 = 0. Solução de P 3 : x 1 = 1 x 4 = 1 z = 11 Solução incumbente: valor igual ao limite inferior. Observe que essa solução obtida é a mesma da heurística. Solução de P 4 : x 1 = 0, 8 x 3 = 1 z = 12, 2 Ramificação na variável x 1 : P 7 terá a restrição x 1 = 0 e P 8 terá x 1 = 1. Solução de P 5 : x 2 = 1 x 3 = 1 z = 12 Solução incumbente (inteira): valor de z é maior que o limite inferior. Assim, essa passa a ser a nova melhor solução e o novo limite inferior é 12. Solução de P 6 : Infactível Nó podado. 18
P 7 : Problema P 4 com restrição adicional x 1 = 0: Maximizar z = 9x 1 + 7x 2 + 5x 3 + 2x 4 5x 1 + 4x 2 + 3x 3 + 2x 4 7 x 2 = 0 x 3 = 1 x 1 = 0 0 x 1, x 2, x 3, x 4 1 Solução de P 7 : x 3 = 1 x 4 = 1 z = 7 Solução incumbente (inteira): valor de z é menor que o limite inferior. O limite inferior não é alterado. P 8 : Problema P 4 com restrição adicional x 1 = 1: Maximizar z = 9x 1 + 7x 2 + 5x 3 + 2x 4 5x 1 + 4x 2 + 3x 3 + 2x 4 7 x 2 = 0 x 3 = 1 x 1 = 1 0 x 1, x 2, x 3, x 4 1 Solução de P 8 : Infactível Nó podado. A solução ótima, então, consiste em adicionar os itens 2 e 3 na mochila. P 3 x 1 = 1 x 4 = 1 z = 11 Incumbente P 7 x 3 = 1 x 4 = 1 z = 7 Incumbente P 0 x 2 = 0 x 2 = 1 P 1 P 2 x 1 = 1 x 3 = 0,667 z = 12,333 x 3 = 0 x 3 = 1 P 4 x 1 = 0,8 x 3 = 1 z = 12,2 x 1 = 0 x 3 = 1 x 1 = 1 x 2 = 0,5 z = 12,5 P 8 Infactível x 1 = 0,6 x 2 = 1 z = 12,4 x 1 = 0 x 1 = 1 P 5 P 6 x 2 = 1 x 3 = 1 z = 12 Incumbente Solução ótima Infactível Solução ótima: x 1 = 0, x 2 = 1, x 3 = 1, x 4 = 1, z = 12. Questão 6. Considere o seguinte problema de programação inteira: Maximizar z = x 1 + x 2 3x 1 + 2x 2 6 3x 1 + 2x 2 0 x 1, x 2 Z 19
O quadro ótimo obtido após a aplicação do algoritmo simplex em sua relaxação linear (onde x 3 e x 4 são as variáveis de folga associadas a primeira e segunda restrições, respectivamente) é dado por: BASE x 1 x 2 x 3 x 4 b x 1 1 0 1/6-1/6 1 x 2 0 1 1/4 1/4 3/2 z 0 0 5/12 1/12 5/2 Qual o corte de Gomory associado a este quadro? Expresse este corte em termos das variáveis originais do problema. Reotimize e expresse o novo corte de Gomory, se houver. Resposta: A forma padrão do problema é dada a seguir: Maximizar z = x 1 + x 2 3x 1 + 2x 2 + x 3 = 6 3x 1 + 2x 2 + x 4 = 0 x 1, x 2, x 3, x 4 Z De acordo com o quadro, a variável x 2 tem valor 3 2 variável básica. Tal linha define a seguinte restrição: = 1, 5. Logo, o corte será formulado em torno da linha desta x 2 + 1 4 x 3 + 1 4 x 4 = 3 2 Equivalentemente, da forma vista em sala de aula, temos que o valor variável x 2 é dado por (onde N é o conjunto de variáveis não-básicas): x 2 = b 2 j N a 2j x j x 2 = 3 2 1 4 x 3 1 4 x 4 Separando a equação em partes inteiras e fracionárias (onde todas as partes fracionárias são positivas ou 0): ( 1 x 2 = (1 0x 3 0x 4 ) + 2 1 4 x 3 1 ) 4 x 4 Como a parte fracionária é estritamente menor que 1, para que ela seja inteira, a mesma deve ser menor ou igual a zero. Assim, temos o corte: 1 2 1 4 x 3 1 4 x 4 0 1 4 x 3 1 4 x 4 1 1 2 4 x 3 1 4 x 4 + x 5 = 1 2 Teremos então o seguinte problema cuja relaxação linear contínua será resolvida pelo simplex: O quadro ótimo do novo problema é dado abaixo: Maximizar z = x 1 + x 2 3x 1 + 2x 2 + x 3 = 6 3x 1 + 2x 2 + x 4 = 0 1 4 x 3 1 4 x 4 + x 5 = 1 2 x 1, x 2, x 3, x 4, x 5 Z BASE x 1 x 2 x 3 x 4 x 5 b x 1 1 0 1/3 0-2/3 4/3 x 2 0 1 0 0 1 1 x 4 0 0 1 1-4 2 z 0 0 1/3 0 1/3 7/3 20
Tal solução continua sem ser inteira. A variável x 1 tem valor fracionário, logo, o corte será obtido na linha de tal variável. A linha de x 1 define a seguinte equação: x 1 + 1 3 x 3 2 3 x 5 = 4 x 1 = 4 3 3 1 ( 3 x 3 2 ) 3 x 5 Separando em partes inteiras e fracionárias (onde estas últimas são não negativas): x 1 = 4 3 1 ( 3 x 3 2 ) ( 1 3 x 5 x 1 = (1 0x 3 + x 5 ) + 3 1 3 x 3 1 ) 3 x 5 O novo corte será, então: E o novo problema: 1 3 x 3 1 3 x 5 + x 6 = 1 3 Cujo quadro ótimo é: Maximizar z = x 1 + x 2 3x 1 + 2x 2 + x 3 = 6 3x 1 + 2x 2 + x 4 = 0 1 4 x 3 1 4 x 4 + x 5 = 1 2 1 3 x 3 1 3 x 5 + x 6 = 1 3 x 1, x 2, x 3, x 4, x 5, x 6 Z BASE x 1 x 2 x 3 x 4 x 5 x 6 b x 1 1 0 13/15 0 0-8/5 2 x 2 0 1-4/5 0 0 12/5 0 x 4 0 0 5 1 0-12 6 x 5 0 0 1 0 1-3 1 z 0 0 1/15 0 0 4/5 2 Esta solução é inteira, portanto, é a solução ótima do problema original de programação inteira. Solução ótima: x 1 = 2, x 2 = 0, z = 2. QUESTÕES SOMENTE PARA O PPGI (opcional para a graduação) Questão 7. O problema de cobertura de vértices pode ser definido como se segue. Seja G = (V, E) um grafo simples não direcionado com n vértices. Uma cobertura de vértices de G consiste em um subconjunto V V tal que, para cada aresta (i, j) E, tem-se que ou i V, ou j V ou então ambos i, j V. O problema consiste, então, em determinar a menor cobertura de vértices possível para G. O modelo matemático de PI para o problema é dado a seguir. Minimizar i V x i x i + x j 1 x i {0, 1} (i, j) E i V a) Forneça um algoritmo 2-aproximativo para o problema. Resposta: 21
Um algoritmo aproximativo para o problema consiste em avaliar as arestas do grafo em uma ordem qualquer. A cada aresta (i, j) não coberta, deve-se adicionar ambos i e j à cobertura. O pseudocódigo deste procedimento é dado abaixo. 1: function CoberturaVertices-2Apr(V, E) 2: cobertura 3: E E 4: while E do 5: (i, j) aresta arbitrária de E 6: cobertura cobertura {i, j} 7: Remover de E todas as arestas incidentes a i ou j 8: end while 9: return cobertura 10: end function b) Prove a razão de aproximação do algoritmo dado no item anterior. Resposta: Seja A o conjunto de todas as arestas selecionadas na linha 5 do algoritmo dado no item anterior e C a cobertura gerada. Observe que, para cobrir as arestas em A qualquer cobertura de vértices deve incluir pelo menos um dos vértices (i ou j) de cada aresta (i, j) A. No entanto, as arestas em A não possuem vértices em comum, uma vez que toda vez que uma aresta (i, j) é selecionada na linha 5, as outras arestas incidentes a i ou a j são descartadas. Logo, quaisquer duas arestas em A não são cobertas pelo mesmo vértice, o que fornece um limite inferior para a cobertura ótima, isto é: OP T A Onde OP T é o tamanho da menor cobertura de vértices de G. Quando uma aresta de A é selecionada, são adicionados dois vértices para a cobertura, ou seja: Portanto: C = 2 A C = 2 A 2 OP T C 2 OP T c) Qual a relação do algoritmo 2-aproximativo com outro problema clássico de otimização envolvendo grafos? Resposta: O algoritmo dado no item a) consiste em determinar um emparelhamento maximal (maximal matching) no grafo. O problema de emparelhamento consiste em determinar um subconjunto de arestas tais que, para qualquer par de arestas (i, j) e (k, l) no subconjunto, tem-se que i k, i l, j k e j l (ou seja, não possuem vértices em comum). Existem algoritmos polinomiais para a determinação de emparelhamentos máximos (todo emparelhamento máximo é maximal, mas o inverso nem sempre é verdade). 22