Programação linear inteira

Variáveis inteiras e binárias, relaxação, branch and bound e cortes válidos.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Comprar máquinas exige quantidades inteiras. Uma solução LP que propõe 4/34/3 de cada máquina pode servir de limite otimista, mas não de plano de compra executável. A programação linear inteira, ou ILP, acrescenta domínios inteiros a um modelo linear.

A relaxação, a ramificação e os cortes exploram essa diferença. A ideia comum é conservar todos os planos inteiros válidos enquanto se excluem soluções fracionárias ou ramos que não podem melhorar o melhor inteiro conhecido.

Variáveis binárias e modelos

Uma variável xi∈{0,1}x_i\in\{0,1\} representa uma decisão sim/não. A mochila 0-1 fica

max⁡∑ivixi,∑iwixi≤W,xi∈{0,1}.\max\sum_i v_ix_i,\qquad \sum_i w_ix_i\le W,\qquad x_i\in\{0,1\}.

Numa atribuição de tarefas, xij=1x_{ij}=1 significa atribuir a tarefa jj à pessoa ii. Para uma atribuição por tarefa, usa ∑ixij=1\sum_i x_{ij}=1; para no máximo bib_i tarefas por pessoa, ∑jxij≤bi\sum_j x_{ij}\le b_i. Compatibilidades podem excluir variáveis ou impor xij=0x_{ij}=0. Não dupliques a mesma tarefa na contagem por esquecer uma igualdade.

Um custo fixo de abrir uma instalação precisa de uma variável binária yiy_i. Uma restrição ∑jxij≤Miyi\sum_j x_{ij}\le M_i y_i permite atribuições apenas quando está aberta. MiM_i deve ser um limite válido e tão apertado quanto o modelo permita. Um valor demasiado pequeno elimina soluções; um valor desnecessariamente grande enfraquece a relaxação e pode criar problemas numéricos.

Relaxação linear

Retirar a integridade alarga o conjunto de soluções. Para maximização, o ótimo LP é um limite superior do ótimo inteiro; para minimização, é um limite inferior. Se uma solução ótima da relaxação já for inteira em todas as variáveis exigidas, também é ótima no ILP, porque nenhuma solução inteira pode superá-la.

Considera

max⁡x+y,2x+y≤4,x+2y≤4,x,y≥0 inteiros.\max x+y,\qquad 2x+y\le4,\quad x+2y\le4,\quad x,y\ge0\text{ inteiros}.

A relaxação tem ótimo (4/3,4/3)(4/3,4/3) e valor 8/38/3. Os pontos inteiros (2,0)(2,0), (1,1)(1,1) e (0,2)(0,2) têm valor 2; nenhuma solução inteira atinge 3, pois somar as restrições dá 3(x+y)≤83(x+y)\le8. Como x+yx+y é inteiro, fica x+y≤2x+y\le2.

Arredondar não resolve o ILP

Arredondar cada coordenada pode violar uma desigualdade, uma igualdade ou uma exigência mínima. No modelo x+y≥1x+y\ge1, x−y=0x-y=0, x,y≥0x,y\ge0 inteiros, minimizar x+yx+y tem relaxação ótima (1/2,1/2)(1/2,1/2), valor 1. Arredondar ambos para baixo dá (0,0)(0,0), que viola o mínimo; arredondar um para cima e outro para baixo viola a igualdade. A solução inteira ótima é (1,1)(1,1), valor 2.

Mesmo um arredondamento admissível não é automaticamente ótimo, porque o valor LP sozinho não identifica o ponto inteiro que atinge o melhor valor possível.

Branch and bound com relaxações

Assumimos que as variáveis têm limites finitos, para que a árvore seja finita e cada relaxação admissível tenha um ótimo finito. Uma relaxação ilimitada exige análise própria; não é uma solução fracionária em que possamos aplicar diretamente estes passos.

Em cada nó, resolve a relaxação LP com as restrições herdadas. Num problema de maximização:

  1. Se a relaxação é inviável, poda o nó.
  2. Se o seu limite superior não supera o incumbente inteiro, poda o nó quando só precisas de um ótimo.
  3. Se a solução é inteira, atualiza o incumbente e fecha o nó.
  4. Caso contrário, escolhe uma variável inteira xjx_j com valor fracionário aa e cria os ramos xj≤⌊a⌋x_j\le\lfloor a\rfloor e xj≥⌈a⌉x_j\ge\lceil a\rceil.

Todos os valores inteiros de xjx_j pertencem a um desses ramos. Não perdemos uma solução inteira e excluímos o ponto fracionário atual. Repetir a divisão em cada ramo mantém a cobertura do espaço de soluções.

Seguir o exemplo

Na raiz do exemplo, (x,y)=(4/3,4/3)(x,y)=(4/3,4/3) e limite 8/38/3. Ramifica em x≤1x\le1 e x≥2x\ge2.

No ramo x≥2x\ge2, a restrição 2x+y≤42x+y\le4 e y≥0y\ge0 forçam x=2,y=0x=2,y=0. É inteiro, valor 2, e passa a incumbente.

