CSP (Constraint Satisfaction Problem): Problema onde se busca uma atribuição de valores a variáveis que satisfaça todas as restrições.
Componentes principais:
Estado : conjunto de variáveis
Domínio : domínio discreto da variável
Restrições : conjunto de restrições
Unárias: sobre uma única variável
Binárias: sobre duas variáveis
N-árias: sobre várias variáveis
Solução: atribuição tal que todas as são satisfeitas.
N-Queens: Exemplo clássico de CSP
Objetivo: Queremos colocar exatamente uma rainha em cada linha do tabuleiro, sem que nenhuma delas ataque outra.
Coluna: duas rainhas não podem ficar na mesma coluna.
Diagonal: duas rainhas não podem estar na mesma diagonal (tanto a diagonal que vai de canto superior esquerdo a inferior direito quanto a que vai de canto superior direito a inferior esquerdo).
Complexidade: O número de soluções cresce super‑exponencialmente (para há 92 soluções em 4.426.165.368 possibilidades).
Coloque cada rainha, uma por uma, em linhas diferentes.
Ao colocar uma rainha em uma linha, verifique se há conflitos com as rainhas já colocadas.
Para qualquer coluna, se não houver conflito, marque essa linha e coluna como parte da solução, colocando a rainha.
Caso não seja encontrada nenhuma célula segura devido a conflitos, volte atrás (ou seja, desfaça a colocação da rainha mais recente).
Backtracking: Sudoku
Procedimento recursivo: escolhe uma variável, tenta um valor do domínio e verifica restrições locais.
Se falhar, volta ("backtrack") ao passo anterior.
function BACKTRACK_SUDOKU(board):
if board is complete: return board
(r,c) = select_unassigned_cell(board) // MRV + LCV
for val in order_domain_values(r,c,board): // LCV
if consistent(r,c,val,board):
board[r][c] = val
result = BACKTRACK_SUDOKU(board)
if result != failure: return result
board[r][c] = 0 // undo
return failure
Após atribuir , elimina de cada vizinho valores incompatíveis com .
Se algum domínio ficar vazio → falha imediata.
Complexidade amortizada: (onde ).
Heurísticas de Seleção
Estratégia
Descrição
MRV (Minimum Remaining Values)
Escolhe variável com menor domínio restante.
Degree
Entre MRV‑iguais, escolhe a que tem mais restrições não resolvidas.
LCV (Least Constraining Value)
Ordena valores que restringem menos os vizinhos.
Restrições Leves (Soft Constraints)
Também é possível definir restrições que podem ser quebradas
Geralmente associadas a um custo ou preferências
Ex.: Priorizar o uso das cores na ordem vermelho, verde, azul
Pode ser resolvido associando custos à cada valor do domínio, podendo ser tratado como problema de otimização
Também pode ser resolvido ordenando a expansão da busca
Resumo e Próximos Passos
CSP (Constraint Satisfaction Problem): Variáveis, domínios e restrições definem o problema. Objetivo é encontrar uma atribuição que satisfaça todas as restrições.
Backtracking (exaustivo + heurísticas).
Forward Checking – eliminação antecipada de valores impossíveis.
Heurísticas de escolha: MRV (Minimum Remaining Values) e LCV (Least Constraining Value).
Aplicações clássicas: Sudoku, Xadrez, otimização logística, etc.
Próximos passos:
Implementar força bruta e backtracking.
Algoritmos evolutivos e meta‑heurísticas.
Atividade recomendada: Leitura do capítulo 3.
Perguntas e Discussão
Qual a diferença fundamental entre backtracking puro e forward checking? Em que situações o custo adicional do forward checking vale a pena?
Como a heurística MRV (Minimum Remaining Values) influencia a profundidade da árvore de busca? Pode haver casos em que escolher a variável com mais valores restantes seja mais vantajoso?
Como a escolha do modelo de domínio (por exemplo, representar cada linha como uma variável vs. usar variáveis binárias para cada célula) afeta a eficiência das técnicas de CSP? Quais trade‑offs surgem na modelagem de problemas com muitos valores distintos por variável?
Quais são os principais desafios ao adaptar algoritmos de CSP para domínios contínuos ou híbridos (contínuo + discreto)?
Usar como base:
https://shuaili8.github.io/Teaching/CS3317/L3_CSPs.pdf
https://pages.mtu.edu/~nilufer/classes/cs5811/2020-fall/lecture-slides/cs5811-ch06a-csp.pdf
---
<style scoped>
p{font-size:18px;text-align:center;}
</style>
# Voltando ao Exemplo de Motivação
<div class="columns-center">
<div>
- Como colorir o mapa ao lado?
- O que podemos variar?
* **Variáveis**: Cores
- Quais regras precisamos seguir?
* **Restrição**: Regiões adjacentes não podem ter a mesma cor.
* Você consegue pensar em **mais alguma** restrição?
* Como modelar este problema?
* Usando **grafos** (exemplo na lousa)
</div>
<div>

Fonte da Imagem: [www.comoaprenderdesenhar.com.br](https://www.comoaprenderdesenhar.com.br/wp-content/uploads/2019/04/mapa-do-brasil-com-regioes-para-colorir-1068x1068.png).
</div>
</div>
---
# Maintaining Arc Consistency (MAC)
- Extensão de FC que, após cada atribuição, re‑aplica o algoritmo AC‑3 nos arcos afetados.
- Garante consistência de arco em todo instante.
**Complexidade**: $\mathcal{O}(n^2 d^2)$.
---
## Slide 10 – Heurísticas de Propagação
- **FC + LCV**: combina Forward Checking com ordenação LCV.
- **MAC + MRV**: propaga arcos e seleciona variável MRV.
Empiricamente, MAC+MRV alcança mais redução de domínio.
## Slide 17 – Perguntas & Discussões
- Quais são os trade‑offs entre Backtracking puro e MAC?
- Como adaptar CSPs a problemas com domínios contínuos?
- Experimentos de benchmark: Sudoku vs. Problema das N‑Rainhas.