CIRCUIT CONFIGURATION

Components

image

Components are the fundamental building blocks of circuits, representing stateful operations on sparse sets or multisets.

See also: https://creatingintelligence.org/#circuits

List of all circuit components

Component Functionality
input Gateway to the circuit’s function interface. Supports encoder plugins.
output Gateway to the circuit’s function interface. Supports decoder plugins.
circuit Embeds a circuit within a component.
delay Delays incoming signals by one cycle. Integrates them temporally based on update rules.
noise Generates pseudo-random sparse sets.
auto Auto-associative memory component.
associator Hetero-associative memory for supervised learning or state transition memory.
predictor Hetero-associative memory for predictive learning.
heteroencoder Hetero-associative memory for unsupervised learning and pattern separation.
temporal Temporal-associative memory that maps temporal states to incoming inputs.

Details and properties

  • Data flow components, such as delay, control the temporal integration of data over multiple timesteps.
  • Memory components, such as auto or temporal, encapsulate a topological associative memory instance.
  • Excitatory signals are processed as positive integers, whereas inhibitory signals are processed as negative integers.
  • Circuit components generally maintain a state across multiple execution cycles, whereas pathways are strictly stateless.
  • The functionality of components can be extended via a standardized plugin mechanism.
  • This framework supports the seamless integration of user-defined, custom components and plugins.
  • Certain components may receive and send multiple signal partitions (block coding).
  • Components are visualized as circles (data flow components) or squares (memory components) in circuit schematics.


Property Description
send output slots, as a list of integers
receive list of input slots or tagged pathways
plugin extension module
label user-defined vertex label in circuit schematics
shape vertex shape (“square”, “circle”, or “none”)
fill background color (palette index 0 to 15)
size font size, given in points
color font color (palette index 0 to 15)
$comment notes for humans, ignored by the framework

Sending and receiving data

A pathway is defined via a slot number that occurs in one component’s send parameters and in another (or the same) component’s receive parameter. The choice of slot numbers is arbitrary. The same slot can be received by multiple components (multi-casting). However, the same slot number must not occur in multiple send parameters.

{ "hyperparameters": {"default": [1000, 10]},
  "dataflow": [
    {"component": "input", "send": [1]},
    {"component": "output", "receive": [1]}
  ]}

image

Lists of slot numbers denote disjoint blocks. Here the delay component receives and sends two disjoint set partitions:

{ "hyperparameters": {"default": [1000, 10]},
  "dataflow": [
    {"component": "input", "send": [1]},
    {"component": "input", "send": [2]},
    {"component": "delay", "send": [11, 12], "receive": [1, 2]},
    {"component": "output", "receive": [11]},
    {"component": "output", "receive": [12]}
  ]}

image

receive parameters wrapped in a list denotes signal merging:

{ "hyperparameters": {"default": [1000, 10]},
  "dataflow": [
    {"component": "input", "send": [1]},
    {"component": "input", "send": [2]},
    {"component": "delay", "send": [11], "receive": [[1, 2]]},
    {"component": "output", "receive": [11]}
  ]}

image

A circuit that combines pathway merging and block coding:

{ "hyperparameters": {"default": [1000, 10]},
  "dataflow": [
    {"component": "input", "send": [1], "label": "in1"},
    {"component": "input", "send": [2], "label": "in2"},
    {"component": "delay", "send": [11, 12], "receive": [1, 2]},
    {"component": "output", "receive": [11], "label": "out1"},
    {"component": "output", "receive": [[12, 1]], "label": "out2"}
  ]}

image

A simple feedback system, routing the component’s output slot directly back into its input:

{ "hyperparameters": {"default": [1000, 10]},
  "dataflow": [
    {"component": "input", "send": [1]},
    {"component": "delay", "send": [11], "receive": [[1,11]], "rate_limit": 1},
    {"component": "output", "receive": [11]}
  ]}

image

Encoders, decoders, and update rules

Plugins extend the functionality of base circuit components while inheriting their properties and hyperparameters. Update rule plugins govern state updates in auto, delay, and temporal components to control temporal integration and associative behavior. The input and output components can be extended with encoder and decoder plugins, respectively.

Plugin Type Implementations
Encoders & decoders codec maps symbolic tokens to random SHRs using a globally shared lexicon based on auto-associative pattern matching. category encodes integers 0 to K-1 as non-overlapping SHRs. binning clusters similar SDRs into categorized bins based on matching thresholds.
Vector encoders vectorencoder projects dense vectors into hyperdimensional space using sparse binary matrices and kWTA. flyhash applies the classic flyhash algorithm to achieve similar SDR mapping for real-valued vectors.
Base update rules replacement entirely substitutes the previous state with new data, bypassing capacity limits. augmentation computes the multiset aggregation of signals, which converges incrementally to a stable state equivalent to a deduplicated set union.
Subtractive rules residual removes the retrieved pattern from the memory’s state to leave only novel elements for anomaly detection. difference applies a symmetric multiset difference to enable generative retrieval behavior. complement removes the current incoming signal from the state entirely.
Filtering & sequence rules coincidence retains only matching elements between query and retrieved patterns. permutation replaces the temporal state with its permutation before augmenting it with current signals, thereby preserving sequence order in temporal tracking.

In the following example, the input component loads the codec plugin, the delay component is extended via the augmentation update rule plugin, and the output component uses the same encoder/decoder as the input.

{ "hyperparameters": {"default": [1000, 10]},
  "dataflow": [
    {"component": "input", "plugin": "codec", "send": [1]},
    {"component": "delay", "plugin": "augmentation", "send": [11], 
        "receive": [1], "capacity": 1},
    {"component": "output", "plugin": "codec", "receive": [11]}
  ]}

image

As shown in the example above, plugins typically modify the visual appearance of components in circuit schematics.

Component visualization

In circuit schematics, you can customize individual components’ label, color, fill, and size properties:

{ "hyperparameters": {"default": [1000, 10]},
  "dataflow": [
    {"component": "input", "send": [1], 
        "label": "A", "color": 11, "size": 20},
    {"component": "output", "receive": [1], 
        "label": "B", "fill": 15, "size": 12}
  ]}

image