Pergunta

Estou tentando determinar a forma de um gráfico direcionado resolvendo restrições na presença de nós e arcos, por exemplo, variável binária V1V2 é 1 se houver um arco do nó V1 para V2.Gostaria de expressar a restrição de acessibilidade (ou, alternativamente, encontrar um fechamento transitivo), por exemplo, exigir que o grafo esteja conectado ou que haja um caminho de um determinado nó para outro determinado nó.

Eu vi que o SICStus Prolog tem fd_closure para esse fim, mas não consegui encontrar nada semelhante no SWI Prolog.Devo usar CDH?Estive observando os exemplos de consistência de arco/caminho, mas não tenho certeza se estou olhando na direção certa.

Foi útil?

Solução

SICStus' fd_closure/2 é muito semelhante ao SWI-Prolog term_attvars/2.Ele fornece todas as variáveis ​​que podem ser alcançadas transitivamente por meio de atributos (e o CLP(FD) do SWI usa atributos para armazenar restrições).

Observe que você normalmente faz não precisa desses predicados.Eles são usados, por exemplo, no nível superior para obter metas residuais.

Você pode expressar um gráfico com restrições de domínio finito sem usar nenhum desses predicados.Por exemplo, use uma variável de domínio finita B_i_j que é 1 se há um arco do nó eu para o nó j.

Se você precisar de propriedades mais fortes, provavelmente precisará de propriedades mais fortes restrições.Por exemplo, circuit/1 está disponível em SICStus e SWI e descreve um circuito hamiltoniano.Para outras propriedades, você pode implementar algoritmos de filtragem dedicados.

Outras dicas

Com copy_term/3 e term_variables/2 você deve conseguir (editar:quase) o mesmo efeito que fd_closure/2.

Por favor, note que fd_closure no SICStus funciona apenas para restrições FD.Outras conexões entre variáveis ​​não são levadas em consideração.

Editar:Dessa forma você obterá apenas cópias de variáveis ​​internas - isso deve ser bom o suficiente para determinar a forma.No entanto, você pode querer consultar essas variáveis ​​​​mais tarde, caso em que a solução do @mat é essa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top