Modeling of behavior of biological creatures gives us an important inspiration to building artificial systems - mainly robots. After many years of research in this area, it seems that details of biological hardware have significant importance and any trial to approach the modeling by classic algorithms is doomed to fail. On the other hand the belief that biological hardware implements a particular model of symbolic computation is still not forgotten. Just let us concern analogy of relationship between electrical components of computer and its ability to interpret instructions of its software. A similar relation could be assumed between neurons (or any kind of sub-symbolic computation) and the mentioned (symbolic) model. For instance, imagine that people from a primitive tribe living in isolation find a computer forgotten by tourists in their habitation. After many years of investigation, their witchmen – may be – will reveal some electrical principles, but perhaps they will not comprehend how its behavior emerges from these principles. They must fail due to the lack of the model which electrical components of the computer do not exhibit, though implement.
Following this idea, it has meaning to look for architecture suitable for modeling biological systems which is close to standard – symbolic - programming. However, its selection should be based on knowledge of the biological hardware and probably will be far from monolithic algorithms regardless strength of ideas they implement. One proposal for such kind of modeling is provided by Agent-Space architecture. It assumes that the most important features of such model are:
<![if !supportLists]>- <![endif]>modularity based on decentralization and massive parallelism
<![if !supportLists]>- <![endif]>real-time operation
From organizational point of view, the architecture follows Minsky’s conception of mind as a set of agents (later Minsky refers them as resources) where the proper behavior of the whole system is achieved by proper activities of individual agents at the proper instants of time (Figure 1). Behavior of each agent is relatively simple and can be specified by developer, while the overall behavior of the system is complex and emerges from mutual interaction among agents.
<![if !vml]><![endif]> Figure 1. Mind as a set of agents
Each agent has own control (it has potential to be independent from other agents) and performs own code, running in endless cycle (Figure 2). Each course through the loop is dedicated for computing of appropriate actions upon perception of the current situation of the agent and other information stored in its internal state. It is possible to specify how each agent contributes to the overall behavior - in other words what is his mission within the system.
Figure 2. Agent and its schematic representation
The major part of agent perception and action resides in mutual data exchange among agents. This communication put agents together into a system and is provided by an advanced blackboard called space (Figure 3). Space can contain named data of various forms (called blocks) and agents are able to read, write or delete them. Agent has to know name and form of blocks it manipulates. In special case, it is enough to know a mask to manipulate more blocks which names are matching the mask.
Figure 3. Communication through space and its schematic representation
Several details are important to enable modeling with the architecture as easy as possible. Mainly there is no special operation for creation of a block in space - blocks are physically created by the first write operation. However, they can be read even before this moment, throwing no exception in the system: for such case agents ought to define a default value for each read operation which is returned as a result if the read block has contained no value yet. Blocks can contain only one value; thus the value written by one write operation is overwritten by the next write operation. The value is overwritten regardless an agent has read the value or not. Thus when a producer writes a next value, before the former value is read by a consumer, the former value is simply lost. From the consumer point of view, it has never been presented in the block. Thus when the consumer is not quick enough to undertake all values generated by the producer, the values are implicitly sampled (Figure 4). Due to the sampling it is not possible to overwhelm the system. It is also easy to combine slow and fast modules - typical problem for traditional architectures where speed of the whole data processing is given by speed of the slowest module.
Figure 4. Implicit sampling
Besides the manipulation by agents, space provides to blocks two additional features: their time validity and priority.
Time validity can be defined when agent calls write operation. At the moment, it has to specify the period after which the value automatically disappears from the block (as it were deleted by an agent). If the time validity is not defined, the written value occupies the block until it is rewritten by the next write operation or forever. Time validity is a good mechanism for expression of tentative character of information. For example, if a system is moving to an obstacle then measured distance from the obstacle is valid just for e.g. 200 ms. Moreover, it enables to establish data flows from many producers to many consumers (Figure 5). Making this relation clear, let us imagine that you have several producers of the same value. However, each of them produces the value under certain (and different) conditions only. In this situation we recommend to let all the producers to write their proposals for the value to the same block. Thus consumers do not need to reflect to the fact that we have more producers, they simply undertake the value stored in the common block. (If the values written by individual producers were a little bit different, each consumer undertakes one of them according order of read and write operations.) But when conditions disable a producer to compute the value, producer must not write a value “unknown” to the block as it could overwrite useful value computed by another producer which approach is compatible with the conditions. As a result, the block value is not changing when conditions are so unfavorable that no producer can propose the value. After a period, consumer could undertake so old value, that it is not valid. Time validity solves this problem: producers will write their values with time validity long enough to have value in the block permanently under favorable conditions and short enough to have empty block otherwise.
Figure 5. Data flow from many producers to many consumers
Priorities enable us to prefer value provided by a particular producer. Such producer can produce e.g. more exact value than others. Priority can be defined when agent writes the value to space; default priority is concerned otherwise. When other agents try to overwrite the value by another one, the priorities associated with the two values are compared. If the priority of the new value is lower, the write operation is ignored. It is interesting that agent whose write operation is ignored gets no information about the fact. This is important to enable higher levels of the system to influence operation of lower levels (Figure 6) without invocation of an exception which could stop operation of the whole system.
Figure 6. Suppression of lower levels by higher levels based on priority
Priorities enables us to implement all ideas of Brooks’ subsumption architecture which follows idea that higher levels of biological control rather regulate than activate lower levels. An agent in the higher level can read some blocks in lower level and - at proper moment – it can overwrite them. In this way the agent modifies what the lower level performs. This principle can be employed during incremental development of system as typical for idea of subsumption. However Agent-Space architecture is able to express also more complicated relations among higher and lower levels of system.
At the first, the agent in the higher level can use the same priority as the agent in the lower level. Thus two different values will oscillate in the block. The agent from the higher level can writes its value by higher frequency to overwhelm the lower agent but it is not able to completely inhibit its impact in this way (Figure 7).
Figure 7. Partial suppression of lower levels by higher levels based on frequency
At the second, it is possible to use various priorities in the lower level under different circumstances. As a result, it can happen that sometimes higher level suppresses processes in the lower level and sometimes it is not able to do that. For example, usually your will is able to control where you are moving, but in case of strong danger you are automatically running out and your will is not able to control it (Figure 8).
Figure 8. Selective suppression of lower levels by higher levels based on different priorities
Other part of agent perception and action consists of manipulation with peripheries like loading or saving a file, send or receive information from external devices, multimedia, network, etc. They are oriented to particular platform where the architecture is built on.
Real time operation is partially reflected by the fact that in real implementation the course through agent loop consumes certain time which differs from agent to agent. However the major real-time feature is blocking. It means that agent usually sleeps and performs one course through its loop just when a notification is received. Blocking is important from technical point of view as the best prevention of livelock which is dangerous for any simulation of parallel system on platform which is not parallel, but supports multiprocessing or multithreading. Besides that blocking enables to implement timing which is implicitly provided for biological hardware by underlying chemical processes.
According Agent-Space architecture, the notification is based on two different mechanisms. The primary mechanism is notification by timer (Figure 9, on the left), which can be set up during agent initialization to provide regular notification with a given time period. (The period should be long enough to enable completing of the course through the agent cycle; redundant notifications are ignored otherwise.) As a result, propagation of events is delayed little bit by any participating agent. Such system can tentatively exhibit inconsistent relations among propagating values, but mostly tends to achieve a consistent state. This feature can cause e.g. superfluous movements, widely observed on living creatures. Regardless models of the creatures are based on exact logic, they will exhibit also additional – seemingly unpredictable - behavior as the logic needs certain time to take control over the system.
Figure 9. Notification by timer and trigger
The secondary mechanism is notification by trigger (Figure 9, on the right). Trigger is a notification provided by space when a particular block (or one block from a given group of blocks) is changed. Thus immediate reaction on a stimulus is possible. This is - in our opinion - beyond abilities of biological hardware, but it is necessary if we want to provide to developer the same comfort as standard kits for building of process control systems. In fact, for artificial systems we need to implement abilities which are not possible for living creatures, for example errorless addition of thousands of monetary records. It has meaning to distinguish several kinds of triggers:
<![if !supportLists]>- <![endif]>single trigger which provides just notification, but no information about changed block (or blocks)
<![if !supportLists]>- <![endif]>trigger which provides also information about names of changed blocks
<![if !supportLists]>- <![endif]>advanced trigger which provides also information about names and values of changed blocks (this helps to establish traditional data stream from one agent to another without any losing of some values by implicit sampling)
In this way the architecture is able to implement everything what can be implemented by the traditional kits and is able to mimic living systems as well. Unlike the traditional kits, Agent-Space architecture gets away from “hardware layout” (i.e. system consists of components which each output is wired to several inputs of other components) which is typical for their software organization. Though it is often enough to organize software modules in pure pipeline for development of useful industrial applications, it is very clear that bio-mimetic approach requires much advanced data flows. One part of system needs to improve its operation according results achieved by another part and oppositely. For example recognition of an object on video is depending on quality of image segmentation. However, once the object is recognized, it is possible to follow its position on image and improve quality of segmentation at the position (e.g. by putting more seeds there) and thus also quality of further recognition is improved. Due to character of communication through blocks, Agent-Space architecture enables to establish such kind of data flows. Moreover, thanks of implicit sampling and real-time operation, it is possible without danger of deadlock.
Agent-space architecture was developed for real-time systems. It is strongly inspired by ideas of Minsky and Brooks but implement them in new form. This from is originated in domains of multi-agents systems and coordination programming (LINDA) (Figure 10).
Figure 10.Ideas, forms and employment of Agent-Space architecture
<![endif]>Brooks, R.: Cambrian Intelligence, The MIT Press,
<![if !supportLists]> <![endif]>Gelernter, D.: Generative Communication in LINDA. ACM on Transactions on Programming Languages and Systems, Volume 7(1), 80-112, 1985
<![if !supportLists]> <![endif]>Kelemen, J.: The Agent Paradigm. Computing and Informatics, Vol.22. (2003), pp. 513-519
<![endif]>Lucny, A.: Building
complex systems with Agent-Space architecture. Computing and
<![endif]>Lucny, A.: Building Control Systems of
<![if !supportLists]> <![endif]>Minsky, M.: The Society of Mind. Simon&Schuster, New York, 1986