Abdelrahman Ahmed edited this page Aug 15, 2017 · 14 revisions

What is Project AGI?

Project AGI is a research programme for Artificial General Intelligence. We are investigating methods in the machine learning, neuroscience and artificial intelligence literature that we believe will help us understand how general intelligence works.

Our approach to AGI, our research interests and other high level info is documented more thoroughly on our website.

This document will focus on the code we share.

Source Code

We have written a lot of research-grade software. Note that our current objective is research, not product: This is not software you can plug and play. There are no guarantees that it will work. By definition, since we are still working on it, it does not work yet.

We often reproduce algorithms and results from academic papers. Implementations of these algorithms are included in our code. In general, we do not use third-party libraries (such as TensorFlow or Caffe) for these algorithms. This is simply because we want to fully test our understanding and the completeness of publications. Don't expect our implementations to be faster or more robust than bulletproof libraries of production quality code!

Thanks to all the academics who have helped us reproduce their algorithms in our code. Your help is very much appreciated, and this helps to ensure that academic research is reproducible.

Software Architecture

Our software has an algorithmic component, which is currently mostly Java. We also have a tool written which we use to automate and systematise experiments.

The software is written to facilitate research, with emphasis on:

  • Reproducibility of results, by capturing all parameters and inputs

  • Easy debugging of algorithms, by retrospectively being able to build graphical interfaces to explore data

  • Fast development of new algorithm variants, and fast understanding of their limitations

The idea is that the framework is compatible with other machine learning libraries, and our core algorithms are an internal component. In total we can easily compare existing results with our own methods.

Java stuff (/code/core)

The Java code (package io.agi) is divided into 2 sub-packages:

  • core: This package contains algorithm implementations

  • framework: We call this the Experimental Framework This package contains code to execute algorithms in a systematic and reproducible way as a distributed graph of compute nodes. These nodes have a restful API.

Graphical User Interface (/code/www)

We also provide a basic HTML/js user interface to facilitate exploring and understanding the Java code, particular via the experimental framework classes.

Python stuff

The Python tool is managed in a separate repository run-framework.

It makes it easy to run experiments, locally or remotely on physical or AWS infrastructure, conduct parameter sweeps, export and upload the results and more.


There is also a set of experiment folders with all the necessary files to run them at experiment-definitions.


  • The algorithm implementations are separated from the framework because the latter imposes a performance overhead. We can avoid that problem by running the algorithms without the framework at any time.

  • We use log4j for logging

  • We use Maven for package dependencies

  • The experimental framework layer in Java implements a persistence interface to ensure that algorithms are stateless between incremental updates, excluding data stored in web-accessible managed structures (the Data class in Java). This is to ensure reproducibility and allows us to scale to multiple computer nodes without changing algorithm code.

  • By default we use JDBC and in-memory persistence (faster - serialization is a bottleneck).

  • We try to minimize dependencies to make it easier for others to set up the development environment

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.