v0.5.0: suíte SOM-4D + suíte JEPA (12) + tecnologia Pensamento + telemetria Theil–Sen — 29/29 gates verdes (provas r-18..r-22)
e26f4cc verified Download scripts/50_pensamento.py from PowerMachine/khtst-rust: direct link, hf CLI and curl.
- Browser
- Download file 5.37 kB
-
https://huggingface.co/PowerMachine/khtst-rust/resolve/main/scripts/50_pensamento.py
- Command line
-
hf download hf://PowerMachine/khtst-rust/scripts/50_pensamento.py
-
curl -L -o 50_pensamento.py https://huggingface.co/PowerMachine/khtst-rust/resolve/main/scripts/50_pensamento.py
5.37 kB
| #!/usr/bin/env python3 | |
| """50_pensamento.py — Tecnologia Pensamento v0.5.0. | |
| Demonstra o ciclo completo (provas r-21): | |
| 1. (item a) treino cooperativo das N redes paralelas — perda cai; | |
| 2. (item c) consulta OOD (fora do padrão comum) — confiança baixa; | |
| 3. (item d) ciclo planejamento → distribuição de competências → | |
| (re-planejamento | resposta) com orçamento — termina (T-P4); | |
| 4. ganho de confiança da agregação vs 1 rede isolada (T-P2); | |
| 5. escalonamento com N: mais tentativas ⇒ mais confiança (T-P2 empírico). | |
| Também mede a neutralidade no nascimento (T-P5) via confiança da linha de | |
| base e o custo (tempo) por iteração. Saída: resultados/pensamento_v050.json | |
| """ | |
| import json, math, os, time | |
| def main(): | |
| import khtst_rust.nucleo_rust as nr | |
| pasta = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| res = {"versao": "0.5.0", "modulo": nr.versao(), "demos": {}} | |
| # -------------------------------------------- demo principal (N=5, ciclo d) | |
| print("=== Pensamento: demo completa (N=5 tentativas) ===", flush=True) | |
| t0 = time.time() | |
| d = nr.demo_pensamento( | |
| d_cond=8, d_saida=4, n_tentativas=5, | |
| passos_treino=220, limiar_conf=0.55, orcamento=6, semente=42, | |
| ) | |
| dt = time.time() - t0 | |
| print(f" treino cooperativo: perda {d['perda_treino_inicial']:.4f} -> {d['perda_treino_final']:.4f} " | |
| f"(aprendeu: {d['treino_aprendeu']})") | |
| print(f" ciclo d: {d['iteracoes_ciclo_d']} iteracoes | eventos: " | |
| f"{[e['tipo'] for e in d['eventos_ciclo']]}") | |
| print(f" confianca base (1 rede): {d['confianca_base_1_rede']:.4f}") | |
| print(f" confianca Pensamento (N=5): {d['confianca_pensamento']:.4f} " | |
| f"(ganho {d['ganho_confianca']:+.4f})") | |
| res["demos"]["principal"] = {**d, "tempo_s": dt, | |
| "gate_aprendeu": d["treino_aprendeu"], | |
| "gate_terminou": d["iteracoes_ciclo_d"] <= 6, | |
| "gate_ganhou": d["ganho_confianca"] > 0} | |
| # -------------------------------------------- escalonamento com N (T-P2) | |
| print("\n=== Escalonamento com N (T-P2: auto-consistência) ===", flush=True) | |
| escal = [] | |
| for n in (1, 2, 3, 5, 8): | |
| t0 = time.time() | |
| r = nr.demo_pensamento( | |
| d_cond=8, d_saida=4, n_tentativas=n, | |
| passos_treino=200, limiar_conf=0.95, orcamento=8, semente=100 + n, | |
| ) | |
| dt = time.time() - t0 | |
| escal.append({ | |
| "n": n, | |
| "conf_base": r["confianca_base_1_rede"], | |
| "conf_pensamento": r["confianca_pensamento"], | |
| "ganho": r["ganho_confianca"], | |
| "iteracoes": r["iteracoes_ciclo_d"], | |
| "tempo_s": dt, | |
| }) | |
| print(f" N={n}: base {r['confianca_base_1_rede']:.4f} -> pensamento " | |
| f"{r['confianca_pensamento']:.4f} (ganho {r['ganho_confianca']:+.4f}) | {dt:.1f}s") | |
| # T-P2 empírico: a média das confianças com N grande excede a com N pequeno | |
| confs = [e["conf_pensamento"] for e in escal] | |
| monotona = all(c2 >= c1 - 0.02 for c1, c2 in zip(confs, confs[1:])) | |
| n1, nn = escal[0]["conf_pensamento"], escal[-1]["conf_pensamento"] | |
| res["demos"]["escalonamento_n"] = { | |
| "serie": escal, | |
| "confianca_n1": n1, | |
| "confianca_n_max": nn, | |
| "melhora_com_n": nn > n1, | |
| "monotona_quase": monotona, | |
| "gate_tp2": nn >= n1 - 0.02, | |
| } | |
| print(f" N=1: {n1:.4f} | N=8: {nn:.4f} | melhora: {nn > n1}") | |
| # -------------------------------------------- T-P3: montador algébrico | |
| print("\n=== T-P3: montador algébrico (projeção ridge) ===", flush=True) | |
| rng_w = [[0.3 * ((i * 7 + j * 3) % 11) / 11.0 - 0.15 for j in range(4)] for i in range(8)] | |
| r_alvo = [[float((i + j) % 5) / 5.0 for j in range(3)] for i in range(8)] | |
| r = nr.projetar_ridge(rng_w, r_alvo, 1e-6) | |
| # resíduo mínimo: compara com perturbações | |
| def residuo(rr): | |
| return sum((sum(rng_w[i][k] * rr[k][j] for k in range(4)) - r_alvo[i][j]) ** 2 | |
| for i in range(8) for j in range(3)) | |
| f0 = residuo(r) | |
| pert_ok = True | |
| for seed in range(20): | |
| pr = [[r[i][j] + 0.1 * math.sin(seed + i + j) for j in range(3)] for i in range(4)] | |
| if residuo(pr) < f0 - 1e-9: | |
| pert_ok = False | |
| print(f" residuo da projecao: {f0:.6f} | nenhuma perturbacao melhora: {pert_ok}") | |
| res["demos"]["projeção_ridge"] = {"residuo": f0, "otimalidade_vs_perturbacoes": pert_ok, | |
| "gate_tp3": pert_ok} | |
| # ------------------------------------------------------------------ resumo | |
| gates = [] | |
| for nome, s in res["demos"].items(): | |
| gates += [(f"{nome}.{g[5:]}", v) for g, v in s.items() if g.startswith("gate_")] | |
| ok = sum(1 for _, v in gates if v) | |
| res["resumo"] = {"gates_totais": len(gates), "gates_ok": ok, "todos_verdes": ok == len(gates)} | |
| print(f"\n=== RESUMO: {ok}/{len(gates)} gates verdes ===") | |
| os.makedirs(os.path.join(pasta, "resultados"), exist_ok=True) | |
| with open(os.path.join(pasta, "resultados", "pensamento_v050.json"), "w") as f: | |
| json.dump(res, f, indent=1, ensure_ascii=False) | |
| print("salvo: resultados/pensamento_v050.json") | |
| if not res["resumo"]["todos_verdes"]: | |
| raise SystemExit(1) | |
| if __name__ == "__main__": | |
| main() | |