cybertools/brain
helmutm e9a9e00112 added basic transaction management
git-svn-id: svn://svn.cy55.de/Zope3/src/cybertools/trunk@1260 fd906abe-77d9-0310-91a1-e0d9ade77398
2006-07-09 19:38:17 +00:00
..
__init__.py added brain package, a simple experimental proof-of-concept neural network implementation 2006-07-07 18:04:30 +00:00
interfaces.py added basic transaction management 2006-07-09 19:38:17 +00:00
neuron.py added basic transaction management 2006-07-09 19:38:17 +00:00
README.txt added basic transaction management 2006-07-09 19:38:17 +00:00
state.py added basic transaction management 2006-07-09 19:38:17 +00:00
tests.py clean up state and transition stuff 2006-07-09 14:30:56 +00:00
transaction.py added basic transaction management 2006-07-09 19:38:17 +00:00

=============================================================
A proof-of-concept Project Aiming at a sort of Neural Network
=============================================================

  ($Id$)

Let's start with creating a few neurons and connecting them with synapses.

  >>> from cybertools.brain.neuron import Neuron, Synapsis
  >>> n01 = Neuron()
  >>> n02 = Neuron()

In the simple default implementation the neurons are connected automatically
when creating a synapsis:

  >>> s0102 = Synapsis(n01, n02)
  >>> n01.senders
  []
  >>> n01.receivers == [s0102]
  True
  >>> n01.getState()
  <State 0.0>
  >>> n02.getState()
  <State 0.0>

When we change the state of a neuron and notify it, all its receiver synapses
get triggered so that the receiver neurons' states are updated:

  >>> from cybertools.brain.state import State
  >>> n01.setState(State(1.0))
  >>> n01.getState()
  <State 1.0>
  >>> n01.notify()
  >>> n02.getState()
  <State 1.0>

To allow for concurrent (thread-safe) access to the brain all changes to
the neurons' states is under the control of a transaction. If we end the
current transaction all state changes will be forgotton:

  >>> from cybertools.brain.transaction import endTransaction
  >>> endTransaction()
  >>> n01.getState()
  <State 0.0>
  >>> n02.getState()
  <State 0.0>