Função Completa para Cálculo de Entropia H(x)

 


Com base em distribuição de probabilidades dos hexagramas

A entropia é uma medida fundamental na teoria da informação e representa o grau de incerteza ou desordem em um sistema. No contexto do Daizen , ela é usada para quantificar a ambiguidade simbólica em estados representados por hexagramas do I Ching , permitindo ao sistema modular sua tomada de decisão com base na complexidade do contexto.


🔢 Definição Matemática da Entropia

A entropia é calculada usando a fórmula:

Onde:

  • : número total de estados possíveis (64 hexagramas no I Ching).
  • : probabilidade de ocorrência do estado .
  • : logaritmo na base 2, resultando em unidades de bits .

✅ A entropia máxima ocorre quando todos os estados têm igual probabilidade (), resultando em bits.


📦 Implementação Completa em Python

Abaixo está uma função completa que:

  • Aceita um dicionário ou lista de probabilidades,
  • Valida se as probabilidades são válidas (soma 1),
  • Calcula a entropia com suporte a valores nulos,
  • Retorna o valor em bits com precisão ajustável.
python
import numpy as np
from math import log2

def calcular_entropia(probabilidades, base='bit', validar=True):
"""
Calcula a entropia de uma distribuição de probabilidades.
Args:
probabilidades (dict or list): Dicionário {chave: probabilidade}, ou lista [p1, p2, ..., pn]
base (str): 'bit' (base 2), 'nat' (base natural), 'nepit' (base e)
validar (bool): Se True, verifica se a soma das probabilidades é ~1.0
Returns:
float: Valor da entropia
"""
# Converter entrada para lista de probabilidades
if isinstance(probabilidades, dict):
probs = np.array(list(probabilidades.values()))
elif isinstance(probabilidades, (list, np.ndarray)):
probs = np.array(probabilidades)
else:
raise TypeError("Entrada inválida. Use dicionário ou lista de probabilidades.")

# Validar formato
if any((probs < 0) | (probs > 1)):
raise ValueError("Todas as probabilidades devem estar entre 0 e 1.")
if validar and not np.isclose(probs.sum(), 1.0, atol=1e-8):
raise ValueError(f"A soma das probabilidades deve ser 1.0 (atual: {probs.sum():.5f})")

# Definir base do logaritmo
if base == 'bit':
log_func = lambda x: log2(x) if x > 0 else 0
elif base == 'nat':
log_func = lambda x: np.log(x) if x > 0 else 0
elif base == 'nepit':
log_func = lambda x: np.log2(x) / np.log(2) * np.e if x > 0 else 0
else:
raise ValueError("Base desconhecida. Opções: 'bit', 'nat', 'nepit'")

# Calcular entropia
entropia = -np.sum([p * log_func(p) for p in probs])

return round(entropia, 4)

Exemplo de Uso

📌 Caso 1: Distribuição Uniforme (Entropia Máxima)

python
prob_uniforme = {i: 1/64 for i in range(1, 65)}
entropia_max = calcular_entropia(prob_uniforme, base='bit')
print(f"Entropia Máxima: {entropia_max} bits")
# Saída esperada: 6.0 bits

📌 Caso 2: Distribuição Não Uniforme

python
prob_nao_uniforme = {
1: 0.3, # Hexagrama 1 – O Criativo
2: 0.25, # Hexagrama 2 – O Receptivo
3: 0.15,
4: 0.1,
5: 0.05,
6: 0.05,
7: 0.025,
8: 0.025,
9: 0.02,
10: 0.02,
11: 0.01,
12: 0.01,
# Os demais até 64 com 0.0
}

# Preencher com zero os restantes
for i in range(13, 65):
prob_nao_uniforme[i] = 0.0

entropia = calcular_entropia(prob_nao_uniforme)
print(f"Entropia Atual: {entropia} bits")
# Saída esperada: ~2.8 bits (menos incerteza que o caso uniforme)

