From time to time I suffer from intense bouts of insomnia. Tonight it seems I cannot get my Fish Tank project off my mind.
Fish Tank is a genetic learning algorythem library written in NodeJS that started as a hackathon project. I started out by teaching it how to play tic tac toe then letting the "Fish" have at it.
It is far from complete; I am still playing with how to make the DNA strands for children generate based on the parents.
I have been doing a lot of research(on youtube) on how to accomplish this. I have seen many other hackerish approaches to this problem. The funniest being this guys video on "Poly World", he has no idea that his green blips and blurps on the screen make no sense to the averedge joe but he is really, really, excited about it. Also it seems there is a heckler in the crowd.
I have spent a little time reflecting on what I have learned and there are a couple of things that limit these AI projects.
The AI entities created in the examples I saw really have no way of communicating with each other. In some the fish have a color that communicates their heritage some what, but that is it.
Now I am not proposing we teach them english but rather the ability to create various tones at various disciples. The disciples would merely represent a radius. In theory the tones would be given a range and anything outside of a standard deviation from the median would triggers some type of panic and flight or flight behavior.
Eventually with enough nodes in the neural pathway you might see combinations of tones used to communicate. This is where this logic somewhat comes unraveled in my mind because language is learned, not programmed in the DNA.
In this video, one of my favorite videos on the subject, the fish as a group eventually grow to attack anyone that attacks them. They form a coalition of sorts the first form of collaboration. Eventually they also come up with a method for lining up and each attacking an enemy one after the other then each grabbing some of the food. This is a start though it is not clear if the fish are aware of the resource sharing or even the efficiency of attacking.
The real test will be if a fish ever evolves charity and starts to share resources when it has extra or the ability to invest creating a real virtual economy.
A DNA strand does not make a brain
This was a huge revelation I had tonight in yoga. We were asked to focus only on our body, I of course went to visualizing my own brain and how it solved some of these learning problems.
It was then that I realized the obvious: My mind was not made up of one DNA strand as so many of these experiments had done. It was made up of many cells that use the DNA strand as a blueprint. Cells that live, die off, and replicate.
On A Cellular level:
We are called organisms, "many trillions of cells grouped into specialized tissues and organs". Perhaps our flaw is to be thinking of the fish in the various fish tank type machine learning projects as an organism as a whole.
Life started with single celled organisms first. How do cells communicate? I doubt it was with sound at first. How do they replicate? They split in two and use the DNA to as a blue print(I remember learning this form the movie Jurassic Park).
If I want to simulate true neural plasticity and the ability to learn on an individual fish by fish level then I would need to look at it from a celluar level.
Communication Part 2:
How do cells communicate? I actually don't know, I assume chemical. It will be one of the first questions I need to answer to continue down this path(I am starting to get sleepy while writing this. That is a good thing).
I may not know exactly but I can identify input nodes that a cell might use:
* Proximity to other cells * Cell temperature * Maybe a resource a cell gathers or creates then releases that would attract or repel other cells.
Which leads us to...
Collaboration Part 2:
Some cells might gather a resource and emit it at other times causing reaction in the other cells. Think of it as a neural synapse firing electricity or a gland emitting endorphins.
Some cells might gather a resource and convert it to another type of resource like oxygen to carbon dioxide.
Finally if we are really lucky some cells might just evolve to transport resources from one place to another.
I think the toughest part of this will be writing a simulated table of elements that different cells can react differently to. Most examples I see just use "food". We would need to have more types of resources than just that and more actions than just consuming.
Random thought as I fall back into sleep mode: It occurs to me that most simulations I have observed do not poop.
A note about the physics engine:
I could assign different cells properties like:
* Sticky - To hold other cells together * Elastic - To create a makeshift muscle strand * Hard - To create a shell
The elasticity one would probably need a trigger. When it detects trace amounts of one of the aforementioned resources being emitted it would fire causing a contraction that might cause movement in other cells.
The fitness function:
This is interesting because you would have to apply the fitness function to a group of cells, not just a single cell(previously referred to as a fish). There would have to be some way to determine which cells were interconnected.
I suppose I could look at the sticky cells and see which cells they were stuck to and see which sticky cells were attached to those and so on. I did similar calculations for an edge detection algorythem I wrote.
One we had a cell cluster we could then apply the fitness function to that.
Because of this approach it would most likely take a lot longer to reach a level where an organism could be functional.
I also doubt I am the only one to have come to these revelations. Someone somewhere has probably come to these conclusions. My question is have the been able to successfully execute it and if so why have I not seen it?
If I get some extra time I may wire up more comprehensive solution and try to make it public so you can observe my fish in action. With that said I am going to try and go back to sleep. Good night.