2013 Satisfazibilidade booleana (SAT)

Propaganda
PMR2300 - Computação para Automação
Exercício Programa 1 - 2013
Satisfazibilidade booleana (SAT) - Parte 1: Geração de fórmulas
proposicionais
Prof. Dr. Fabio Gagliardi Cozman
Prof. Dr. Newton Maruyama
1 Introdução
O Problema de Satisfazibilidade Booleana (SAT) é um problema de decisão. Trata-se da verificação da
existência (ou não) de um conjunto de valores booleanos que se atribuídos às proposições que constituem os elementos de uma fórmula proposicional tornam esta fórmula verdadeira. Por exemplo,
seja a seguinte fórmula:
f1 = (x1 ∨ x2 ) ∧ (¬x1 ∨ x3 ).
(1)
Será que existe um conjunto de valores booleanos que se atribuídos à (x1 , x2 , x3 ) fariam com que
a fórmula f1 seja verdadeira ?
Uma das maneiras de resolver este problema seria construindo uma tabela verdade como ilustrado abaixo:
x1
0
0
0
0
1
1
1
1
x2
0
0
1
1
0
0
1
1
x3
0
1
0
1
0
1
0
1
(x1 ∨ x2 )
0
0
1
1
1
1
1
1
(¬x1 ∨ x3 )
1
1
1
1
0
1
0
1
f1
0
0
1
1
0
1
0
1
Tabela 1: Tabela verdade para a fórmula f1 .
Através da construção da tabela verdade sabemos que existem quatro conjuntos de valores
(x1 , x2 , x3 ) que tornam a fórmula f verdadeira.
Fórmulas proposicionais podem não ser verdadeiras para nenhum conjunto de valores ? Sim, por
exemplo:
f2 = (x1 ∧ ¬x1 ).
1
(2)
Pode-se verificar facilmente que a fórmula f2 não possui valores booleanos para x1 que a tornam
verdadeira.
O Problema de Satisfazibilidade Booleana se torna de difícil solução a medida que o número de
variáveis n cresce.
Atualmente, o Problema SAT desperta grande interesse devido a sua aplicação nas áreas de Inteligência Artificial e checagem de modelos de hardware e software.
2 O Problema k-SAT
O Problema k-SAT se refere a fórmulas com cláusulas disjuntivas com k literais1 .
Particulamente, estamos interessados no Problema 3−SAT. Por exemplo, uma fórmula com quatro
variáveis (x1 , x2 , x3 , x4 ) poderia ser a seguinte:
f3 = (x1 ∨ ¬x2 ∨ ¬x3 ) ∧ (x1 ∧ x2 ∧ x4 ).
(3)
A fórmula f3 tem duas cláusulas (Expressão entre parênteses). Cada cláusula possui três literais que
podem ser compostos apenas pelo operador de disjunção ∨. A fórmula completa é constituída por
cláusulas compostas pelo operador de conjunção ∧.
Uma fórmula genérica seria composta por n variáveis, m cláusulas e k literais.
3 Geração aleatória de fórmulas proposicionais
Usualmente, objetiva-se o desenvolvimento de algoritmos de SAT. A eficiência destes algoritmos
é verificada através de testes onde o algoritmo recebe como entrada uma fórmula proposicional
gerada de forma aleátória.
A importância desta área é evidenciada pela existência de uma competição internacional de algoritmos SAT (The International SAT Competition Web Page http://www.satcompetition.org/)
Neste exercício programa o objetivo será implementar um algoritmo aleatório 3-SAT com distribuição uniforme.
Uma fórmula neste caso possui n variáveis com distribuição uniforme, m cláusulas, cada cláusula
contendo três literais.
Para cada variável, por exemplo x1 , os literais associados possuem probabilidade P = 0.5 cada
um, i.e., P (x1 ) = 0.5 e P (¬x1 ) = 0.5.
1
Os literais da variável x1 são representados por x1 e sua negação ¬x1 .
2
4 Representação de Fórmulas proposicionais
Para as competições do The International SAT Competition é utilizado um formato do tipo CNF
(Conjunctive Normal Form) Você deve utilizar este formato para a representação das fórmulas proposcionais.
Detalhes deste formato podem ser encontrados em
http://www.satcompetition.org/2009/format-benchmarks2009.html
5 Para você fazer:
1. Projete um algoritmo para gerar fórmulas 3-SAT aleatórios utilizando a Linguagem JAVA.
2. Uma fórmula neste caso possui n variáveis, m cláusulas, cada cláusula contendo três literais.
3. Cada variável é amostrada aleatoriamente de uma distribuição uniforme. Ou seja P (x1 ) = 1/n,
P (x2 ) = 1/n, etc.
4. Para cada variável, devemos decidir se devemos negá-la ou não. Esta decisão também deve ser
aleatória. Por exemplo, para x1 , os literais associados devem possuir probabilidade P = 0.5
cada um, i.e., P (x1 ) = 0.5 e P (¬x1 ) = 0.5.
5. As fórmulas devem ser armazenadas num arquivo com o formato definido acima.
6. O seu programa deve ser acionado da seguinte forma:
java SAT n m nome-do-arquivo-de-saída
onde n e m são inteiros positivos. O nome do programa deve ser SAT, ou seja, deve ser
declarado no arquivo SAT.java.
Coisas importantes:
• O exercício deve ser feito individualmente;
• Entregue ao monitor da disciplina no dia 11/04/2013
– Documentação impressa descrevendo o seu projeto em uma
página A4,
– Código fonte e código compilado (bytecode). Pode ser entregue em um CD ou pode ser armazenado em um Pen Drive
que o monitor se encarregará de fazer uma cópia dos arquivos no momento da entrega.
3
Download