Meu problema é encontrar todas as soluções inteiras para um ILP. Como exemplo, estou usando um ILP com duas variáveis, mas posso ter mais de duas variáveis. Descrevo o método que atualmente uso para resolver esse problema próximo ao fim, mas estou interessado em saber se existe um algoritmo ou método adequado e eficiente para resolver esse tipo de problema.
Não há função objetiva, mas as restrições para este ILP são
Como esse ILP possui duas variáveis, posso inspecionar visualmente a região da solução, fazendo um gráfico das linhas formadas pelas restrições, que são
Por inspeção, existem 6 soluções inteiras para : .
No entanto, meu método atual é usar a programação linear com a não-negatividade relaxada e números inteiros de ramificação e corte. Tentei usar um conjunto de quatro funções objetivas: minimizar , maximizar , minimizar e maximizar . Isso fornece uma área de pesquisa menor, como
Eu itero sobre todas as tuplas inteiras válidas nessa área menor e a filtre por tuplas que satisfazem as restrições originais. As tuplas restantes são todas soluções válidas de número inteiro.
fonte
Land e Doig (1960) propuseram um método para resolver problemas de programação discretos. Você pode modificar seu algoritmo para que, em vez de resolver um problema de otimização, enumere todas as soluções possíveis possíveis de número inteiro.
Referência
AH Land e AG Doig (1960). "Um método automático para resolver problemas de programação discretos". Econometrica. 28 (3) 497-520. doi: 10.2307 / 1910129.
fonte
leia este artigo: Computando cascos convexos e contando pontos inteiros com polymake. Eu acho que o polymake pode fazer isso por você.
fonte