Thanks Matt for your recent encouraging thoughts on the Intelligence Design Lab model. You surprised me on this one, I needed to catch up on:
The code is in VB6 only. I would love to port to another language but due to VB6 not having bit operators I had to use math to extract bits from Byte and Long variables. It’s best to rewrite the whole thing, in another language most suited for 3 axis arrays, which gets into many hexagonal math systems, while math I used might be improved upon, so it quickly became increasingly complicated.
Since it looks like you only need the easy trick to drawing vector maps (and I’m not sure what is best in other languages for hexagonal arrays) the code most importantly only needs to propagate a 2D wave. The way I most simply did it is make 6 Inputs and 6 Outputs of each hexagonal network “place” a six bit value, in which case the rule to apply to each nonzero place during each timestep is negate the input, to derive output.
Out6 = 63 - In6
When you keep setting and resetting all six places of a place you get a continuous wave, and it will look like radio station broadcasting outward from an antenna.
In the first timestep all six outputs of a place are set to 1, to send action potentials outward in all directions. In the next timestep the six neighboring places send action potentials further outward, but not back to the places that started the wave. You then have a nice clean signal pattern where places alternate back and forth when most pointing at an in-between angle, to average together for 12 direction sensitivity, from 6 signals. This is where there is an on average 7/12=58% signal ratio as noted in live rat signal ratios.
The fun part is then what happens after mapping out an environment using places that (do nothing therefore) adsorb for places to not bump into and avoid, or for echolocation (Out6=In6) reflect, then a wave is started by a place where what it needs is located (or like a bat from itself in which case wave may reflect back). Summing wave direction at each place makes a vector map to follow. After (repropagating) clearing the arrays the shortest distance would be the first waves to make it to the place the critter is located.
The only thing this cortical level navigation network needs to supply to the motor system is an angle for Left/Right to point towards, and for controlling high speed landing or stop a Forward/Reverse magnitude that depends on distance from place center. Rounding off places to a dead center for landing/stopping causes the map to shift a little each time feeder moves to a new place. To an animal the distances between places only need to be approximate, while once there it’s convenient to perceive an exact center, and in code needs one or else perceives the food to be somewhere else. Following waves from place to place through a network leads to a place that has an exact wave center, so it’s something that’s in the math and physics to for navigational purposes make the best of by remapping accordingly.
Most of my problem is not knowing where to begin. So I thought I should explain how it’s first a matter of (however you would most simply represent a cortical sheet) propagate a 2D radio/traveling wave. For you it might take minutes to paste something together. I can easily adapt to whatever you would use for language and code.