import numpy as np
# =====================================================================
# 1. 時間軸・SNS観測データ(同定パラメータ)の設定
# =====================================================================
# t0: 告示日 (0日目) -> t1: 投票日 (14日目)
t = np.linspace(0, 14, 500)
dt = t[1] – t[0]
# 【SNS時系列指標】
# u(t): 態度未決定層の比率(命題④/認識的不確定度 U)
u_t = 0.50 * np.exp(-0.15 * t) + 0.10
# e(t): 選挙の熱量・モメンタム(励起エネルギー E)終盤にかけて上昇
energy_t = 0.8 + 0.6 / (1.0 + np.exp(-0.8 * (t – 7.0)))
# 心理的障壁 V(t)(岩盤支持層の固定度、批判、同調圧力)
barrier_A = 1.2 * np.ones_like(t) # Aに対する抵抗感
barrier_B = 1.1 * np.ones_like(t) # Bに対する抵抗感
# SNSポジティブ感情スコア s_A, s_B
sentiment_A = 0.55 / (1.0 + np.exp(-0.5 * (t – 5.0))) + 0.2
sentiment_B = 0.80 – sentiment_A
# 認知的プランク定数 h_cog(t)(世論の流動性・ファジィ度)
h_cog_t = 0.4 * u_t * (1.0 + 0.5 * energy_t)
# =====================================================================
# 2. トンネル透過率 T(t) の計算
# =====================================================================
# T = exp( – max(0, V – E) / h_cog ) * s
eff_barrier_A = np.maximum(0, barrier_A – energy_t)
eff_barrier_B = np.maximum(0, barrier_B – energy_t)
T_A = np.exp(-eff_barrier_A / h_cog_t) * sentiment_A
T_B = np.exp(-eff_barrier_B / h_cog_t) * sentiment_B
# =====================================================================
# 3. メンバーシップ関数 μ(t) の過渡応答シミュレーション
# =====================================================================
mu_A = np.zeros_like(t)
mu_B = np.zeros_like(t)
# 初期支持度(告示日 t0)
mu_A[0] = 0.25
mu_B[0] = 0.25
gamma = 0.05 # 自然減衰率
# 時間発展(オイラー法 / ルンゲ=クッタ法への拡張可能)
for i in range(len(t) – 1):
# 位相干渉項(圧勝を望まないバランス心理 ⑤・⑥ の干渉)
delta_theta = np.pi * (mu_A[i] – mu_B[i]) # 差が開くほど抑制位相が働く
interference = 0.08 * np.sqrt(max(0, mu_A[i] * mu_B[i])) * np.cos(delta_theta)
# 過渡応答の微分方程式
d_mu_A = (-gamma * mu_A[i] + T_A[i] * u_t[i] + interference) * dt
d_mu_B = (-gamma * mu_B[i] + T_B[i] * u_t[i] – interference) * dt
mu_A[i + 1] = np.clip(mu_A[i] + d_mu_A, 0, 1)
mu_B[i + 1] = np.clip(mu_B[i] + d_mu_B, 0, 1)
# =====================================================================
# 4. 投票日 t1 における射影測定(古典排他事象への確定)
# =====================================================================
voter_turnout = 0.55 # 予測投票率
beta_sns = 0.35 # SNS世論の全体社会への浸透度係数
# 基礎票(組織票の地盤: A:45%, B:55%)
base_A, base_B = 0.45, 0.55
# 最終得票率 P_A, P_B の算出
norm_mu_A = mu_A[-1] / (mu_A[-1] + mu_B[-1])
norm_mu_B = mu_B[-1] / (mu_A[-1] + mu_B[-1])
P_A = (1 – voter_turnout) * base_A + voter_turnout * (
beta_sns * norm_mu_A + (1 – beta_sns) * base_A
)
P_B = 1.0 – P_A
diff = P_A – P_B
# 当確事象(R1〜R4)への射影
theta_landslide = 0.10 # 10%以上の差で圧勝
if diff > theta_landslide:
result = “R1: A候補 圧勝当確 (Landslide A)”
elif 0 < diff <= theta_landslide:
result = “R3: A候補 接戦当確 (Tight Win A)”
elif -theta_landslide <= diff < 0:
result = “R4: B候補 接戦当確 (Tight Win B)”
else:
result = “R2: B候補 圧勝当確 (Landslide B)”
# =====================================================================
# 5. 結果出力
# =====================================================================
print(f”=== 最終予測結果 (t = t1) ===”)
print(f”候補A 予測得票率: {P_A*100:.2f}%”)
print(f”候補B 予測得票率: {P_B*100:.2f}%”)
print(f”得票率差: {diff*100:+.2f}%”)
print(f”射影された当確事象: {result}”)
(mathGPTによる)
コメントを残す