Andromeda blog
Network computing: components

  1. Sparse signals - 21 Feb 2020
  2. Complex numbers - 2 Jan 2020
  3. Signal spaces - 26 Dec 2019
  4. 2-threshold inverter (hardware, numerical response) - 20 Nov 2019
  5. 2-threshold inverter (hardware, frequency response) - 11 Nov 2019
  6. 2-threshold inverter (hardware, impulse response) - 2 Nov 2019
  7. 2-threshold inverter (software) - 4 Oct 2019
  8. Electronics - 19 Sept 2019
  9. Introduction - 1 Sept 2019

Introduction - 1 Sept 2019

This project is yet another attempt to find a minimum spanning set of simple computational elements that are sufficient for most interesting and/or useful kinds of network computing, which in turn is expected to yield a superset of the kind of computation that can be performed on a typical Turing-type computer, such as this Linux machine and C compiler. Ideally, this particular "holy grail" would demonstrate how "almost all" programs could then be reduced to a network, partial network, or sub-network consisting only of these elements and their data contents, irrespective of the physical substrate or implementation.

Previous software and hardware work has concentrated on elliptical states, hermitian operators, and unitary operators as potential spaces of minimal elements for computation. In this case the primary data type is 2-dimensional, and fundamental operations on that data type are represented by 3d rotations of the computational sphere. Although this process works well in both software and analog electronics, it is somewhat abstract, and it might not be physically realistic in nature (e.g. real systems seem to rely on discrete rather than continuous signals, and Mother Nature has no electrical engineers standing by to swap components and "tune" the system until it works properly). The current attempt is somewhat simpler, more concrete, and might be more accurate in terms of what actually exists and how it works in natural systems.

This project consists of both software and hardware work. One goal is to create a prototype of fast analog hardware using these principles from standard electronic components such as resistors, capacitors, and operational amplifiers, which are then optically interfaced to the Linux computer using digital microcontroller boards (e.g. Atmel AVR). Future hardware implementations might include field programmable gate arrays (FPGAs) for elements that can be further reduced to just "lookup table and latch" logic.

Element types consist of:

The current data type is a simple stream of real or binary values. Previous work has used discrete data points consisting of two complex numbers per point. To be physically and operationally realistic, data values should ideally be 2-dimensional (or more) rather than 1-dimensional. Examples of such systems include simultaneous parallel data channels (multiple wires, and other components, per datum), or optical data consisting of linearly or elliptically polarized pulses. The generic data type is a vector of complex numbers.

Although internodes (red, below) can be distributed anywhere in 3d space, they are usually distributed pseudo-uniformly on a 2d surface, such that no two internodes are closer than a certain minimum distance. Nodes (yellow) are also distributed pseudo-uniformly, but at a number density less than that of internodes (sometimes considerably less, like 1 : 1000):

Positive inputs to nodes are shown in green, negative inputs in blue, and outputs in light gray. Every internode is connected to two closest nodes (which might be the same). All signals between nodes pass through an internode:

Networks can be created in any 3d shape or topology. But, the networks I will study are, in general, 2-dimensional and confined either to a plane or to the surface of a sphere:

Before this, however, networks consisting of one, or only a few, elements must be considered. The following is a network consisting of just a single internode, hanging alone in 3d space:

An internode consists of two sub-components: an accumulating threshold unit and a trigger unit. A threshold unit contains a threshold threshold (e.g. in volts), a threshold value (always non-negative) that accumulates its input, and a threshold drain. The threshold drain indicates how much the threshold value falls (or rises, for a negative drain) with the passage of time (e.g. in volts/second). If the threshold value is at or above the threshold threshold, the output of the unit is 1, otherwise it is 0. Thus, the threshold unit converts a continuous input (e.g. anywhere between 0 and +5 volts) to a binary output (only 0 or +5 V).

This is a 3d initialization space: {threshold, value, drain}. If the unit is initialized with the threshold value < threshold threshold, the unit is off (output = 0) and stays that way forever. If the initial threshold value ≥ threshold threshold, the unit is on (output = 1), and it stays that way until the drain has reduced the value to below the threshold, and then the unit turns off (output = 0) and stays that way. So, for any 3d point in the initialization space, the output is either 0 always, or it is 1 for a finite length of time, until it also becomes 0.

A trigger unit contains a delay that acts as a timer, plus a time remaining on that timer, which could be 0. If the remaining time is 0, and the input is non-zero (the input is usually the output of a threshold unit), the trigger "fires" a binary pulse of some magnitude, and then starts the timer with the remaining time = delay. During this delay, which acts to "recharge" the trigger, all inputs will be ignored. So even if the threshold unit is on, the trigger unit will ignore this until its delay timer runs out (and the remaining time = 0 again), and then it will fire. Thus, the trigger unit has a binary input and a binary output.

