O problema vem diretamente da matemática computacional e pode ser indicado da seguinte forma:
Dada uma matriz regular , encontre efetivamente todos os vetores modo que \ n {Mv} \ leq1 , em que \ n {Mv} seja o componente máximo do vetor em módulo.
Dou um algoritmo abaixo, mas é muito ineficiente, pois possui muito mais etapas do que o número de pontos da grade. Ainda é suportável para no meu caso, mas falha completamente para , não tenho muito tempo; além disso, eu gostaria de fazer algum trabalho em dimensões mais altas também.
Meu algoritmo atual é baseado no seguinte (aviso: contém mais contas matemáticas): Primeiro, calcule . Então, observamos que . Isso significa que podemos calcular e tentar todos os vetores ; há exatamente deles. (E aqui está o problema: se e , eu recebo iterações, que são ordens de magnitude maiores que o número de pontos que acho que existem.)
Respostas:
Aqui está uma outra maneira de olhar para o problema: Você tem uma rede gerado pelas colunas de . Use o algoritmo Lenstra-Lenstra-Lovász (LLL) para obter uma base reduzida dessa estrutura. Se você substituir por uma nova matriz formada pela saída de LLL, as colunas de ainda gerarão a mesma rede, mas os vetores de base estarão mais próximos de serem ortogonais entre si e as entradas de deve ter magnitude menor.M M M M- 1
De lá, também ajudaria a obrigados cada componente do separadamente: ou seja, você pode obrigado a th componentepor. (A propósito, o limite não está correto; precisamos usar a soma dos elementos em cada linha, não o máximo.)v Eu |vEu| ∑dj = 1| (M- 1)eu j| ∥ v∥∞≤ ∥M- 1∥
Para valores de até cerca de 30, o algoritmo LLL terminará praticamente instantaneamente. Assintoticamente, é preciso , então ele diminui a velocidade para muito grande , mas, ao mesmo tempo, o número de pontos que precisamos verificar cresce exponencialmente em , portanto o tempo de execução da LLL não é realmente o gargalo. Por outro lado, a economia no número de pontos que precisam ser verificados pode ser enorme. Escrevi um código GAP para gerar uma matriz regular aleatória (estocástica) e comparar os limites nos componentes ded O (d6) d d M v que obtemos usando a base original, em comparação com a base reduzida de LLL (a propósito, não precisamos assumir que a matriz é regular; eu fiz essa restrição apenas porque esse era o caso em sua aplicação):
A saída a seguir (com base na semente aleatória padrão, com ) não é atípica:d= 8
Edit : Este problema é um caso especial do problema geral de enumerar pontos de treliça em politopos convexos, o que resulta ser um problema bem estudado, e existem algoritmos mais eficientes do que o descrito acima. Veja este artigo para uma pesquisa.
fonte