Stap 11: Programmeren 5: de wereld stemming Computing
Het licht van de stemming moet responsief genoeg om na te denken wat net is gebeurd in de wereld, maar het moet niet zo overdreven gevoelig zijn gevoelig voor lawaai, en ook niet te traag te laat bij het informeren van u van een grote wereld-evenement.
Het belangrijkste is om zorgvuldig te normaliseren en glad van de gegevens, en aan te passen van de drempels voor het geven van het juiste niveau van responsiviteit en alarm. (d.w.z. het moet knipperen wanneer een kop-nieuwsbericht
gebeurt en niet wanneer een TV-show begint, GMT)
Emotie, sfeer, en temperament
Ten eerste, de "werelds emotion" wordt berekend door te zoeken op twitter voor tweets met elk van de 7 stemming typen (liefde, blijdschap, verbazing, woede, angst, afgunst, triest).
Een maatregel van "tweets per minuut" wordt gebruikt voor het berekenen van de huidige emotie. Een hoger aantal tweets per minuut stelt dat meer mensen ondervinden momenteel die emotie.
Emoties zijn vluchtige, zodat deze kortstondige emotionele staten na verloop van tijd vloeiend gemaakt worden met behulp van een "snel exponentiële bewegende gemiddelde"
(Zie en.wikipedia.org/wiki/Moving_average#Exponential_moving_average)
Dit geeft ons ratio's voor de verschillende gemoedstoestanden.
De verhouding van elke stemming wordt vervolgens vergeleken met een base line, een "langzame exponentiële voortschrijdend gemiddelde", dat ik het "wereld temperament" noemen.
De stemming die is afgeweken die het verst van de basislijn temperament waarde wordt beschouwd als de huidige stemming van de wereld.
De afwijking wordt gemeten als een percentage, dus, bijvoorbeeld, als angst verandert van goed voor 5% van tweets tot 10%, dan is dit belangrijker dan vreugde veranderen van 40% naar 45% (ze zijn beide een + 5% in additieve termen, maar vrees stegen met 100% multiplicatieve qua.)
Tot slot, de wereld temperament waarden zijn getweaked iets in het licht van dit nieuwe resultaat. Dit geeft het systeem een eigenschap aan te passen zodat het temperament van de wereld heel langzaam in de tijd veranderen kan zelf.
Deze waarden in WorldMood.pde worden gebruikt om aan te passen hoe gevoelig het systeem is naar informatie.
- Wilt u het te halen wanneer mensen tevreden over het resultaat van een sport of bang over het weer zijn?
- Of wilt u liever alleen grote gebeurtenissen zoals natuurrampen of terroristische aanslagen bijhouden?
dienovereenkomstig aan te passen...
#define emotionSmoothingFactor (0.1f)
#define moodSmoothingFactor (0.05f)
#define moderateMoodThreshold (2.0f)
#define extremeMoodThreshold (4.0f)
MOOD_TYPEWorldMood::ComputeCurrentMood() {/ / vinden de current ratio's floatsum = 0; voor (inti = 0; ik < NUM_MOOD_TYPES; i ++) {som += m_worldMoodCounts [i]; } Als (som < 1e-4f) {#ifdefDEBUG m_printer -> afdrukken ("onverwachte totale m_worldMoodCounts"); #endif / / ifdef DEBUG returnm_worldMood; } voor (inti = 0; ik < NUM_MOOD_TYPES; i ++) {m_worldMoodRatios [i] = m_worldMoodCounts [i] / som; } / / vinden de verhouding die het meest, als een deel van haar voortschrijdend gemiddelde is gestegen. Zodat, bijvoorbeeld, een stijging van 5% tot 10% is belangrijker dan een verhoging van 50% tot 55 procent. floatmaxIncrease = - 1.0f; voor (inti = 0; ik < NUM_MOOD_TYPES; i ++) {floatdifference = m_worldMoodRatios [i] - m_worldTemperamentRatios [i]; Als (m_worldTemperamentRatios [i] < 1e-4f) {#ifdefDEBUG m_printer -> afdrukken ("onverwachte m_worldTemperamentRatios"); #endif / / ifdef DEBUG blijven; } verschil / = m_worldTemperamentRatios [i]; Als (verschil > maxIncrease) {maxIncrease = verschil; m_worldMood = (MOOD_TYPE) i; Dit is nu de meest dominante sfeer van de wereld! }} / / update van het temperament van de wereld, als een exponentiële voortschrijdend gemiddelde van de stemming. Hierdoor is de basislijn verhoudingen, d.w.z. wereld temperament, te langzaam veranderen na verloop van tijd. Dit betekent in de invloed, dat de 2e afgeleide van de stemming van de wereld wrt tijd deel van de huidige calcuation van de stemming uitmaakt. en dus, na een grote woede-inducerende evenement, kunnen we zien als mensen beginnen te minder boos. som = 0; voor (inti = 0; ik < NUM_MOOD_TYPES; i ++) {als (m_worldTemperamentRatios [i] < = 0) {#ifdefDEBUG m_printer -> afdrukken ("m_worldTemperamentRatios moet worden geïnitialiseerd op construction"); #endif / / #ifdef DEBUG m_worldTemperamentRatios [i] = m_worldMoodRatios [i]; } else {constfloata = m_moodSmoothingFactor; m_worldTemperamentRatios [i] = (m_worldTemperamentRatios [i] * (1.0f - een)) + (m_worldMoodRatios [i] * een); } som += m_worldTemperamentRatios [i]; } Als (som < 1e-4f) {#ifdefDEBUG m_printer -> afdrukken ("onverwachte totale m_worldTemperamentRatios totaal"); #endif / / #ifdef DEBUG returnm_worldMood; } / / en tenslotte renormalise, dat de som van de bewegende gemiddelde verhoudingen als 1.0f voor (inti = 0; ik < NUM_MOOD_TYPES; i ++) {m_worldTemperamentRatios [i] * = 1.0f / som; #ifdefDEBUG m_printer -> afdrukken ("temperament verhouding:"); m_printer -> println(m_worldTemperamentRatios[i]); #endif} #ifdefDEBUG / / debug code - Controleer som is 1. som = 0; voor (inti = 0; ik < NUM_MOOD_TYPES; i ++) {som += m_worldTemperamentRatios [i]; } Als (som > 1.0f + 1e-4f || som < 1.0f - 1e-4f) {m_printer -> println ("onverwachte renormalise resultaat"); } #endif / / #ifdef DEBUG returnm_worldMood; }