"""Impression formation and entropy‑governed persistence."""
from typing import Callable
import numpy as np
from scipy.integrate import odeint
[docs]
class ImpressionDynamics:
"""Implements MERCURIAL A.18 impression dynamics."""
def __init__(
self,
alpha_form: float = 0.1,
gamma_form: float = 0.01,
gamma0: float = 0.001,
S_crit: float = 10.0,
k_eff: float = 1.0,
):
self.alpha = alpha_form
self.gamma_form = gamma_form
self.gamma0 = gamma0
self.S_crit = S_crit
self.k_eff = k_eff
[docs]
def decay_rate(self, entropy: float) -> float:
return self.gamma0 * (entropy / self.S_crit)
[docs]
def persistence_time(self, entropy: float) -> float:
tau0 = 86400.0 # 1 day in seconds
return tau0 * np.exp((self.S_crit - entropy) / self.k_eff)
[docs]
def evolve_impression(
self, I0: float, t_span: np.ndarray, entropy_function: Callable[[float], float]
) -> np.ndarray:
def dI_dt(I, t):
S_t = entropy_function(t)
gamma = self.decay_rate(S_t)
return -gamma * I
return odeint(dI_dt, I0, t_span).flatten()