No ramo x≤1x\le1, a relaxação pode chegar a (1,3/2)(1,3/2), valor 5/25/2. Esse limite ainda é maior que 2, portanto não basta para podar. Ramifica em y≤1y\le1 e y≥2y\ge2:

  • Com y≤1y\le1, o ótimo é (1,1)(1,1), valor 2.
  • Com y≥2y\ge2, x+2y≤4x+2y\le4 força (0,2)(0,2), valor 2.

A árvore regista a restrição acrescentada em cada ramo. Seguimos primeiro x≥2x\ge2 para obter um incumbente. Para mostrar os restantes ótimos, conservamos os ramos que empatam com ele.

Os três ramos inteiros atingem valor 2. Para devolver um único ótimo, bastaria fechar os ramos sem possibilidade de melhorar o incumbente; para devolver todos, precisamos de conservar os empates. Isso é necessário, mas não suficiente: uma relaxação que devolve uma solução inteira pode ter outros ótimos no mesmo nó. Fechá-lo ao encontrar a primeira solução serve para obter um ótimo; a enumeração precisa de continuar a procurar outras soluções de igual valor.

Podemos usar também que o objetivo tem valor inteiro: um limite 8/38/3 permite o limite mais apertado ⌊8/3⌋=2\lfloor8/3\rfloor=2. Com um incumbente de 2, a raiz já seria podável. Este arredondamento do limite é válido porque o objetivo assume valores inteiros em todas as soluções inteiras; não é arredondar uma solução fracionária.

A ordem DFS, BFS ou melhor-limite afeta tempo e memória. DFS segue um ramo; BFS processa primeiro os nós menos profundos; melhor-limite escolhe o nó com melhor limite otimista. Encontrar cedo uma boa solução inteira permite descartar outros nós já gerados, usando os seus limites. Não confundas gerar um filho com resolver a sua relaxação: um enunciado ou uma implementação deve dizer quando esse cálculo acontece. O pior caso continua exponencial. Um bom incumbente e limites apertados reduzem a árvore, mas não transformam o problema geral em LP.

Cortes válidos

Um corte acrescenta uma desigualdade satisfeita por todos os pontos inteiros admissíveis e violada pela solução fracionária atual. Reduz a relaxação sem retirar nenhuma solução inteira.

No exemplo, somar as restrições e usar a integridade de x+yx+y dá o corte x+y≤2x+y\le2. O ponto (4/3,4/3)(4/3,4/3) é eliminado; os três ótimos inteiros permanecem. Este corte prova diretamente o valor ótimo quando combinado com uma solução de valor 2.

A zona hachurada pertence à relaxação original, mas fica acima de x+y=2x+y=2. Os pontos preenchidos mostram todos os inteiros admissíveis: nenhum fica nessa zona.

Não basta desenhar uma linha que afaste o ponto atual. É necessário provar que a linha conserva todos os inteiros admissíveis, incluindo os que ainda não vimos.

Corte fracionário de Gomory

Numa formulação puramente inteira com variáveis não negativas, uma linha da base pode escrever-se

xB+∑jajxj=b,x_B+\sum_j a_jx_j=b,

com xBx_B e xjx_j inteiros. Se bb é fracionário, usa a parte fracionária {r}=r−⌊r⌋\{r\}=r-\lfloor r\rfloor e acrescenta

∑j{aj}xj≥{b}.\sum_j\{a_j\}x_j\ge\{b\}.

A justificação vem de xB+∑j⌊aj⌋xjx_B+\sum_j\lfloor a_j\rfloor x_j ser inteiro. Como xj≥0x_j\ge0 e ⌊aj⌋≤aj\lfloor a_j\rfloor\le a_j, esse inteiro é no máximo bb, logo no máximo ⌊b⌋\lfloor b\rfloor. Subtrair da equação dá o corte.

Por exemplo, xB+12x1+13x2=73x_B+\frac12x_1+\frac13x_2=\frac73 dá 12x1+13x2≥13\frac12x_1+\frac13x_2\ge\frac13. Na solução básica fracionária atual, as não básicas x1=x2=0x_1=x_2=0 violam o corte. Qualquer solução inteira da equação respeita-o. A parte fracionária de −1/3-1/3 é 2/32/3, não −1/3-1/3; usa o chão matemático, não truncar para zero.

Esta fórmula não se aplica sem alterações a uma linha com variáveis contínuas. ILP misto exige cortes adequados à mistura de domínios. Métodos modernos combinam ramificação e cortes, mas cada corte continua a precisar da mesma condição de validade.

Integridade e fluxo

Alguns modelos LP têm ótimos inteiros sem precisarem de procurar por ramificação. Em redes de fluxo com capacidades inteiras, os aumentos inteiros preservam integridade e atingem um ótimo inteiro. A estrutura dessas restrições permite métodos especializados polinomiais.

