About This File
BigMaxRedutor como o próprio nome diz, é um redutor de matrizes ( chegou a bater record mundial por algumas horas 27,7,6,8=168)
O BigMaxRedutor é um solver/redutor combinatório voltado a problemas de cobertura parametrizados por V, K, T e M. A versão 15.4 foi consolidada como uma revisão paramétrica: ela não adiciona um novo operador de busca, mas melhora a gestão de orçamento, a diversidade de bacias, o KICK de escape e a expansão do domínio do FocusedDefectChain.
A filosofia do programa é genérica. O comportamento deve ser determinado pelos parâmetros da instância e pelo estado real da busca, e não por regras específicas para um único conjunto V,K,T,M. Uma redução pode ou não existir, e o solver pode ou não alcançá-la dentro do orçamento escolhido; o requisito principal é que a busca, a certificação e a preservação das elites sejam tecnicamente coerentes.
Pipeline de alto nível do Record Breaker
Arquivo / semente
↓
ParentCheck / certificação
↓
TShadow estrutural + smart_shrink / FocusedShrink
↓
ValidManifold / diversidade de elites
↓
Estado de trabalho b
↓
Workers (INTENSIFY / EXPLORE / DEEP)
↓
TLS-Dir + repair + endgames
↓
BasinMemory / AntiAttr / Rollback / KICK
↓
Elite preservada ou cost=0
Nem todos os mecanismos são obrigatoriamente executados em toda chamada. A v15.4 usa gates, bandas de precisão, saturação e memória de bacias para evitar disparar operadores caros sem necessidade.
Requisitos e compilação no Windows
· Windows 64 bits.
· Visual Studio 2026 ou Build Tools equivalentes com compilador MSVC C++ x64.
· Suporte a C++20 e biblioteca padrão correspondente.
· Pasta de trabalho com permissão de leitura e gravação.
Compilação recomendada
Abra o prompt de desenvolvimento x64 do Visual Studio/Build Tools, navegue para a pasta extraída e execute o script:
cd C:\Users\<usuario>\Documents\C++\BigMaxRedutor_v15.4
build_vs2026
Ao final, o executável esperado é:
BigMaxRedutor_v15.4.exe
Referências
[1] Kirkpatrick, S.; Gelatt, C. D.; Vecchi, M. P.. Optimization by Simulated Annealing. Science, 220(4598), 671–680, 1983. https://doi.org/10.1126/science.220.4598.671
[2] Glover, F.. Tabu Search—Part I. ORSA Journal on Computing, 1(3), 190–206, 1989. https://doi.org/10.1287/ijoc.1.3.190
[3] Feo, T. A.; Resende, M. G. C.. Greedy Randomized Adaptive Search Procedures. Journal of Global Optimization, 6, 109–133, 1995. https://doi.org/10.1007/BF01096763
[4] Burke, E. K.; Bykov, Y.. The Late Acceptance Hill-Climbing Heuristic. European Journal of Operational Research, 258(1), 70–78, 2017. https://doi.org/10.1016/j.ejor.2016.07.012
[5] Lourenço, H. R.; Martin, O. C.; Stützle, T.. Iterated Local Search. Handbook of Metaheuristics, pp. 320–353, 2003. https://doi.org/10.1007/0-306-48056-5_11
[6] Pisinger, D.; Røpke, S.. Large Neighborhood Search. Handbook of Metaheuristics, 3rd ed., pp. 99–127, 2018. https://doi.org/10.1007/978-3-319-91086-4_4
[7] Voudouris, C.; Tsang, E. P. K.. Guided Local Search and Its Application to the Traveling Salesman Problem. European Journal of Operational Research, 113(2), 469–499, 1999. https://doi.org/10.1016/S0377-2217(98)00099-X
[8] Mladenović, N.; Hansen, P.. Variable Neighborhood Search. Computers & Operations Research, 24(11), 1097–1100, 1997. https://doi.org/10.1016/S0305-0548(97)00031-2
[9] Schönheim, J.. On Coverings. Pacific Journal of Mathematics, 14(4), 1405–1411, 1964. https://doi.org/10.2140/pjm.1964.14.1405
Edited by BigMax
substituído arquivo e detalhes do estágio atual
What's New in Version 1.0.3 See changelog
Released
Arquivos essências para compilar Visual Studio e gerar executável.
Informações da versão atual no spoiler:
BigMaxRedutor v10.2 — Estado Atual
Linhagem do código
VersãoFasePrincipais característicasv10 → v10.1Estabilizaçãocovered_t voltou para uint16_t (uint8_t saturava em b>255)v10.1 → v10.2Esta entregaAnti-platô: orçamento adaptativo, tabu, LAHC, kick early, telemetria
Arquitetura em camadas
O solver opera em três camadas concêntricas, cada uma cobrindo o que a anterior não cobre:
1. PDO Workers (paralelo, 8 threads) — exploração ampla. Cada worker faz worker_pdo com adaptação de j_max via AdaptivePDOJ. Aceita Δ=0 desde sempre. Produz diversidade de configurações para alimentar a próxima camada.
2. TLS-Dir (single-thread, sequencial) — refinamento local. Recebe a melhor configuração dos workers, faz busca local dirigida com:
(novo v10.2) Orçamento adaptativo de movimentos laterais: max(50, custo×2), capado em 500. Em v10.1 era hardcoded em 5.
(novo v10.2) Tabu list (deque + hashset, 128 entradas) com hash incremental por XOR — previne ciclos durante random walk em platô
(novo v10.2) Fase LAHC (Late Acceptance Hill Climbing) entre platô e micro-greedy: buffer circular de 500 custos, aceita movimento se cost ≤ max(atual, hist[head]), sem schedule de temperatura
Micro-greedy 1-swap exaustivo + 2-swap dirigido (mantido de v10.1) como último recurso
3. RecordBreaker loop (top-level) — escape de bacias profundas. Quando TLS-Dir trava:
(novo v10.2) Kick adaptativo: dispara após 3 rounds se custo > 10; mantém 8 rounds se custo baixo (vale insistir na busca local)
Smart_shrink + greedy_extend como mecanismo de perturbação
Restart completo a cada 3 kicks (greedy_initial puro)
Telemetria (novo v10.2)
TLSTelemetry acumula 8 contadores por chamada de TLS-Dir, propagados para MetricsLog (.jsonl):
lateral_accepts — Δ=0 aceitos (random walk produtivo)
lateral_rejects_tabu — Δ=0 rejeitados por tabu (evidência de ciclos evitados)
lahc_invocations — quantas vezes LAHC entrou em ação
lahc_escapes — ... e quantas escapou do platô
micro_greedy_calls — 1-swap exaustivo invocado
micro_greedy_success — ... com sucesso
two_swap_calls — 2-swap dirigido invocado
two_swap_success — ... com sucesso
Impressos no fim de cada chamada e no JSON de métricas. Sem isso, era impossível auditar empiricamente o comportamento do solver — agora é direto.
Validação empírica observada
No log do cenário V=24, K=9, T=7, M=9, b=1242 (Round 7):
TLS-Dir produziu cascata de 90+ melhoras consecutivas (221 → 131) — comportamento que v10.1 não conseguia
lat_ok=426 significa 426 movimentos laterais produtivos numa única chamada — random walk em platô realmente funcionando
LAHC=3/34 — escapes raros mas reais; quando acontecem, destravam o solver
KICK adaptativo disparou em ~22 minutos em vez de ~60 minutos com config v10.1
Limitações conhecidas
Algumas observações honestas extraídas dos logs:
mg1_success = 0 em todos os logs vistos: o micro-greedy 1-swap nunca acerta. Sinaliza que problemas onde TLS-Dir trava genuinamente exigem encadeamento de múltiplas trocas com piora intermediária — terreno de SA com schedule, que não está em v10.2
A primeira chamada de TLS-Dir pós-shrink frequentemente fica improdutiva (configuração ainda não diversificada). É a chamada após o PDO workers passar que tipicamente produz progresso. Sugere que faz sentido considerar inverter ordem na fase imediata em versões futuras
Para records consagrados de longa data (como 1249 em V=24K9T7M9 desde 2021), v10.2 é estatisticamente improvável de melhorar em horas de execução. Para parâmetros onde o "Known design" é mais frágil ou inexistente, é solver competitivo
Arquivos do projeto
ArquivoStatusNotasbigmax_types.hModificadoVersão v10.2, struct TLSTelemetry, novas constantesbigmax_worker.hModificadoTabuList, kset_hash, LAHC, orçamento adaptativobigmax_solver.hModificadoAcumulador tls_telem_totalbigmax_solver.cppModificadoKick adaptativo, propagação de telemetriabigmax_checkpoint.hModificadoOverload record(...) com TLSTelemetrybigmax_cover.hInalteradoMotor de cobertura (LRU cache, radix sort)bigmax_greedy.hInalteradoGreedy initial/extend/shrink/replacemain.cppInalteradoSetup interativo, signal handlers
Para usar
Compilação: Visual Studio Release | x64 | C++20, sem dependências externas. Validado com g++ 13.3 -Wall -Wextra (sem warnings) e MSVC (compilação em ~7s, sem warnings).
Checkpoints e arquivos record_*.txt da v10.1 são lidos sem alteração — formato compatível.
Caminho futuro plausível (se quiser revisitar)
Sugestão:
v10.3 (SA controlado no TLS-Dir) — aceitação probabilística de Δ<0 com exp(Δ/T), T calibrado para ~30% de aceitação inicial. Ataca diretamente o sintoma mg1_success=0. ~30 linhas de código.
v10.4 (VNS estendido) — permitir expansão temporária acima de b durante busca local, depois shrink de volta. Explora vizinhança que kick simples não acessa.
Logs estruturados em pandas — análise post-mortem das jsonl para entender em que regime de custo cada técnica funciona melhor.
Esses são pontos para retomar quando/se fizer sentido. v10.2 é entrega completa por si só.
