MAC0325 (2021)
Otimização Combinatória


MAC0325 é disciplina obrigatória nos módulos Algoritmos e Otimização da trilha de Teoria da Computação do BCC (Bacharelado em Ciência da Computação).

A Otimização Combinatória (também conhecida como Otimização Discreta) procura as melhores combinações em um conjuntos finito de objetos.  Em geral, isso implica em procurar a melhor combinação dos valores inteiros de certas variáveis.

Ementa oficial

Ementa oficial (conforme catálogo de graduação do IME e catálogo de graduação da USP):

OBJETIVOS: Ensinar técnicas para o tratamento de problemas de otimização combinatória, em especial aqueles que podem ser formulados como problemas em grafos.

PROGRAMA: O escopo da otimização combinatória e programação inteira. Modelagem de vários problemas usando variáveis 0/1. O problema do transporte. Especialização do método simplex para redes. Aplicações: teorema de Hall, teorema de König, teorema de Dilworth. O problema do transporte capacitado: o método primal-dual. Algoritmos para fluxos máximos em redes. Fluxos de custo mínimo e circulações viáveis: o método out-of-kilter. Estudo aprofundado de poliedros de alguns problemas não-unimodulares bem resolvidos (emparelhamentos, branchings, etc.).

Não vamos seguir essa ementa à risca pois ela está um pouco desatualizada.

Requisitos

Os alunos de MAC0325 devem ter conhecimentos prévios de Programação Linear, Grafos e Análise de Algoritmos.

Os requisitos oficiais são MAC0121 (Algoritmos e Estruturas de Dados I) ou MAC0315 (Otimização Linear). (A rigor, deveria ser MAC0121 e MAC0315.)  Há dois pré-requisitos extra-oficiais: MAC0328 (Algoritmos em Grafos) e MAC0338 (Análise de Algoritmos).

Horário, sala, professor

As aulas serão dadas à distância, online, numa sala do Zoom. Para discussões, perguntas, avisos, mensagens, e entrega de exercícios, usaremos o site e-Disciplinas da USP (um derivado do Moodle).

Horário das aulas: terças-feiras às 8:00 e quintas-feiras às 10:00.  A primeira aula acontecerá na terça-feira, 17/8/2021.  (Veja o calendário escolar USP para 2021.)  As aulas serão dadas por Paulo Feofiloff. Não temos monitor.

Livros e material didático

Principais referências:

Referências adicionais:

Critério de avaliação

Teremos uma prova e várias tarefas ao longo do semestre. A nota final será composta por 40% da nota da prova e 60% da média das tarefas. Entretanto, se a nota da prova ficar abaixo de 5 ou a média das tarefas ficar abaixo de 5, a nota final será a menor das duas.


Calendário de aulas e provas

