Graduação → Programação Linear e Otimização ↓
Programação inteira
A programação inteira é um ramo da otimização ou programação matemática. Significa encontrar a melhor solução a partir de um conjunto de soluções possíveis. Enquanto a programação linear lida com equações lineares e algumas restrições, a programação inteira é um tipo especial onde as variáveis de solução devem ser inteiros. Essa restrição torna a programação inteira mais complexa e desafiadora, mas também mais aplicável em cenários reais onde alguns recursos podem ser apenas unidades inteiras.
O que é programação inteira?
A programação inteira envolve problemas matemáticos que visam otimizar uma função objetivo dada. À primeira vista, pode parecer programação linear, mas há uma diferença importante: na programação inteira, a probabilidade de uma função ser otimizada é constante, a menos que algumas ou todas as variáveis sejam inteiros. são limitados apenas.
A programação inteira pode ser usada para resolver uma variedade de problemas de otimização. Alguns exemplos incluem planejamento e programação, alocação de recursos e tomada de decisões em indústrias como logística, manufatura, telecomunicações e finanças.
Formulação matemática
A forma geral de um problema de programação linear pode ser expressa da seguinte forma:
Max ou Min: c1*x1 + c2*x2 + ... + cn*xn sujeito a: a11*x1 + a12*x2 + ... + a1n*xn (<=, = ou >=) b1 a21*x1 + a22*x2 + ... + a2n*xn (<=, = ou >=) b2 , am1*x1 + am2*x2 + ... + amn*xn (<=, = ou >=) bm x1, x2, ..., xn >= 0
Aqui, c
denota os coeficientes da função objetivo, a
denota os coeficientes das restrições e b
denota as constantes do lado direito. O objetivo é encontrar os valores de x1, x2, ..., xn
que maximizem ou minimizem a função objetivo. Faça o mínimo.
Na programação inteira, uma ou mais das variáveis x1, x2, ..., xn
são restringidas a assumir apenas valores inteiros. Quando todas as variáveis são restringidas a serem inteiros, o problema é denominado problema de programação inteira pura. Quando apenas algumas das variáveis são inteiros, trata-se de um problema de programação inteira mista.
Exemplo
Problema simples de programação inteira
Vamos analisar um exemplo simples de programação inteira para entender esses conceitos. Suponha que uma empresa queira decidir qual é o número ideal de produtos A e B a serem produzidos. O lucro de uma unidade do produto A é de $3 e de $5 do produto B. A empresa não pode produzir mais de 7 unidades de A e 4 unidades do produto B em conjunto.
O modelo de programação inteira pode ser configurado da seguinte forma:
Max: 3A+5B sujeito a: a + b <= 7 b <= 4 A, B >= 0 e inteiro
Aqui, tanto A quanto B devem ser inteiros porque a empresa não pode fabricar uma fração de um produto. Este requisito é onde a programação inteira se torna mais complexa do que a simples programação linear.
Visualização das soluções inteiras
Para nosso exemplo, vamos visualizar a região viável e a solução. Considere as restrições plotadas no gráfico marcando especialmente os inteiros:
No exemplo de SVG, a linha A + B = 7
e a linha B = 4
são esboçadas com pontos inteiros. Estes pontos têm (2,4), (3,4) e (4,3) estão incluídos.
Como nosso objetivo é maximizar nossa função objetivo 3A + 5B
para os pontos de solução (3,4) e (4,3), os valores objetivos são:
- Para o ponto (3,4):
3 * 3 + 5 * 4 = 9 + 20 = 29
- Para o ponto (4,3):
3 * 4 + 5 * 3 = 12 + 15 = 27
Assim, o lucro máximo é obtido em (3,4), produzindo 3 unidades de A e 4 unidades de B.
Desafios na programação inteira
A programação inteira possui dificuldades inerentes que a programação linear geral não possui. Os problemas de programação linear podem ser resolvidos usando métodos como o algoritmo simplex, que navega eficientemente em regiões viáveis.
No entanto, adicionar restrições inteiras complica a busca por uma solução. Como os espaços matemáticos envolvidos na programação inteira não são formas convexas agradáveis, algoritmos especiais são necessários para visualização e cálculo, como:
- Branch-and-bound: divide repetidamente o problema em subproblemas ("ramos"), encontra regiões viáveis e resolve programas lineares mais fáceis.
- Figura de corte: Esta é uma adição ao relaxamento padrão da programação linear. Adiciona restrições para criar uma região viável mostrando apenas soluções inteiras.
- Branch-and-Cut: Combina os métodos acima, proporcionando eficiência e maior praticidade na resolução de programas inteiros e inteiros mistos.
Aplicações de programação inteira
Devido à sua natureza, a programação inteira encontra amplas aplicações em várias áreas. Essas funções resolvem problemas em vez de explorar partes teóricas.
A seguir estão algumas das principais áreas de aplicação:
- Fabricação: contratação, utilização de máquinas, mistura e distribuição.
- Telecomunicações: Alocação de largura de banda, design de rede e roteamento.
- Logística: gestão de inventário, roteirização de veículos e programação de pessoal.
- Finanças: Seleção de portfólio e orçamento de capital.
Cada área faz uso de fatores que favorecem a programação inteira, como a natureza discreta e a otimização de escolhas explícitas entre possibilidades finitas.
Conclusão
A programação inteira serve como um recurso chave no campo da otimização. Sua funcionalidade acrescenta à praticidade, pois as restrições frequentemente vistas na realidade são naturalmente tratadas por suas soluções discretas. Sendo complexa na natureza e no cálculo, a programação inteira é um processo muito simples e caro. Independentemente disso, os métodos existentes tornam-no viável e amplamente aplicável. O potencial de otimização continua a crescer em adoção à medida que as indústrias avançam, impulsionadas em parte pelos avanços e pelo entendimento da programação inteira.