Não generalizes: uma matriz com coeficientes inteiros pode ter ótimo fracionário, como o exemplo 2x+y≤42x+y\le4, x+2y≤4x+2y\le4. Para usar integridade como propriedade do LP, precisamos de um resultado sobre a estrutura do modelo, não apenas sobre o aspeto dos coeficientes.

Relação com NP-completude

Podemos representar uma cláusula ℓ1∨ℓ2∨ℓ3\ell_1\lor\ell_2\lor\ell_3 por L1+L2+L3≥1L_1+L_2+L_3\ge1, usando uma variável binária xx para literal positivo e 1−x1-x para a sua negação. A atribuição satisfaz a fórmula se e só se cumpre todas essas desigualdades.

Por exemplo, (x∨¬y∨z)(x\lor\neg y\lor z) dá x+(1−y)+z≥1x+(1-y)+z\ge1. A transformação usa tamanho polinomial e mostra que viabilidade inteira já pode representar satisfazibilidade. Isto explica a dificuldade geral do ILP, apesar de as restrições serem lineares.

Exercícios

Apertar a relaxação por integridade

x e y são inteiros não negativos e cumprem 3x+2y≤11 e 2x+3y≤11. Deriva um corte para x+y e encontra o máximo inteiro dessa soma.

Pista

Soma as duas restrições e usa que x+y é inteiro.

Solução

O corte é x+y≤4, válido para todos os inteiros admissíveis porque x+y é inteiro e não pode ficar entre 4 e 4,4. O ponto (2,2) cumpre as restrições, pois ambas dão 10≤11, e atinge soma 4. Portanto o ótimo inteiro é 4. A relaxação pode ter (2,2;2,2), soma 4,4, que viola o corte e é eliminada.

Erros frequentes

Arredondar os coeficientes de uma restrição sem uma prova pode retirar pontos válidos. Aqui arredondámos o limite de uma quantidade que sabemos inteira.

Voltar à explicação
Dividir sem perder inteiros

Num nó de maximização, a relaxação dá x=2,7 e objetivo 18,6. x tem de ser inteiro e o objetivo também tem de ser inteiro. O incumbente é 18. Que ramos corresponderiam a x e é necessário explorá-los para obter um ótimo?

Pista

Os inteiros não pertencem ao intervalo aberto entre 2 e 3.

Mais uma pista

Os ramos são x≤2 e x≥3. O objetivo de qualquer continuação inteira é no máximo floor(18,6).

Solução

A ramificação válida seria x≤2 ou x≥3, conservando todos os valores inteiros. Porém o limite superior inteiro do objetivo é 18. Como já existe uma solução inteira de valor 18, o nó pode ser podado sem explorar esses ramos para devolver um ótimo. Para enumerar todos os ótimos, o empate não permite podar. Se o objetivo não tivesse valores inteiros, não poderíamos apertar 18,6 para 18.

Confere a tua resposta:

  • Dei os ramos x≤2 e x≥3.
  • Usei a integridade do objetivo para limite 18.
  • Expliquei a poda com incumbente 18 e o caso de todos os ótimos.

Erros frequentes

Criar x≤2,7 e x≥2,7 não exclui a solução fracionária na relaxação dos filhos. Arredondar a solução x não substitui a ramificação nem prova viabilidade.

Voltar à explicação
Encontrar o incumbente antes de expandir

Numa maximização inteira, o objetivo assume valores inteiros e basta devolver um ótimo. A relaxação da raiz é fracionária, com limite 12, e gera A e B, por esta ordem. A é fracionário com limite 10,5 e gera A1 e A2, ambos inteiros, de valores 8 e 10. B já é inteiro e vale 11. Não há incumbente inicial. Compara DFS, começando por A, com BFS. Um nó só é resolvido quando sai da pilha ou fila; se o seu limite já é conhecido, pode ser descartado sem resolver de novo. Indica a ordem dos nós processados e os que deixam de precisar de exploração.

Solução

DFS processa raiz,A,A1,A2,B. A1 fornece incumbente 8; A2 melhora-o para 10. Depois B melhora-o para 11. As folhas inteiras não geram filhos. O valor final é 11.

BFS processa raiz,A,B. Depois de A, a fila contém B,A1,A2. B fornece incumbente 11 antes de chegar aos filhos de A. Os limites conhecidos de A1 e A2, respetivamente 8 e 10, já não o superam, pelo que ambos são descartados. São nós gerados, mas não precisam de voltar a ser processados. Também o limite 10,5 de A, apertado para 10 pelo objetivo inteiro, certifica que toda a sua subárvore não pode melhorar 11.

A ordem pode alterar o trabalho porque altera quando surge uma boa solução completa. Não altera a validade de um limite nem o ótimo. Em ambos os percursos, a solução B atinge 11 e os restantes ramos não o excedem.

Confere a tua resposta:

  • Rastreei DFS: raiz,A,A1,A2,B.
  • Rastreei BFS: raiz,A,B.
  • Podei A1 e A2 em BFS pelo incumbente 11 e distingui gerar de processar.
Voltar à explicação

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.