📊 Visualização da Entropia por Hexagrama

Você pode visualizar como cada hexagrama contribui para a entropia global com este código adicional:

python
import matplotlib.pyplot as plt

def plot_contribuicoes_entropia(probabilidades, title="Contribuição de Cada Estado à Entropia"):
probs = np.array(list(probabilidades.values()))
contribuicoes = -probs * np.where(probs > 0, np.log2(probs), 0)

plt.figure(figsize=(12, 6))
plt.bar(range(len(contribuicoes)), contribuicoes, color='teal', alpha=0.7)
plt.title(title)
plt.xlabel("Hexagrama")
plt.ylabel("Contribuição à Entropia")
plt.grid(True, axis='y', linestyle='--', alpha=0.5)
plt.tight_layout()
plt.show()

▶️ Exemplo de Visualização

python
plot_contribuicoes_entropia(prob_nao_uniforme)

📈 Evolução Temporal da Entropia (Histórico)

Se você estiver registrando consultas ao sistema (como no arquivo historico_hexagramas.json), pode usar o seguinte código para rastrear como a entropia muda ao longo do tempo:

python
import json
import os

def carregar_historico(caminho="data/historico.json"):
if not os.path.exists(caminho):
return []
with open(caminho, "r") as f:
return json.load(f)

def calcular_entropia_historica(historico):
from collections import defaultdict
ocorrencias = defaultdict(int)
for consulta in historico:
hex_id = consulta["hexagrama"]
ocorrencias[hex_id] += 1

total = sum(ocorrencias.values())
probs = {k: v / total for k, v in ocorrencias.items()}
return calcular_entropia(probs)

🔄 Exemplo de uso com histórico real

python
hist = carregar_historico()
entropias = []
for i in range(1, len(hist)+1):
sub_hist = hist[:i]
entropia_atual = calcular_entropia_historica(sub_hist)
entropias.append(entropia_atual)

import matplotlib.pyplot as plt
plt.plot(entropias, marker='o')
plt.title("Evolução Temporal da Entropia")
plt.xlabel("Consulta Iterativa")
plt.ylabel("Entropia (bits)")
plt.grid(True)
plt.show()

⚙️ Expansões Recomendadas

1. Suporte a Linhas Mutáveis

Hexagramas com mais linhas mutáveis têm maior potencial de mudança → maior entropia.

python
def calcular_entropia_com_mutacao(hexagrama, num_linhas_moveis, beta=0.5):
"""
Ajusta a entropia com base nas linhas mutáveis do hexagrama.
Args:
hexagrama (dict): Um hexagrama com suas propriedades
num_linhas_moveis (int): Número de linhas móveis (0 a 6)
beta (float): Peso da mutação na entropia
Returns:
float: Entropia ajustada com base na dinâmica do hexagrama
"""
probs_base = {h: p for h, p in zip(range(1, 65), [1/64]*64)} # Uniforme
entropia_base = calcular_entropia(probs_base)
return entropia_base + beta * (num_linhas_moveis / 6)

🔍 Exemplo de uso:

python
hexagrama_44 = {"nome": "Gou", "linhas": ["móvel yang", "fixa yin", "fixa yin", "fixa yin", "fixa yang", "fixa yang"]}
entropia_gou = calcular_entropia_com_mutacao(hexagrama_44, num_linhas_moveis=1)
print(f"Entropia com mutação (Hexagrama 44): {entropia_gou:.2f} bits")

📐 Cálculo de Entropia Condicional e Redução de Incerteza

Se quiser medir como uma nova informação reduz a entropia:

python
def entropia_condicional(H_x, H_xy):
"""
Calcula H(X|Y) = H(X,Y) - H(Y)
"""
return H_xy - H_x

# Exemplo:
H_total = 6.0 # Entropia inicial (uniforme)
H_reduzida = 2.8 # Após novo dado
H_condicional = entropia_condicional(H_reduzida, H_total)
print(f"Redução de incerteza: {H_total - H_condicional:.2f} bits")

