Programação linear
Modelar otimização com variáveis, restrições e objetivo, resolver no gráfico e perceber o salto para inteiros.
A programação linear trata de otimizar uma função linear sujeita a restrições lineares. A técnica aqui não é um algoritmo que executas à mão em geral, é a modelação: traduzir um problema de palavras para variáveis, restrições e função objetivo. Com duas variáveis ainda resolves no gráfico, e esse caso pequeno ensina a geometria toda: o ótimo está sempre num vértice da região admissível.
Modelar em três passos
Primeiro, escolhe as variáveis de decisão com unidades claras. Depois escreve as restrições como desigualdades lineares, uma por cada limite do problema. Por fim, escreve a função objetivo a minimizar ou maximizar. Se alguma relação for curva ou envolver produtos de variáveis, o problema já não é linear e esta técnica não se aplica diretamente.
Exemplo: dieta com duas variáveis
Queres planear quantidades e de dois alimentos, com custos 2 e 3 por unidade, garantindo pelo menos 5 unidades de nutriente P () e pelo menos 6 de nutriente Q (), com . O modelo é minimizar sujeito a essas restrições.
No gráfico, cada restrição corta um semiplano e a região admissível é o polígono ilimitado acima das duas retas. Os vértices são as interseções: com custo 18, com custo , e com custo 10. O ótimo é o vértice do meio: , , custo 8,2. Repara que a solução usa frações: unidades de um alimento só fazem sentido se ele for divisível.
O salto para inteiros
Exige agora unidades inteiras (pacotes indivisíveis). Arredondar para falha: cumpre P mas viola Q, ou seja, o arredondado nem sequer é admissível. Testando vizinhos inteiros admissíveis: custa 10, custa , e nada admissível custa 8. O ótimo inteiro é com custo 9, pior que os 8,2 fracionários. Esta é a lição da programação linear inteira (ILP): o ótimo inteiro não é o arredondamento do ótimo contínuo, e encontrá-lo é em geral muito mais difícil, o que liga esta página aos problemas exponenciais de complexidade e aproximação.