Como entrada, tenho dois conjuntos de pontos em R N , normalmente para N grande, por exemplo N = 40. Suponha que ambos os conjuntos tenham m elementos:
S = s 1 ... s m
T = t 1 ... t m
Semanticamente, os dois conjuntos são iguais, mas, devido ao ruído (de qualquer tipo) nos pontos R ^ N, elementos que devem ser semanticamente iguais ainda têm uma distância maior que 0.
O que eu quero encontrar é m tuplas (s i , t j ), de modo que a soma da distância (s i , t j ) seja minimizada e tal que s k e t k ocorram exatamente uma vez no conjunto de tuplas para k = 1 ... m. Basicamente (i, j) devem ser escolhidas como torres em um tabuleiro de xadrez que não podem se atingir, minimizando as distâncias somadas.
Em outras palavras, eu quero encontrar um mapa um para um entre S e T que 'seja uma espécie de mapa de identidade, mas robusto ao ruído'. Assumimos que a medida da distância é uma boa indicação de como os elementos são semelhantes.
Basicamente, preciso encontrar uma permutação de 1 ... N, e, portanto, acho que esse problema é NP-hard ou NP-complete, uma vez que "parece" bastante semelhante ao TSP; no entanto, não pude reescrever o problema do TSP em um subconjunto do meu problema aqui.
Esse problema é realisticamente solucionável para N grande? Existe um nome para este problema? O que seria uma solução viável? Existe outro critério que possa ser melhor do que as distâncias somadas?
Pensei em uma abordagem gananciosa, seja D uma matriz das distâncias, dj = distância (s i , t j ).
T = {}
while D is not empty:
(i,j) = argmin-(i,j) dij
append (i,j) to T
set row i and column j to infinity.
Isso não resulta na solução ideal, mas encontra uma solução. Essa seria minha melhor aposta? Devo usar recozimento simulado ou é um exagero?
PS: do meu ponto de vista, este é apenas um problema menor em um problema de ML maior, no entanto, estou muito interessado no histórico do CS.
fonte
Respostas:
Esse é o problema de encontrar a correspondência máxima em um gráfico bipartido ponderado. Existem algoritmos eficientes que resolvem esse problema em tempo polinomial.
Basicamente, você tem um gráfico bipartido completo com vértices de . forma um conjunto de vértices; forma o outro conjunto de vértices. Para cada , crie uma aresta de a cujo peso seja igual a , a negação da distância entre e .2m S T i,j si tj −d(si,tj) si tj
Agora, você deseja encontrar uma correspondência cujo peso seja o maior possível. Isso corresponde a um conjunto de pares cuja distância total é a menor possível. A partir daí, você pode usar algoritmos existentes neste gráfico para encontrar a correspondência de peso máximo.(si,tj)
fonte
Aqui está um método probabilístico rápido que pode funcionar para você.
Projete seus pontos em uma linha aleatória e resolva o problema de correspondência 1D nesta linha.
Repita o processo para várias linhas aleatórias diferentes para obter uma coleção de correspondências de candidatos.
Faça com que as correspondências de seus candidatos "votem" ponto por ponto para encontrar a "melhor" correspondência.
fonte