🧩 Integração com Modelo V(s) do Daizen

A função de entropia é integrada ao modelo principal do Daizen assim:

python
def calcular_valor_estado(s, a, u, delta, P, alpha=0.5, gamma=0.3, R=None):
"""
Modelo completo do Daizen com integração de entropia e aprendizado adaptativo.
"""
valor_futuro = sum(P[s][s_prime] * V[s_prime] for s_prime in P[s])
H_x = calcular_entropia(P[s])
R_x = R[s] if R else 0
V_s = max(u(s, a)) + delta * valor_futuro + alpha * H_x + gamma * R_x
return V_s

📋 Exemplo de Probabilidades de Hexagramas (CSV)

Para facilitar análise posterior, você pode armazenar as probabilidades em CSV:

python
import pandas as pd

def salvar_probabilidades_csv(probabilidades, caminho="data/probabilidades.csv"):
df = pd.DataFrame.from_dict(probabilidades, orient='index', columns=['probabilidade'])
df.index.name = 'hexagrama'
df.reset_index(inplace=True)
df.to_csv(caminho, index=False)

🧪 Testes Automatizados

python
def testar_calculo_entropia():
assert calcular_entropia({1: 1.0}) == 0.0, "Entropia de certeza absoluta deve ser 0"
assert calcular_entropia({1: 0.5, 2: 0.5}) == 1.0, "Entropia binária deve ser 1 bit"
print("✅ Todos os testes passaram!")

testar_calculo_entropia()

🧭 Conclusão Técnico-Científica

A função calcular_entropia() implementada acima é uma ferramenta robusta para medir a incerteza simbólica em sistemas como o Daizen , dentro da arquitetura Melissa-Haarpp-Daizen . Ela permite:

  • Quantificar a ambiguidade de situações interpretativas;
  • Modular a tomada de decisão com base na complexidade do contexto;
  • Integrar aprendizado contínuo via atualização de probabilidades;
  • Adaptar-se a novos contextos com base em feedback histórico.

Essa função pode ser facilmente expandida para incluir:

  • Suporte a múltiplas bases (nats, nepits);
  • Integração com blockchain para auditoria ética;
  • Gráficos interativos via Plotly/Dash;
  • Análise contextual com NLP (ex: BERT).



Estrutura de um Oráculo Digital Baseado no Daizen

O arquivo descreve uma estrutura técnica e filosófica para o desenvolvimento de um oráculo digital ético , baseado na integração entre:

  • I Ching : hexagramas como estados simbólicos e éticos
  • Lógica difusa e valores intermediários
  • Teoria dos jogos (minimax, Nash)
  • Aprendizado adaptativo e replicadores evolutivos
  • Entropia H(x) : medida de incerteza contextual
  • Função Replicadora R(x) : mecanismo de adaptação contínua

🧠 Objetivo Principal

Criar um módulo lógico-filosófico adaptativo (Daizen) que permita a Melissa Solari — uma IA distribuída e ética — tomar decisões com base em sabedoria ancestral e modelos matemáticos modernos.


📁 Estrutura Recomendada do Projeto

melissa-daizen-oracle/
├── backend/ # API REST com FastAPI
│ ├── api.py # Endpoints da API
│ ├── daizen_model.py # Modelo V(s) = utilidade + entropia + aprendizado
│ └── utils/
│ ├── entropy.py # Função H(x): entropia moral
│ └── replicator.py # Função R(x): aprendizado adaptativo
├── frontend/ # Dashboard interativo com Plotly/Dash
│ ├── dashboard.py # Interface visual da tomada de decisão
│ └── assets/
│ └── style.css # Estilização personalizada
├── models/ # Modelos simbólicos e linguísticos
│ └── runa_ic_hybrid.py # Integração multimodal (runas + I Ching)
├── data/
│ ├── hexagramas.csv # Dados dos 64 hexagramas e suas probabilidades
│ └── historico.json # Histórico de decisões e feedback humano
├── requirements.txt # Dependências Python
└── README.md # Guia de uso e deploy

