Each “memory” that makes it from sensory memory into long-term memory is stored as a group of RDF triples. Each memory is given a unique ID and a “half-life” - represented as the number of days after which the “strength” of the memory will halve. Strength is indicated by a score out of 1000. The current strength reflects the ease of recovery of the memory. The original strength is kept as a reference, and current strength can never drop below 0. No memory is deleted solely due to half-life expiry.
Given a 1d half-life a 1000 pt routine memory will reach 0 after 10 days. Fractional half-life values will give faster decays (eg 0.5d reduces by two steps every day).
This model has been adopted so that memory decay is only evaluated once per day – i.e. when the bot is “asleep”. Note that the time between decay assessments/”nights” may very with the environment or model – eg an avatar in Second Life following the 4hr SL solar cycle will sleep and reduce memories every 4 hours not 24.
For simplicity of implementation half-lives of >1d are taken as % chances of being reduced each night – eg a 100d half-life has 1% chance each night. This introduces an additional useful level of variability.
When first stored the memory will be given a strength of 1000 and a base half-life of 1d.
The half-life is then modified as follows:
If routine (ie same triple less time) shorten half-life (x0.5 per matched triple) If memory involves a new parcel lengthen half-life (x2) If memory involves a new sim lengthen half-life (x5) If memory involves a new avatar lengthen half-life (x2) If memory involves >10 avatars lengthen half-life (x5) If memory involves a new activity lengthen half-life (x5) If memory involves a significant place/av/activity (fm ontology) lengthen half-life (x5) If emotions slightly high lengthen half-life (x2) If emotions very high lengthen half-life (x5)
So a memory involving a new location at a group event with a significant activity and strong emotions (eg getting married in the Caribbean) would change half-life from 1d to 3000d (8y).
All factors are cumulative. Only x300 is needed to move a base memory to a half-life of 1y.
During sleep time the bot will scan through each memory and apply the reduction.
When a memory reaches zero the bot will either: if the memory had a long half-life (>1y) keep it at 0 but archive to a key memory store if the memory had a short half-life (<1y) archive to a faded memory store and have a chance of deletion (proportional to half-life) at every future half-life period
During each sleep period there is also a chance of memory corruption.
The bot will also scan memories to see if more general memories can be stored. Each memories of a similar event happening every day should be combined into a more generic memory with a start and stop date rather than being stored separately unless the memory is out of the ordinary. This could be done by finding triples which vary only by time.
The memory consolidation process should also be used to trigger “dreams”. An initial model might be to randomly choose a start triple for the dream based on a triple being deprecated, and then to make random jumps through triple associations to find people, location and actions – occurrences being based on their frequency of occurrence and valency within the memory.
Each time a memory is remembered it wins back half its lost score (eg memories at 0 return to 500).