Vinny Reynolds writes:
> Agents and Swarms seem to be equivalent to a degree and are
> structured hierarchically. Events can be scheduled for individual
> agents or for Swarms compromising of agents and/or more swarms. Say
> for example, you place 1 set of rabbits in one particular swarm,
> and another set of rabbits in another swarm. The two sets of
> rabbits are in physically different places, which is why I'm
> seperating them into two swarms.
Before I submit my opinion on this, I'd like to throw a few words
out to clarify things.
1) There is no technical definition of "agent" with respect to
swarm. "Agent" is a more abstract term and can mean anything
you want it to mean when using swarm.
_I_ use "agent" to mean: "object, with an agenda, that acts on
behalf of another object". I use "actor" to mean, "object with
an agenda." So, an agent is an actor that acts on behalf of
others.
Sometimes, to ease communication, I conflate the use of agent
and actor.
2) _Physical_ location is orthogonal to swarms. Two agents can be
in the same physical location, but be controlled by different
swarms. Or, two agents can be in different locations, but be
controlled by the same swarm.
A swarm is really just a mechanism for pushing objects around.
It's the data structures that index objects that indicate any
spatial aspects (like physical location) of those objects.
Sure, Swarms are also Zones. But, Zones are an implementation
tool to keep track of pointers and which objects are allocated.
But, Zones are not _necessarily_ part of any model. They could
be used as a modeling construct; but, I don't see why anyone
would try to do that since the Zone API is not rich enough for
it to be useful in that way.
> Now, rabbits being rabbits like to
> move around and my first question is this. If a rabbit moves and
> more appropriately belongs to another swarm, can that agent and its
> events be moved transparently? Or, does it have to be treated in a
> special manner because it is no longer part of swarm one and
> therefore is no longer bound by that groups behaviour?
If both swarms are activated in the same (non-nil) parent swarm, then
no special treatment is necessary. Or, more generally, if both swarms
ultimately are rooted in the same parent swarm, then no special
treatment is necessary.
If the two swarms or their parents are separately activated in nil,
then special treatment is necessary.
When activating two swarms in nil, the modeling statement being made
is one of independence (linearity). It's a statement that "the
events in swarm A are independent of the events in swarm B". Any
interaction between those two swarms should, therefore, be treated
_explicitly_ by the swarm object's interface.... which, in so many
words, means "special treatment". [grin]
> The world is modelled as an agent, albeit one with special meaning
> but treated by the simulator as an agent nonetheless. My second
> question is has anybody found that this places any undue
> limitations on their model of the world or is the agent paradigm
> sufficient and flexible enough? How did you get around any such
> limitations
I can't really answer this question. I'd need more detail. Given
that "agent" can mean lots of things, I don't find that it places any
limitations on models of the world/environment. I _can_ imagine that
it would hinder things in some situations. For example, if by
"agent", you mean that your world agent is a computational sibling to
the other agents that make up the contents of the world (as distinct
from a model where the other agents are children of or contained in
the world agent), then events can occur between the non-world agents
that don't affect the world agent in any way. That means that the
world agent is an _incomplete_ representation of the environment in
which the non-world agents live.
But, even that's a weak statement because in most swarm models I've
seen, the agents interact directly, without being mediated by their
"world", resulting in the same situation.
Further, of course, if "agent" means "acting on behalf of something",
and your world is an agent, then what is it acting on behalf of?
Another potential limitation of using the "agent paradigm" to model an
environment lies in the assumption of the agent as an object. Along
the same lines of the world agent not mediating interaction with the
non-world agents, comes an ontological problem of embeddedness or
logical abstraction.
Ideally, if an object lives in (is embedded in) an environment, then
that environment is observable to that object. When the environment
is an agent, then the environment's observables are dictated by two OO
interfaces, the object's and the environment's.... that brings a bit
of decoherence to the discussion of environmental observables that one
doesn't see in real life. In real life, environments are "analytic",
infinitely differentiably divisible (till you hit the quanta) and
they're multi-aspect. An argument can even be made to say that there
_must_ be infinite aspects. (re: wittgenstein and spinoza)
The observables of these environments are solely dictated by the
coupling of the interfaces between the object and the environment,
where both interfaces are mutually co-defined by the other.
So, if both the environment and the object have static interfaces,
then there's a pretty significant discontinuity between that model and
the real situation. (Unless you're modeling artifacts that actually
have static interfaces, of course. ;-)
A way around this is to give the object full access to all the
computational machinery available through the run-time. And that
would imply that the environment is not an agent (because the
environment wouldn't have internal components hidden behind an
interface... i.e. it would not be an object).
But, swarm is not the right tool for that type of model. One should
use Tierra, Avida, or one of those systems for those types of models.
I hope that helps. [grin]