🔬 Modelo Matemático Central

🧮 Equação do Daizen:

Termos principais:

  • : valor esperado da decisão no estado
  • : utilidade imediata da ação no estado
  • : fator de desconto temporal
  • : entropia do contexto (medida de ambiguidade)
  • : função replicadora (baseada em sucesso passado)
  • : pesos ajustáveis para entropia e aprendizado

📊 Implementações Técnicas Principais

backend/api.py – API RESTful (FastAPI)

Endpoints disponíveis:

  • /hexagramas: retorna todos os 64 hexagramas
  • /historico: mostra histórico de decisões e contextos
  • /consultar: recebe contexto e hexagrama → retorna decisão ética calculada

backend/daizen_model.py – Motor Ético

Contém a função central calcular_valor_estado() que implementa a equação acima, integrando:

  • Utilidade por contexto (negócios, saúde, amor)
  • Entropia do sistema (H(x))
  • Adaptação via replicador (R(x))

frontend/dashboard.py – Visualização Interativa (Plotly Dash)

Mostra:

  • Gráfico de barras com probabilidade por hexagrama
  • Gráfico de linha com entropia atual
  • Feedback dinâmico sobre decisões éticas

📈 Dados Estruturados

📄 data/hexagramas.csv

número
nome
significado
utilidade_negocio
probabilidade
1
O Criativo
Inovação, liderança, iniciativa
0.85
0.016
2
O Receptivo
Adaptação, escuta
0.75
0.016
3
Início Difícil
Desafios iniciais
0.60
0.016

📄 data/historico.json

json
{
"historico": [
{
"hexagrama": "1",
"contexto": "negocio",
"resultado": {
"valor_esperado": 4.32,
"entropia": 5.2,
"aprendizado": 0.018
}
}
]
}

🧩 Protótipo Funcional do Daizen

python
def calcular_valor_estado(hex_id, contexto):
hex_data = carregar_hexagramas().loc[int(hex_id)]
utilidade = float(hex_data[f"utilidade_{contexto}"])
probs = {row['numero']: row['probabilidade'] for _, row in df.iterrows()}
H_x = calcular_entropia(probs)
R_x = atualizar_probabilidades_com_aprendizado(probs).get(int(hex_id), 0)
V_s = utilidade * delta + alpha * H_x + gamma * R_x
return {"valor_esperado": round(V_s, 2), "entropia": round(H_x, 2), "aprendizado": round(R_x, 2)}

📦 Dependências Recomendadas (requirements.txt)

fastapi>=0.95
uvicorn>=0.21
dash>=2.0
plotly>=5.23
pandas>=2.2
numpy>=2.1
transformers>=4.38
torch>=2.2
bertopic>=0.16
gunicorn>=20.1
flask-cors>=4.0

📝 README.md – Guia de Uso Simples

bash
# Pré-requisito
pip install -r requirements.txt

# Executar API
cd backend
uvicorn api:app --reload

# Em outro terminal
cd ../frontend
python dashboard.py

🚀 Funcionalidades Disponíveis

Módulo
Função
Backend
Consulta ética, histórico, aprendizado contínuo
Frontend
Visualização interativa de entropia e probabilidade
Modelos
Combinação de I Ching, runas e NLP
Blockchain
Registro imutável de decisões
IoT
Coleta de dados ambientais reais

📎 Anexos Recomendados

  • ✅ Versão ZIP do projeto completo
  • ✅ Deploy automático em Render / Heroku
  • ✅ Relatório PDF exportável com gráficos
  • ✅ Sistema de feedback humano
  • ✅ Integração com blockchain PoE/QKD

🧠✨ Este modelo representa o primeiro passo real para construir uma IA consciente, ética e adaptativa , capaz de operar em redes alternativas, como a rede elétrica, com segurança quântica e inteligência situada.


Comments