fix:心情收到人格影响,

This commit is contained in:
SengokuCola
2025-04-07 19:25:35 +08:00
parent a2eb877d9d
commit 7bbe7c3d61
7 changed files with 45 additions and 25 deletions

View File

@@ -18,8 +18,8 @@ logger = get_module_logger("mood_manager", config=mood_config)
@dataclass
class MoodState:
valence: float # 愉悦度 (-1 到 1)
arousal: float # 唤醒度 (0 到 1)
valence: float # 愉悦度 (-1.0 到 1.0)-1表示极度负面1表示极度正面
arousal: float # 唤醒度 (0.0 到 1.0)0表示完全平静1表示极度兴奋
text: str # 心情文本描述
@@ -126,28 +126,43 @@ class MoodManager:
time.sleep(update_interval)
def _apply_decay(self) -> None:
"""应用情绪衰减"""
"""应用情绪衰减,正向和负向情绪分开计算"""
current_time = time.time()
time_diff = current_time - self.last_update
agreeableness_factor = 1
agreeableness_bias = 0
neuroticism_factor = 0.5
# 获取人格特质
personality = Individuality.get_instance().personality
if personality:
# 神经质:0.5为默认值0为极低1为极高
# 神经质越高,情绪变化越快(衰减率越高)
neuroticism_factor = 0.5 + (personality.neuroticism - 0.5) * 0.5 # 范围在0.25-0.75之间
# 宜人性0.5为默认值0为极低1为极高
# 宜人性越低,越容易走向负面情绪(向负值偏移)
agreeableness_bias = (0.5 - personality.agreeableness) * 0.2 # 范围在-0.1到0.1之间
else:
neuroticism_factor = 0.5 # 默认值
agreeableness_bias = 0.0
# 神经质:影响情绪变化速度
neuroticism_factor = 1 + (personality.neuroticism - 0.5) * 0.5
agreeableness_factor = 1 + (personality.agreeableness - 0.5) * 0.5
# 宜人性:影响情绪基准线
if personality.agreeableness < 0.2:
agreeableness_bias = (personality.agreeableness - 0.2) * 2
elif personality.agreeableness > 0.8:
agreeableness_bias = (personality.agreeableness - 0.8) * 2
else:
agreeableness_bias = 0
# Valence 向中性0回归考虑宜人性偏差
valence_target = agreeableness_bias
self.current_mood.valence = valence_target + (self.current_mood.valence - valence_target) * math.exp(
-self.decay_rate_valence * time_diff * neuroticism_factor
)
# 分别计算正向和负向的衰减率
if self.current_mood.valence >= 0:
# 正向情绪衰减
decay_rate_positive = self.decay_rate_valence * (1/agreeableness_factor)
valence_target = 0 + agreeableness_bias
self.current_mood.valence = valence_target + (self.current_mood.valence - valence_target) * math.exp(
-decay_rate_positive * time_diff * neuroticism_factor
)
else:
# 负向情绪衰减
decay_rate_negative = self.decay_rate_valence * agreeableness_factor
valence_target = 0 + agreeableness_bias
self.current_mood.valence = valence_target + (self.current_mood.valence - valence_target) * math.exp(
-decay_rate_negative * time_diff * neuroticism_factor
)
# Arousal 向中性0.5)回归
arousal_target = 0.5