Quais programas lineares inteiros são fáceis?

13

Ao tentar resolver um problema, acabei expressando parte dele como o seguinte programa linear inteiro. Aqui são números inteiros positivos dados como parte da entrada. Um subconjunto especificado das variáveis x i j é definido como zero e o restante pode assumir valores integrais positivos:,m,n1,n2,...,n,c1,c2,...,cm,WxEuj

Minimizar

j=1mcjEu=1xEuj

Sujeito a:

j=1mxEuj=nEuEu

Eu=1xEujWj

Gostaria de saber se este programa inteiro é solucionável em tempo polinomial; meu problema original é resolvido, se for, e eu tenho que tentar outra maneira, se não for. Então, minha pergunta é:

Como faço para descobrir se um determinado programa linear inteiro pode ser resolvido em tempo polinomial? Quais programas lineares inteiros são conhecidos por serem fáceis? Em particular, o programa acima pode ser resolvido em tempo polinomial? Você poderia me indicar algumas referências sobre isso?

gphilip
fonte

Respostas:

16

É um caso especial do problema de transporte (ou problema de fluxo de custo mínimo) e, portanto, pode ser resolvido em tempo polinomial. A matriz do coeficiente é totalmente unimodular, pois é a matriz de incidência de um gráfico bipartido.

Os seguintes artigos da Wikipedia podem ser úteis.

Yoshio Okamoto
fonte
1
@ Yoshio: Obrigado, isso responde à minha instância de problema em particular (depois de ter verificado por mim mesmo). Você conhece outras condições além da unimodularidade total que garantem uma solução em tempo polinomial?
Gphilip
2
@ gphilip: Eu resumiria essas questões com o termo "integralidade do poliedro" e a literatura sobre esse assunto é enorme. O livro "Otimização combinatória: embalagem e cobertura", de Gerard Cornuejols (publicado em 2001), descreve vários resultados ao longo desta linha.
Yoshio Okamoto
UMAxb
1
UMA-UMAUMA[UMA-UMA]
1
Deixe-me alterar minhas regras de atalho da seguinte maneira. (1) A duplicação de uma linha mantém a unimodularidade total. (2) A reversão do sinal de uma linha mantém a unimodularidade total. Eles deveriam fazer o trabalho.
Yoshio Okamoto
8

Em geral, é difícil dizer. Mas uma condição suficiente é que sua matriz de restrição é totalmente unimodular e o lado direito é sempre inteiro (nesse caso, o lado direito é inteiro, mas você ainda precisa verificar a unimodularidade)

Você deve dar uma olhada no seguinte: http://en.wikipedia.org/wiki/Linear_program#Integer_unknowns

Vinicius dos Santos
fonte
Eu estava pensando na sua matriz e ela parece totalmente desimodular.
Vinicius dos Santos
@ Vinicius: Você poderia me dizer por que a matriz parece totalmente desimodular para você? Não consegui descobrir isso, apesar do comentário de Yoshio (por favor, veja minha resposta lá).
Gphilip
@ gphilip: em en.wikipedia.org/wiki/Unimodular_matrix na seção "Matrizes totalmente unimodulares comuns", o primeiro item lista 4 condições suficientes para que uma matriz seja unimodular. Penso que estas condições, juntamente com os atalhos comentados por Yoshio, são suficientes para mostrar que o problema pode ser resolvido em tempo polinomial.
Vinicius dos Santos
@ gphilip: Qual é a motivação para este programa linear?
Vinicius dos Santos
@ Vinicius: Estamos tentando resolver um problema formulado em termos de modificação de uma matriz de entrada de uma certa maneira para obter outra matriz com algumas boas propriedades. Este LP saiu de um subproblema durante o processo.
Gphilip
2

Um programa inteiro com apenas igualdades pode ser resolvido por programa linear.

T ....
fonte
isso parecia importante por si só.
T ....
2
Eu não chamaria isso de programa inteiro. É um sistema de equações lineares sobre os números inteiros, solucionável com eficiência computando a forma normal Hermite.
Sasho Nikolov
2
@SashoNikolov um caso degenerado, mas definitivamente um caso válido.
T ....
por que voto negativo?
T ....