The AI model behind Ancient Brain

Ancient Brain was developed out of ideas in Artificial Intelligence (AI).

The basic idea is that problems are defined as "Worlds" and solutions to the problems are defined as "Minds". The World defines a "problem" (for example, a 3-D virtual world, or a game of chess, or any problem that can be defined in software). The Mind defines an attempted "solution" to that problem. You "run" a Mind in a World to see how it does. Minds compete to solve the problem and their performance is shown on the World "scoreboard".

Worlds may be driven by a Mind, or may be driven by a human user. In summary, users may:

This site aims to become a global repository of problems and solutions of many different types: research problems and solutions, teaching practicals and answers, company demos and user-interactive games.





The core algorithm: World with a Mind

The core algorithm for a World with a Mind is to repeatedly:
  1. Send a "Get State" message to the World to get the current state of the world, a description of the world right now. The Mind may only be allowed to see part of the entire World.
  2. Send "Get Action" message to the Mind, with the current state of the world as argument, to get the Mind's suggestion for what action to take in this state.
  3. Send "Take Action" message to the World, with that action as argument.
  4. Repeat the loop.
In pseudo-code:

 
repeat
{ 
  state = world.getState();
  action = mind.getAction ( state );
  world.takeAction ( action );
}	

The core algorithm: World with no Mind

The core algorithm for a World with no Mind is to repeatedly:
  1. Send a "Next Step" message to the World. This acts as a clock. The World knows it will be rendered to screen after each step.
  2. Repeat the loop.
In pseudo-code:

 
repeat
{
  world.nextStep();	
}	
See the World and Mind docs.




MindM - Minds calling other Minds

The separation of Mind from World means that a Mind may call another Mind to see what action it would take. It may execute the other Mind's suggested action, or just ignore it.

In pseudo-code:

 
mind.getAction ( state )
{
  if ( some conditions )
    return ( my own idea for an action )
  else
    return ( otherMind.getAction ( state ) ) 
    // do whatever OtherMind does for this state
}	

In exact JavaScript, see How to call another Mind.

The architecture encourages this re-use of other people's Minds. The aim is to provide a platform for the creation of large, hybrid, "society of mind" systems, with the main Mind calling other Minds from many different authors. A Mind that calls another Mind is called a MindM.


A MindM may not provide any actions of its own

Here is an example of a MindM that does not provide any actions of its own.

Imagine that the best performing Minds on a World are topMind and secondMind. But we notice that in some states, secondMind performs better than topMind (just in most states it performs worse). We can make a new Mind as follows.

In pseudo-code:

 
mind.getAction ( state )
{
  if ( some condition )
   return ( secondMind.getAction ( state ) )     
  else
   return ( topMind.getAction ( state ) )      
}	

This Mind may in fact now perform better than either of the top two Minds, without providing any action of its own.


MindAS - Minds calling multiple Minds

A general way of calling multiple Minds is to poll Minds for suggested actions, and then decide which one of the Minds to "obey" (execute its action). Each time step, the main Mind sends the state to n other Minds, and asks them for suggestions. It then picks one to execute. This is called a MindAS (AS standing for "Action Selection").


The AI is in the "Action Selection"

The reader so far may wonder where the "AI" is. The answer is that the AI is in the "Action Selection" algorithms. Complex "Minds" are envisaged as consisting of "societies" or "economies" of "Sub-Minds", with many different suggestions for what to do next. Actions that are taken will emerge internally from competition among parts of the Mind.

We will not detail here the many ideas in AI (and Cognitive Science) along these lines. Our aim was to build a global platform to allow for experimentation in such ideas.


Large-scale multi-author AI

The AI-related inspiration for this work was to enable the construction of large-scale, collaborative, hybrid, multi-author, "society of mind" systems in AI. We imagine such systems having many sub-Minds, using different algorithms, and written by different authors, calling each other in levels below a top-level Mind. It is hoped that experiments in such AI systems will emerge as this site expands.


Physically distributed Mind

One idea in this AI research was that the Mind could be physically distributed around the world, with parts of it in different locations. This is possible with Ancient Brain. See including remote JS.

Mind can survive damage

Another idea in this AI research was that the "society of mind" could survive the loss or malfunction of multiple sub-Minds. This is possible with Ancient Brain. See How to call another Mind, where we use an asynchronous call, and the rest of the code runs with whatever Minds have returned so far. So the parent Mind is robust to "brain damage". The loss of a sub-Mind does not prevent the parent Mind working in some way.