Introduction to Atlas

Atlas is a project of mine that combines artificial intelligence and evolution, by simulating a virtual world with organisms that move around, feed, learn, and evolve.

The inspiration was this Google Talk given by Virgil Griffith:

Virgil said that he believes some kind of strong AI can be achieved by combining evolution and artificial intelligence, but I’m more interested in the following for now:

  • Development of species
  • Division of work (inter species behaviors)
  • Studying how complexity can emerge a from relatively simple system
  • Adaptation

Polyworld probably got good results on all of those points, but I’d really like to recreate it on my own, and inject some ideas I believe would be beneficial for simulators like these, mainly multicellular organisms and a neural network of my own design. I’ll will add some physics in there, but I was also interested in the technical part of the redesign.

Polyworld was created using Qt and OpenGL, all meant to be ran on the same computer, I presume. I approached this design problem with a different paradigm. I wanted to have one computer that could run the simulation (the server), and not have that computer bother about rendering, or, at least, not have that part of the application bother about it. So, I decided to split the application into three parts: the HTTP/TCP server, the simulation part, and the client.

This is a visualization of the basic design, which I will then explain:

atlasV

Communication

  • implemented in Node.js with Socket.io The communication part of the server is responsible for two things: serve the HTML page in which the simulation is going to render, and communicate with the client about the simulation(s). Basically, a client (“a webpage”) can subscribe to any of the multiple running simulations, and the server is responsible for pushing updates about the worlds/simulations to the clients.

Client

  • implemented in HTML5 The client is essentially a web page with a canvas element, that uses the aforementioned Socket.io to either issue commands to the server or to receive world updates. Nothing exceptional, except it uses my Irenic engine to render the world.

Simulation

  • implemented in Javascript (Node.js) This is the actual meat of the project. I’m trying to decouple it from the server as much as I can, so I could maybe implement some parts in pure C, but for now it’s still all Javascript, which is fast enough, and its expressive power is just what I need for these sorts of tasks. The main class here is the “World”, which houses all creepers, regular blocks, food, and updates the physics.

I’ll start writing about the specifics as soon as I can, it really helps me in thinking and solidifying my ideas.

5 thoughts on “Introduction to Atlas

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">