Pesquisa Operacional 2
Horários das aulas
- Segundas-feiras de 12:00 as 14:00 (Sala 18 Eixo 3, LABMAT)
- Terças-feiras de 16:00 as 18:00 (Sala 18 Eixo 3, LABMAT)
Ementa e programa
Objetivos da disciplina
- Estudar modelos de problemas variados usando as técnicas de programação linear inteira e programação dinâmica
- Promover o uso de pacotes computacionais de resolução de problemas de programação linear Inteira
- Estudar teoria, algoritmos e aplicações de Otimização em Redes
Textos de referência
- Wolsey, L. A. Integer Programming. 2ed, Wiley, 2021
[link] - Goldbarg, M. C.; Luna, H. P. L. Otimização combinatória e programação linear: modelos e algoritmos. Elsevier, 2ed, 2005
[link] - Hillier, F. S.; Lieberman, G. J. Introdução à Pesquisa Operacional. McGraw-Hill, 8ed, 2006
Textos complementares
- Maculan, N.; Fampa, M. H. C. Otimização linear. Editora UnB, 2006
[link versão alternativa] - Luenberguer; Ye. Linear and Nonlinear Programming. Springer, 2008
[link 1] [link 2] - Bazaraa, M. S.; Jarvis, J. J.; Sherali, H. D. Linear Programming and Network Flows. Wiley, 4ed, 2010
[link 1] [link 2 (1ed de 1977)]
Canais de acesso
- E-mail do professor: leonardo.secchin@ufes.br
- Sala do professor: prédio do Departamento de Matemática Aplicada, sala 08
Formas de avaliação
- provas escritas, listas de exercícios, trabalhos computacionais ou apresentações orais.
Avaliações
Critérios para aprovação
- Média parcial >= 7,0 —–> aprovado(a) (desde que não reprovado(a) por falta)
- Média parcial < 7,0 —–> Avaliação final (desde que não reprovado(a) por falta). Neste caso, média final >= 5,0 —–> aprovado(a).
Conteúdo
A linguagem de programação Julia
Julia é uma linguagem de programação de alto nível surgida em 2012, que implementa várias ferramentas para uso geral em matemática aplicada. Em particular, Julia possui várias ferramentas para otimização. É muito parecida com o Matlab, portanto os códigos são fáceis de entender. Os trabalhos computacionais desta disciplina serão feitos em Julia.
Para uma introdução ao Julia e seu uso em otimização, acesse este link.
Softwares / Interfaces para Julia
- CPLEX
O CPLEX é um pacote mantido pela IBM e muito utilizado na academia e indústria. Nele há vários métodos para programação linear inteira mista. É um software proprietário, mas estudantes das universidades podem obter licença de uso mediante preencimento de um cadastro.- Instruções para download (atualizado em agosto de 2026)
GLPK
GLPK é um pacote que implementa vários métodos para programação linear inteira mista. Ao contrário do CPLEX, é software livre, ou seja, você pode instalar e usar sem a necessidade de obter licenças. É uma opção de fácil instalação caso você tenha problemas com o CPLEX.- Uso dos pacotes no Julia
Tanto o CPLEX quando o GLPK podem ser utilizados dentro do Julia. Para tanto, basta instalar os pacotesCPLEX.jleGLPK.jlno seu Julia.- Obs:
CPLEX.jlnão instala o CPLEX automaticamente, você precisa instalá-lo na sua máquina antes; siga as instruções para download. JáGLPK.jlbaixa e instala o GLPK automaticamente. - Teste executando o código exemplo para o problema de localização de facilidades não capacitado.
- Obs:
Introdução à programação linear inteira mista
- O modelo de programação linear inteira mista
- Exemplos de aplicações
Referências:
1) Goldbarg, M. C.; Luna, H. P. L. Otimização combinatória e programação linear: modelos e algoritmos. Elsevier, 2ed, 2005
2) Wolsey, L. A. Integer Programming. 2ed, Wiley, 2021 - Exemplos de problemas e respectivos pacotes/códigos para uso no Julia, veja este link
Métodos em programação linear inteira mista
Relaxação linear e relaxação Lagrangeana
Referência: Wolsey, L. A. Integer Programming. 2ed, Wiley, 2021- Método de enumeração e poda (Branch-and-bound)
- Pré-processamento
Referências:
1) Hillier, F. S.; Lieberman, G. J. Introdução à Pesquisa Operacional. McGraw-Hill, 8ed, 2006
2) Wolsey, L. A. Integer Programming. 2ed, Wiley, 2021- Pré-processamento de PL’s: fixação de variáveis, aperto de limitantes das variáveis e identificação de restrições redundantes
- Identificação de PL’s inviáveis ou ilimitados
- Estratégias adicionais de pré-processamento para problemas com variáveis inteiras e binárias: aperto de restrições
Inserção de restrições no quadro simplex e o método dual simplex (conteúdo de PO I, revisão)
Referência: Bazaraa, M. S.; Jarvis, J. J.; Sherali, H. D. Linear Programming and Network Flows. Wiley, 4ed, 2010Branch-and-bound baseado em relaxação linear
Referências:
1) Wolsey, L. A. Integer Programming. 2ed, Wiley, 2021
2) Goldbarg, M. C.; Luna, H. P. L. Otimização combinatória e programação linear: modelos e algoritmos. Elsevier, 2ed, 2005Branch-and-bound - exemplos com variáveis inteiras e binárias
Referências:
1) Wolsey, L. A. Integer Programming. 2ed, Wiley, 2021
2) Goldbarg, M. C.; Luna, H. P. L. Otimização combinatória e programação linear: modelos e algoritmos. Elsevier, 2ed, 2005- Exemplo de problema inviável em que branch-and-bound fracassa
Referência: Jeroslow. Trivial integer programs unsolvable by branch-and-bound. Mathematical Programming 6, 105-109 (1974)
- Pré-processamento
- Método de planos de corte
Referência: Wolsey, L. A. Integer Programming. 2ed, Wiley, 2021- Desigualdades válidas
- Esquema geral do método
- Método Branch-and-cut
Referência: Wolsey, L. A. Integer Programming. 2ed, Wiley, 2021- Cortes de Chvatal-Gomory
- Cortes fracionários de Gomory via quadro simplex
- Método de geração de colunas
Referências:
1) Wolsey, L. A. Integer Programming. 2ed, Wiley, 2021
2) Maculan, N.; Fampa, M. H. C. Otimização linear. Editora UnB, 2006
3) Tópico 6 deste link- Geração de colunas aplicado ao problema de corte de estoque (cutting stock)
- Decomposição de Dantzig-Wolfe
Comentários sobre os métodos Branch-and-price e Branch-cut-and-price
Referência: Wolsey, L. A. Integer Programming. 2ed, Wiley, 2021- Comentários sobre o uso de heurísticas/metaheurísticas no contexto de métodos enumerativos
Referências:
1) Wolsey, L. A. Integer Programming. 2ed, Wiley, 2021
2) Goldbarg, M. C.; Luna, H. P. L. Otimização combinatória e programação linear: modelos e algoritmos. Elsevier, 2ed, 2005
Otimização em redes
Referência: Bazaraa, M. S.; Jarvis, J. J.; Sherali, H. D. Linear Programming and Network Flows. Wiley, 4ed, 2010
- Conceitos básicos (grafos, árvore etc)
- Exemplos: caminho mínimo, fluxo máximo, fluxo de custo mínimo, problemas do transporte e atribuição
- Problema do transporte: resolução via simplex
- Matriz totalmente unimodular
- Obtendo uma base inicial viável
- Quadro simplex
- Caso particular: problema de atribuição
- Relaxação linear, matriz totalmente unimodular e integralidade das soluções
- Problema de fluxo de custo mínimo
- Método simplex de rede
- Problema do menor caminho
- Algoritmo de Dijkstra para custos não negativos
Programação dinâmica
Referência: Hillier, F. S.; Lieberman, G. J. Introdução à Pesquisa Operacional. McGraw-Hill, 8ed, 2006
- Princípios da programação dinâmica
- Exemplo simples: sequência de Fibonacci
- Problema da mochila 0-1
- Exemplo protótipo, seção 10.1 do livro de Hillier e Lieberman
- Exemplos da seção 10.3 do livro de Hillier e Lieberman
- Outros exemplos
- Subset sum
- O algoritmo de Dijkstra (tópico anterior) usa conceitos de programação dinâmica