This is a 2d initialization space: {delay, remaining}. If the input to the unit is 0, its output will also always be 0. If the input is non-zero, and the remaining time is 0, the unit will trigger and output a pulse. The delay timer will be set, and the output will be 0 for that time length. If, at the end of the delay, the input is still non-zero, the unit will trigger again, and then delay. Therefore, for a constant non-zero input, the output of the unit is a sequence of pulses equally-spaced {delay} seconds apart. The initial value of the remaining time determines the phase of these pulses.

So, the overall initialization space for the internode (= threshold unit + trigger unit) is 5-dimensional. And this is just a single component: no other internodes, nodes, connections, or sources in the network! The corresponding spaces for these elements are at least as large, so we can expect the dimensionality of complete networks to be on the order of ≥ 5 * N, where N is the number of elements, which could be hundreds to billions.

Example: single internode and initial values described by input file

Here is a file describing a "network" consisting of a single internode. The threshold unit of the internode is initialized with a value larger than its threshold, so that the unit is intiailly on (output = 1). The trigger is initially ready to fire (remaining time = 0) and does so. While the threshold value is larger than the threshold threshold, this unit remains on. Therefore, the trigger will repeatedly fire whenever its delay timer reaches 0. The overall output is then a series of pulses with period = delay, lasting until the threshold value is reduced by the threshold drain to below the threshold threshold.

In the plots below, the x axis is time (100 microseconds per small tick, 1 millisecond per large tick) and the y axis is arbitrary units (such as volts or millivolts):

Here is a printout of the values shown above. If the initial value is increased, the output lasts longer:

And if the initial value is decreased, the output is shorter in duration:

Note that the same effects could be obtained if either the threshold threshold, or the threshold drain, were altered.

If the initial trigger remaining time is changed, the output phase is changed:

Overall, we see that the output space of the internode is 3-dimensional: {duration, period, phase}. The internode therefore maps a 5d input space to a 3d output space.

2d example: threshold initial value vs. trigger delay

Here is a file describing a series of 20 runs of the previous network, in which the initial threshold value and the trigger delay are varied. The plot below shows a composite of the output of all runs. In this case, the 2d {value, delay} space yields trains of output pulses which vary in duration and period. The first row of the output is always zero, because the initial threshold value is below the threshold threshold (yellow and blue lines):

(Click for full-size image)


Sources are components generating arbitrary signals. They are used primarily as inputs to other components, for example, to test their impulse, step, and frequency responses. Due to their variability, sources greatly increase the dimensionality of both the internode input and output spaces.

Example: impulse source

Here is a file describing 6 runs of the single internode network where the input to the threshold unit comes from an impulse source. The output is 0 until the height of the impulse (and therefore of the threshold value) is greater than the threshold threshold. The output is a finite series of pulses. According to signal theory, the general output from a component, for any arbitrary input, is a superposition of impulse responses at different phases, one for each sample of the input:

(Click for full-size image)

Example: step source

Here is a file describing 8 runs of the single internode network where the input to the threshold unit comes from a step source. The threshold value is 0 until the height of the step is greater than the threshold drain, and then it begins to rise. When the threshold value reaches the threshold threshold, the output of pulses begins:

(Click for full-size image)

2d example: periodic source (discrete)

Here is a file describing 25 runs of the single internode where the input is a square wave of different periods and phases. The average of the input is equal to the threshold drain. When the input is above the drain, the threshold value rises, and when the input is below the drain, the threshold value falls. The trigger delay time has also been reduced to produce faster pulses. Note that the phase affects both the position and the number of output pulses:

(Click for full-size image)

2d example: periodic source (continuous)

The threshold unit can also accept continuous values as input (e.g. a sinusoidal function). In this case, the trigger output of pulses is similar to the discrete case above. According to signal theory, the output of a component is a superposition of the outputs for each sine and cosine term in the input's Fourier spectrum. Continuous values, their averages, and their differences, will be used primarily as inputs to nodes:

(Click for full-size image)

2d example: periodic source (pulsed)

Here is a file describing 25 runs of the single internode where the input is a series of pulses of different magnitudes and periods. The total time has been doubled to see more output. If the trend in the input is greater than the threshold drain, the threshold unit will eventually saturate ON (1), while if the trend in the input is less than the threshold drain, the threshold unit will eventually saturate OFF (0). Between these extremes, the output is somewhat complicated:

(Click for full-size image)

These few examples should give you an idea of the wide range of behaviour of the internode threshold-trigger combination. Idealy, a systematic study of outputs vs. inputs would fully characterise this component. However, so far all analyses have been completely deterministic. Slight random variations in the input, in terms of magnitude or timing, are expected to have additional effects, especially when the threshold value is near to the threshold threshold. Furthermore, this mechanism must be implemented and tested in analog electronics, and compared to the software results for similar inputs.

Next time: electronics.

©Sky Coyote 2019-2020