Skip to content

allanfenelon/termo-svd-engine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

termo-svd-engine

Spectral Solver for TERMO using Rank-One Approximation

termo-svd-engine é um solver matemático para o jogo TERMO que utiliza decomposição espectral para selecionar o palpite mais representativo do conjunto atual de palavras possíveis.

O projeto é inspirado na estratégia proposta por Michael Bonthron em Rank One Approximation as a Strategy for Wordle (arXiv:2204.06324), mas implementa uma adaptação própria, voltada ao TERMO em português, com interface gráfica interativa e heurísticas adicionais.

🔗 Publicação

🎯 Objetivo

Aplicar conceitos de Álgebra Linear para:

  • Representar palavras como vetores binários posicionais
  • Construir uma matriz de soluções possíveis
  • Extrair a direção dominante do espaço vetorial
  • Selecionar o palpite mais representativo do conjunto

A proposta é transformar estrutura espectral em estratégia de decisão.


🧠 Estratégia Matemática

1️⃣ Representação Vetorial

Cada palavra de 5 letras é codificada como vetor binário de dimensão 130:

  • 26 letras possíveis
  • 5 posições
  • Codificação one-hot por posição

Exemplo conceitual:

posição 1 → 26 dimensões
posição 2 → 26 dimensões
...
posição 5 → 26 dimensões

Total: 5 × 26 = 130 dimensões.


2️⃣ Construção da Matriz

Se existirem $( n )$ palavras possíveis, constrói-se:

$$ A \in \mathbb{R}^{n \times 130} $$

Cada linha representa uma palavra vetorizada.


3️⃣ Extração da Direção Dominante

Em vez de calcular o SVD completo, a implementação utiliza:

$$ B = A^T A $$

e extrai o autovetor dominante via decomposição espectral:

BB = np.dot(A.T, A)
w2, v2 = np.linalg.eigh(BB)
dom_col = np.abs(v2[:, -1])

Esse vetor captura a principal direção de variância do conjunto.


4️⃣ Seleção do Melhor Palpite

Para cada palavra candidata $( a_i )$, calcula-se o ângulo:

$$ \theta_i = \cos^{-1} \left( \frac{a_i^T u}{|a_i|} \right) $$

A palavra escolhida é aquela com menor ângulo em relação ao vetor dominante.

Interpretação:

Seleciona-se a palavra mais alinhada com a estrutura latente do conjunto atual.


🔎 Filtragem das Restrições

O algoritmo interpreta o feedback do jogo:

  • Verde (posição correta)
  • Amarelo (letra presente, posição incorreta)
  • Cinza (letra ausente, com controle de exceções)

A cada rodada:

  1. Filtra o conjunto de palavras possíveis
  2. Reconstrói a matriz
  3. Recalcula o vetor dominante
  4. Sugere novo palpite

🚀 Heurística de Chute Inicial

Arquivo: melhor_chute_inicial.py

Como estratégia complementar, o projeto inclui heurística simples para primeira jogada:

  • Maximiza número de vogais distintas
  • Aumenta poder informacional inicial

Exemplo:

def melhor_palavra_por_vogais_diferentes(lista_palavras):
    return max(lista_palavras, key=conta_vogais_diferentes)

🖥️ Interface Gráfica

Implementada com Tkinter, inclui:

  • Entrada manual da palavra
  • Alternância visual de cores (cinza, amarelo, verde)
  • Histórico colorido das tentativas
  • Sugestão automática do melhor palpite
  • Reset completo do estado

📂 Estrutura do Projeto

termo-svd-engine/
│
├── script.py
├── melhor_chute_inicial.py
├── palavras_com_categorias.csv
└── README.md

🛠️ Tecnologias Utilizadas

  • Python
  • NumPy
  • Pandas
  • Tkinter
  • Álgebra Linear Numérica

▶️ Como Executar

Instale dependências:

pip install numpy pandas

Execute:

python script.py

Certifique-se de que palavras_com_categorias.csv esteja no mesmo diretório.


📊 Características Técnicas

  • Codificação vetorial posicional (130 dimensões)
  • Decomposição espectral via ( A^T A )
  • Similaridade angular (cosine-based selection)
  • Filtragem determinística baseada em restrições
  • Heurística informacional para chute inicial
  • Interface gráfica interativa

📚 Base Teórica

Inspirado no trabalho de Michael Bonthron:

Rank One Approximation as a Strategy for Wordle (2022)

A implementação adapta a ideia de rank-one approximation para um ambiente prático e interativo, aplicando o conceito ao vocabulário do TERMO.


🎓 Aplicações Gerais

A metodologia pode ser generalizada para:

  • Seleção do elemento mais representativo de um conjunto
  • Amostragem representativa
  • Sistemas de recomendação
  • Problemas de clustering aproximado
  • Tomada de decisão baseada em estrutura espectral

📌 Contribuição

Este projeto demonstra:

  • Aplicação prática de Álgebra Linear a problemas discretos
  • Implementação numérica eficiente de autovalores
  • Engenharia de sistemas matemáticos interativos
  • Integração entre teoria espectral e interface gráfica

About

termo-svd-engine é um solver matemático para o jogo TERMO que utiliza decomposição espectral para identificar, a cada rodada, a palavra mais representativa do conjunto atual de soluções possíveis.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages