An autonomous agent is viewed as a set of competence modules. These
competence modules resemble the operators of a classical planning system. A
competence module can be described by a tuple
.
is a list of preconditions which have to be fulfilled before the competence
module can become active.
and
represent the expected effects of the competence module's action in terms of
an add list and a delete list. In addition, each competence module has a
level of activation
. A competence module is
executable at time
when all of its preconditions are observed to be
true at time t. An executable competence module may be selected, which
means that it performs some real world actions. The operation of a
competence module (what computation it performs, what actions it takes and
how) is not made explicit, i.e., competence modules could be hard-wired
inside, they could perform logical inference, or whatever.
Competence modules are linked in a network through three types of links: successor links, predecessor links, and conflicter links. The description of the competence modules of a autonomous agent in terms of a precondition list, add list and delete list completely defines this network:
The intuitive idea is that modules use these links to activate and inhibit each other, so that after some time the activation energy accumulates in the modules that represent the `best' actions to take given the current situation and goals. Once the activation level of such a module surpasses a certain threshold, and provided the module is executable, it becomes active and takes some real actions. The pattern of spreading activation among modules, as well as the input of new activation energy into the network is determined by the current state of the environment and the current global goals of the agent:
These processes are continuous: there is a continual flow of activation energy towards the modules that partially match the current state and towards the modules that realize one of the global goals. There is a continual decrease of the activation level of the modules that undo the protected goals. This means that the state of the environment and the global goals may change unpredictably at any moment in time. If this happens, the external input of activation automatically flows to other competence modules.
Besides the impact on activation levels from the state and goals, competence modules also activate and inhibit each other. Modules spread activation along their links as follows:
The global algorithm performs a loop, in which at every timestep the following computation takes place over all of the competence modules:
These four steps are repeated infinitely. Interesting global observable properties are: the sequence of competence modules that have become active, the optimality of this sequence (which is computed by a domain-dependent function), and the speed with which it was obtained (the number of timesteps a competence module has become active relative to the total number of timesteps the system has been running).
Four global parameters can be used to `tune' the spreading activation dynamics, and thereby the action selection behavior of the agent:
These parameters also determine the amount of activation that modules spread
forward, backward or take away. More precisely, per false proposition in its
precondition list, a non-executable module spreads to its predecessors.
Per false proposition in its add list, an executable module spreads
to its successors. Per true proposition in its precondition list a
module takes away
from its conflictors. These
factors were chosen this way because the internal spreading of activation should have
the same semantics/effects as the input/output by the state and the goals.
The ratios of input from the state versus input from the goals
versus output by the protected goals are the same as the ratios of input from
predecessors versus input from successors versus output by modules with
which a module conflicts.
Intuitively, we want to view preconditions that are not yet true as subgoals,
effects that are about to be true as `predictions', and preconditions that
are true as protected subgoals.
The algorithm as it is described until now, has some drawback that has
to be dealt with.
The length of a precondition list, add
list or delete list affects the input and output of activation
to a module. In particular, a module which has a lot of propositions in
its add list and precondition list, has more sources of
activation energy than a module that only has a few.
Therefore, all input of activation to a module or removal of activation from a
module is weighted by , where
is (i)
the number of propositions in the precondition list (in the case of input
coming from the state and from the predecessors), (ii) the number of
preconditions in the add-list (in the case of input from the goals or from
successors), or (iii) the number of propositions in the delete list (in the
case of removal of activation by the protected goals or by modules with whom
the module conflicts).
Finally, we want modules that achieve the same goal or modules that
use the same precondition to compete with one another to become active
(we view them as representing a disjunction or choice point). Therefore,
the amount of activation that is spread or taken away for a
particular proposition is split among the affected modules. For example, for
a particular proposition that is observed to be true the state divides
among all of the modules that have that precondition in their
precondition list. The same not only holds for the effect of the goals and the
protected goals, but also for the internal spreading of activation. For
example when a large number of modules achieve a precondition of module m,
the activation
that
spreads backward for
that proposition is equally divided among all of these modules. When on
the other hand there is only one other module that can make this precondition
true, module
increases the activation level of that module by its own
activation level
. One implicit assumption on
which this is based is that the preconditions are in conjunctive normal form.
A disjunction of two preconditions would be represented by a single
proposition, for which two competence modules exist that can make it true.