Aula 1: 2021-08-17 (terça 8:00)
Apresentação. Regras do jogo. Esclarecimento de dúvidas.
Enquete e questionário preliminares.
Minhas notas de aula.
Tarefa A, para 19/8, quinta, até as 8:00.
Aula 2: 2021-08-19 (quinta 10:00)
Problema do caminho mínimo com custos arbitrários.
Potencial viável.
Algoritmo de Ford.
Algoritmo de Ford–Bellman
Tarefa B, para 26/8, quinta, até as 8:00.
Aula 3: 2021-08-24 (terça 8:00)
Algoritmo de Ford-Bellman para caminhos mínimos sob custos arbitrários.
Algoritmo para DAGs, algoritmo de Dijkstra, e de busca em largura.
Programa linear para potencial viável máximo.
Aula 4: 2021-08-26 (quinta 10:00)
O poliedro dos potenciais viáveis. Vetores extremos.
Dualidade em programação linear.
Programa linear para caminhos mínimos.
O poliedro dos caminhos mínimos. Vetores extremos.
Tarefa C, para 31/8, terça, até as 8:00.
Tarefa D, para 2/9, quinta, até as 8:00.
Aula 5: 2021-08-31 (terça 8:00)
O problema do fluxo máximo.
Aula 6: 2021-09-02 (quinta 10:00)
Discussão da Tarefa D.
Tarefa E, para 9/9, quinta, até 8:00.
Feriado (Independência): 2021-09-07 (terça)
Aula 7: 2021-09-09 (quinta 10:00)
Teorema do fluxo máximo e corte mínimo.
Algoritmo de Ford-Fulkerson.
Aperfeiçoamento de Edmonds-Karp.
Programa linear para fluxo máximo e corte mínimo.
Tarefa F, para 14/9, terça, até 8:00.
Aula 8: 2021-09-14 (terça 8:00)
Programa linear para fluxo máximo e corte mínimo.
Aplicação de fluxo máximo: emparelhamento bipartido máximo.
Tarefa G, para 16/9, quinta, até 8:00.
Aula 9: 2021-09-16 (quinta 10:00)
Aplicação de fluxo máximo: o problema do transporte.
Aplicação de fluxo máximo: teorema de Gale.
Tarefa H, para 21/9, terça, até 8:00.
Aula 10: 2021-09-21 (terça 8:00)
Aplicação de fluxo máximo: teorema de Gale.
Tarefa I, para 23/9, terça, até 8:00.
Aula 11: 2021-09-23 (quinta 10:00)
Aplicação de fluxo máximo: teorema de Gale.
Laboratório de exercícios.
Tarefa J, para 28/9, terça, até 8:00.
Aula 12: 2021-09-28 (terça 8:00)
Fluxo viável de custo mínimo.
Tarefa K, para 1/10, sexta, até 20:00.
Aula 13: 2021-09-30 (quinta 10:00)
Fluxo viável de custo mínimo.
Algoritmo dos ciclos de aumento.
Tarefa L, para 5/10, terça, até 8:00.
Aula 14: 2021-10-05 (terça 8:00)
Exercícios sobre fluxo viável de custo mínimo.
Tarefa M, para 7/10, quinta, até 8:00.
Aula 15: 2021-10-07 (quinta 10:00)
Corte global mínimo em grafo não-dirigido.
Tarefa N, para 13/10, quarta, até 8:00.
Feriado (Padroeira do Brasil): 2021-10-12 (terça)
Aula 16: 2021-10-14 (quinta 10:00)
Corte global mínimo em grafo não-dirigido.
Tarefa O, para 19/10, terça, até 8:00.
Aula 17: 2021-10-19 (terça 8:00)
Algoritmo de Gomory--Hu.
Tarefa P, para 21/10, quinta, até 8:00.
Aula 18: 2021-10-21 (quinta 10:00)
Emparelhamentos máximos.
Teorema de Tutte-Berge.
Tarefa Q, para 26/10, terça, até 8:00.
Aula 19: 2021-10-26 (terça 8:00)
Emparelhamentos máximos.
Emparelhamentos perfeitos.
Teorema de Tutte.
Tarefa R, para 28/10, quinta, até 8:00.
Aula 20: 2021-10-28 (quinta 10:00)
Algoritmo para emparelhamento perfeito em grafo bipartido.
Tarefa S, para 4/11, quinta, até 8:00.
Feriado (Finados): 2021-11-02 (terça 8:00)
Aula 21: 2021-11-04 (quinta 10:00)
Algoritmo para emparelhamento perfeito em grafo arbitrário.
Tarefa T, para 9/11, terça, até 8:00.
Aula 22: 2021-11-09 (terça 8:00)
Algoritmo para emparelhamento máximo.
Tarefa U, para 11/11, quinta, até 8:00.
Aula 23: 2021-11-11 (quinta 10:00)
Emparelhamento perfeito de custo mínimo em grafos bipartidos.
Tarefa V, para 23/11, terça, até 7:00.
Break (Proclamação da República): 16/11 (terça)
Break (Proclamação da República): 18/11 (quinta)
Aula 24: 2021-11-23 (terça 8:00)
Emparelhamento perfeito de custo mínimo.
Algoritmo Húngaro para emparelhamento perfeito de custo mínimo em grafos bipartidos.
Tarefa W, para 25/11, quinta, até 7:00.
Aula 25: 2021-11-25 (quinta 10:00)
Algoritmo do emparelhamento perfeito de custo mínimo.
Tarefa Z, para 30/11, terça, até 7:00.
Aula 26: 2021-11-30 (terça 8:00)
Algoritmo do emparelhamento perfeito de custo mínimo em grafos arbitrários.
Tarefa ZA, para 2/12, quinta, até 7:00.
Aula 27: 2021-12-02 (quinta 10:00)
Poliedro dos emparelhamentos perfeitos.
Tarefa ZB, para 7/12, terça, até 7:00.
Aula 28: 2021-12-07 (terça 8:00)
Poliedros, politopos, e vértices.
Poliedro dos emparelhamentos perfeitos.
Tarefa ZC, para 10/12, sexta, até 7:00.
Aula 29: 2021-12-09 (quinta 10:00)
Laboratório de exercícios.
Prova: 14/12 (terça 8:00)
A prova será realizada online, via e-disciplinas.
Começo da prova: 8h de 14/12.
Duração máxima da prova: 8 horas.
Fim da prova: 7h de 17/12, sexta-feira.
2021-12-16 (quinta 10:00)
Não haverá aula mas o professor poderá ser consultado pelo Zoom:

Outros assuntos:   Projeto de Algoritmos em C  |  Algorithms Design in C  |  Estruturas de Dados  |  Literate Programming & CWEB  |  Exercícios de Teoria dos Grafos  |  Graph Theory Exercises  |  Uma Introdução Sucinta à Teoria dos Grafos  |  Otimização Combinatória  |  Algoritmos em Grafos  |  Digrafos  |  Minicurso de Análise de Algoritmos  |  Análise de Algoritmos  |  O que é uma prova?  |  Algoritmos para Grafos via Sedgewick  |  Algoritmos de Programação Linear  |  Uma Introdução Sucinta a Algoritmos de Aproximação