Talk DANA, Distributed (Asynchronous) Numerical & Adaptive computing framework

 Presented by Nicolas Rougier in on 2010/07/11 from 14:30 to 14:45 in room Dussane
Abstract

DANA (Distributed (asynchronous) Numerical and Adaptive computing) is a python computing framework based on numpy and scipy libraries whose primary goals relate to computational neuroscience and artificial neural networks. However, this framework can be used in several different areas like physic simulations, cellular automata or image processing.

The computational paradigm supporting the DANA framework is grounded on the notion of a unit that is a set of arbitrary values that can vary along time under the influence of other units and learning. Each unit can be linked to any other unit (including itself) using a weighted link and a group is a structured set of such homogeneous units.

For example the game of life can be written very simply as follow:

```>>> from dana import *
>>> G = (n,n)*Unit(u'''
V = np.maximum(0,1.0-(N<1.5)-(N>3.5)-(N<2.5)*(1-V)) : bool
N = self.V*np.array([[1, 1, 1], \
[1, 0, 1], \
[1, 1, 1]]) : sparse''')
```

G is now a group of (n,n) units, each of them having a single boolean value V whose value is computed according to V equation and where N designates a link from G to G (with specified connection kernel).

To simulate the game of life, one can then write:

```>>> G.setup()
>>> G.V = rnd.randint(0,2,G.shape)
>>> for i in range(100):
...     G.run()
```

In the example above, the link is static, but link could have also been made adaptive by defining the equation dN/dt. The dana framework offers a set of core objects to design and run such models with the possibilty to specify model equations (differentials or regular) links, link equations and to run them iteratively.