Classificando como um programa linear

24

Um número surpreendente de problemas tem reduções bastante naturais na programação linear (LP). Veja o Capítulo 7 de [1] para exemplos como fluxos de rede, correspondência bipartida, jogos de soma zero, caminhos mais curtos, uma forma de regressão linear e até avaliação de circuitos!

Como a avaliação do circuito se reduz à programação linear, qualquer problema em deve ter uma formulação de programação linear. Portanto, temos um "novo" algoritmo de classificação, via redução para um programa linear. Então, minhas perguntas sãoP

  1. Qual é o programa linear que classificará uma matriz de números reais?n
  2. Qual é o tempo de execução do algoritmo de classificação reduzir para LP e resolver?

  1. Algoritmos de S. Dasgupta, C. Papadimitriou e U. Vazirani (2006)
Joe
fonte
3
Se você já sabe a resposta, por que está fazendo a pergunta?
Yuval Filmus
2
@ Joe É bom postar material interessante, mesmo se você souber a resposta. A maneira convencional de fazer isso é responder sua própria pergunta com uma tomada (elaborada) (em vez de postar um link em algum documento, que pode quebrar).
Raphael
@ Rafael Se mais ninguém escrever uma resposta, eu o farei quando tiver tempo.
Joe
A @YuvalFilmus fazendo uma pergunta para a qual você sabe a resposta é explicitamente incentivada na troca de pilhas .
Joe

Respostas:

23

A resposta a seguir é basicamente equivalente à que você já conhece, mas pode parecer um pouco menos "mágica". Por outro lado, é mais técnico, mas acredito que a técnica geral "escreva seu problema como uma otimização em matrizes de permutação e invoque Birkhoff-von Neumann" é excelente.

Para uma permutação de { 1 , , n } defina a matriz de permutação P σ como a matriz 0-1, de modo que P i j = 1 se j = σ ( i ) e P i j = 0 caso contrário. Esta é simplesmente a matriz que permite as coordenadas de um vetor x de acordo com σ : se y = P σ x então y i = x σσ{1,,n}PσPij=1j=σ(i)Pij=0xσy=Pσx . Denotareiy= P σ xcomoσ(x) apartir de agora.yi=xσ(i)y=Pσxσ(x)

Mais uma definição: um não negativo matriz H é duplamente estocástica se cada uma das suas linhas e cada uma das suas colunas montantes para um.n×nM

E um fato que é muito importante na otimização combinatória - o teorema de Birkhoff-von Neumann:

Uma matriz é duplamente estocástica se, e somente se, for uma combinação convexa de matrizes de permutação, isto é, se e somente se existirem permutações σ 1 , , σ k e reais positivos α 1 , , α k tais que M = k i = 1 α i P σ i e ΣMσ1,,σkα1,,αkM=i=1kαiPσi.αi=1

Observe que uma matriz duplamente estocástica é definida pelas desigualdades

j : n i = 1 M i j = 1 i , j : M i j0

i:j=1nMij=1
j:i=1nMij=1
i,j:Mij0

P

Portanto, dada uma entrada a ser classificada, precisamos apenas apresentar um objetivo linear f a ( Ma=(a1,,an)fa(M)

  • fa(Pτ)<fa(Pσ)σ(a)τ(a)

fa(M)Pσσσ(a)σPσ

fa(M)vTMav=(1,,n)

  • M
  • Pσfa(Pσ)=i=1niaσ(i)
  • σσ(a)σ(a)

E pronto, você tem um programa linear para classificação. Parece bobagem para classificação, mas esse é, de fato, um método poderoso de otimização.

Sasho Nikolov
fonte
1
a
1
Quando existem várias soluções ótimas, algumas podem não ser matrizes de permutação (mas sempre alguma solução ótima será uma matriz de permutação). Se a função objetivo for constante, todas as soluções possíveis serão ótimas.
Sasho Nikolov
1
@ Turbo, o programa linear está completamente escrito nesta resposta. Obviamente, não há restrições de integralidade. Não vou tentar responder à sua segunda pergunta. Sente-se e tente escrever GI como otimizando uma função linear sobre matrizes duplamente estocásticas, da maneira que fiz aqui para classificar. Veja você mesmo onde falha.
Sasho Nikolov
1
a
1
a