Atom and Predicate Activity Tables
With map formation as with OpenCogPrime:AttentionAllocation, a major role is played by a collection of special tables. Map encapsulation takes place, not by data mining directly on the OpenCogPrime:AtomTable, but by data mining on these special tables constructed from the AtomTable, specifically with efficiency of map mining in mind.
First, there is the Atom Utilization Table, which may be derived from the OpenCogPrime:SystemActivityTable. The Atom Utilization Table, in its most simple possible version, takes the form
|Time||Atom Handle H|
|T||…||(Effort spent on Atom H at time t, utility derived from atom H at time t)|
Atom Utilization Table
The calculation of "utility" values for this purpose must be done in a "local" way by MindAgents, rather than by a global calculation of the degree to which utilizing a certain Atom has led to the achievement of a certain system goal (this kind of global calculation would be better in principle, but it would require massive computational effort to calculate for every Atom in the system at frequent intervals). Each MindAgent needs to estimate how much utility it has obtained from a given Atom, as well as how much effort it has spent on this Atom, and report these numbers to the Atom Utilization Table.
The normalization of effort values is simple, since effort can be quantified in terms of time and space expended. Normalization of utility values is harder, as it is hard to define a common scale to span all the different MindAgents, which in some cases carry out very different sorts of operations. One reasonably "objective" approach is to assign each MindAgent an amount of "utility credit", at time T, equal to the amount of currency that the MindAgent has spent since it last disbursed its utility credits. It may then divide up its utility credit among the Atoms it has utilized. Other reasonable approaches may also be defined.
The use of utility and utility credit for Atoms and MindAgents is similar to the stimulus used in the Attention allocation system. There, MindAgents reward Atoms with stimulus to indicate that their short and long term importance should be increased. Merging utility and stimulus could be a crude initial way to implement utility in OpenCogPrime.
Note that there are many practical manifestations that the abstract notion of an ActivityTable may take. It could be an ordinary row-and-column style table, but that is not the only nor the most interesting possibility. An ActivityTable may also be effectively stored as a series of graphs corresponding to time intervals — one graph for each interval, consisting of HebbianLinks formed solely based on importance during that interval. In this case it is basically a set of graphs, which may be stored for instance in an AtomTable, perhaps with a special index.
Then there is the Procedure Activity Table, which records the inputs and outputs associated with procedures:
|Time||ProcedureNode Handle H|
|T||…||(Inputs to H, Outputs from H)|
Procedure Activity Table for MindAgent M
Data mining on these tables may be carried out by a variety of algorithms (see OpenCogPrime:MapMining) — the more advanced the algorithm, the fuller the transfer from the derived-hypergraph level to the concretely-implemented level. There is a tradeoff here similar to that with attention allocation — if too much time is spent studying the derived hypergraph, then there will not be any interesting cognitive dynamics going on anymore because other cognitive processes get no resources, so the map encapsulation process will fail because there is nothing to study!
These same tables may be used in the attention allocation process, for assigning of MindAgent-specific OpenCogPrime:AttentionValues to Atoms.