Parameter settings for EpMem are set in firstload. Parameters for the agent (as described below) are set in the action of the initialization application rule.
It first counts to some number (max), triggering episodic storage at each tick (this is mode "recording"). Episodes include both an integer count (S1 ^symbolic.episode) as well as a digit-by-digit symbolic representation (S1 ^symbolic.converted.*). The symbolic representation re-uses a linked-list of identifier "digits" (S1 ^digit), each of which contains "word" and "number" WMEs. The number of places is designated by a number "size" (S1 ^size). For example, the number 144 with size 4 will have something like the following representation:
(<number> ^one <four> ^two <four> ^three <one> ^four <zero>)
Once all episodes have been stored, the agent proceeds to "testing" mode. This is a sequence of "max" queries to episodic memory. There are two testing modes (set by S1 ^test-mode). The default is "increment" where it will try to retrieve episode 1, then 2, then 3, ... max. The "single" testing mode will try to retrieve the same episode (S1 ^test-ep) max number of times.
The same process to convert a number to a sequence of digits is used in storage and retrieval, so all queries are expected to have perfect matches. There is a rule that will halt the agent if graph-match is ever imperfect. Because the agent queries for both the numeric and digit-by-digit representation, a graph-match can only occur if the correct episode is retrieved.
Retrieving a low numbered episode will cause EpMem surface match to traverse a linear number of episodes (relative to the total number of recorded episodes) before arriving at the desired episode. Thus, with a constant size, a test-ep of 1 will be the most expensive, test-ep equal to max will be the cheapest, and increment will be in the middle.
- Semantic memory
- Episodic memory
- Nate Derbinsky
- Any version of Soar with both episodic and semantic memory.