Etape 11 : Programmation 5: calcul de l’humeur du monde
La lumière devrait être suffisamment adaptée pour tenir compte de ce qui vient de se passer dans le monde, mais il doit ne pas être si trop sensibles qu’ils sont sensibles au bruit et également ne pas être trop lent pour être en retard en vous informant d’un événement de grand monde.
La chose importante est de normaliser et de lisser les données avec soin et d’ajuster les seuils pour donner le bon niveau de réactivité et d’alarme. (c.-à-d. il doit clignoter lorsqu’un reportage de Global
Il arrive et pas quand une émission de télévision commence, GMT)
Émotion, humeur et tempérament
Tout d’abord, l’émotion « du monde » est calculée en effectuant une recherche twitter pour les tweets avec chacun des types de 7 humeur (amour, joie, surprise, colère, peur, envie, triste).
Une mesure de « tweets par minute » est utilisée pour calculer l’émotion actuelle. Un plus grand nombre de tweets par minute suggère que plus de gens sont sentent actuellement cette émotion.
Les émotions sont volatiles, donc ces états émotionnels de courte durée sont lissées au fil du temps en utilisant une « moyenne mobile exponentielle rapide »
(voir en.wikipedia.org/wiki/Moving_average#Exponential_moving_average)
Cela nous donne les ratios pour les différentes ambiances.
Chaque rapport d’humeur est ensuite comparée à une ligne de base, une « lente moyenne mobile exponentielle », que j’appelle le « tempérament du monde ».
L’ambiance qui a dévié plus éloignée de sa valeur de tempérament de base est réputé être l’humeur actuelle du monde.
La déviation est mesurée en pourcentage, ainsi, par exemple, si la peur change de représentant 5 % des tweets à 10 % puis c’est plus important que la joie changeant de 40 % à 45 % (ils sont tous deux un + 5 % en termes additifs, mais la peur a augmenté de 100 % en termes multiplicatifs.)
Enfin, les valeurs de tempérament du monde sont tordus légèrement à la lumière de ce nouveau résultat. Cela donne au système une auto réglage propriété afin que le tempérament du monde peut changer très lentement au fil du temps.
Ces valeurs dans WorldMood.pde servent à ajuster la sensibilité du système est à l’information.
- Voulez-vous à ramasser quand les gens sont heureux sur un résultat de sport ou de peur tout le temps ?
- Ou préférez vous pour seulement suivre les grands événements comme les catastrophes naturelles ou d’attaques terroristes ?
ajuster en conséquence...
#define emotionSmoothingFactor (0.1F)
#define moodSmoothingFactor (0.05f)
#define moderateMoodThreshold (2.0F)
#define extremeMoodThreshold (4.0F)
MOOD_TYPEWorldMood::ComputeCurrentMood() {/ / trouver le courant ratios floatsum = 0 ; pour (inti = 0; i < NUM_MOOD_TYPES; i ++) {somme += m_worldMoodCounts [i] ; } Si (somme < 1e-4f) {#ifdefDEBUG m_printer -> print ("inattendu total m_worldMoodCounts"); #endif / / ifdef DEBUG returnm_worldMood ; } pour (inti = 0; i < NUM_MOOD_TYPES; i ++) {m_worldMoodRatios [i] = m_worldMoodCounts [i] / somme ; } / / find le ratio qui a augmenté le plus, en proportion de sa moyenne mobile. Afin que, par exemple, une augmentation de 5 % à 10 % est plus importante qu’une augmentation de 50 % à 55 %. floatmaxIncrease = - 1.0f ; pour (inti = 0; i < NUM_MOOD_TYPES; i ++) {floatdifference = m_worldMoodRatios [i] - m_worldTemperamentRatios [i] ; Si (m_worldTemperamentRatios [i] < 1e-4f) {#ifdefDEBUG m_printer -> print ("inattendue m_worldTemperamentRatios"); #endif / / ifdef DEBUG continuer ; } différence / = m_worldTemperamentRatios [i] ; Si (différence > maxIncrease) {maxIncrease = différence ; m_worldMood = (MOOD_TYPE) i ; C’est maintenant l’humeur plus dominante du monde ! }} / / mise à jour le tempérament du monde, comme une moyenne mobile exponentielle de l’humeur. Cela permet à des ratios de base, c'est-à-dire les tempérament de monde, à évoluer lentement au fil du temps. Cela signifie, en effet, que la 2ème dérivée de l’humeur du monde wrt temps fait partie de l’actuelle calcuation humeur. ainsi, après un événement majeur induisant la colère, on peut voir quand les gens commencent à devenir moins en colère. somme = 0 ; pour (inti = 0; i < NUM_MOOD_TYPES; i ++) {si (m_worldTemperamentRatios [i] < = 0) {#ifdefDEBUG m_printer -> imprimer (« m_worldTemperamentRatios doit être initialisé à construction"); #endif / / #ifdef DEBUG m_worldTemperamentRatios [i] = m_worldMoodRatios [i] ; } else {constfloata = m_moodSmoothingFactor ; m_worldTemperamentRatios [i] = (m_worldTemperamentRatios [i] * (1.0f - un)) + (m_worldMoodRatios [i] * un) ; } m_worldTemperamentRatios += [i]; en résumé } Si (somme < 1e-4f) {#ifdefDEBUG m_printer -> print ("inattendue m_worldTemperamentRatios total total"); #endif / / #ifdef DEBUG returnm_worldMood ; } / / et enfin, renormalise, de garder la somme des ratios moyens mobiles comme 1.0f pour (inti = 0; i < NUM_MOOD_TYPES; i ++) {m_worldTemperamentRatios [i] * = 1.0f / sum ; #ifdefDEBUG m_printer -> print ("ratio de tempérament:") ; m_printer -> println(m_worldTemperamentRatios[i]) ; #endif} #ifdefDEBUG / / déboguer du code - vérifier la somme vaut 1. somme = 0 ; pour (inti = 0; i < NUM_MOOD_TYPES; i ++) {somme += m_worldTemperamentRatios [i] ; } Si (somme > 1.0f + 1e-4f || somme < 1.0f - 1e-4f) {m_printer -> println ("résultat inattendu renormalise") ; } #endif / / #ifdef DEBUG returnm_worldMood ; }