Saturday, July 30, 2005

Design flexibility spectrum

I'm not sure what title to really use for this post, but "Design flexibility spectrum" is a starting point.  The point is to describe one of the dimensions on which software agent technology could be used.  The goal is that you start with a conceptual model of your application and then figure out how to decompose the application and implement it using software agent technology.  The opportunities and advantages of software agents grow dramatically the further out the spectrum you go.

  1. Fixed design.  Each component of the application is known in advance and designed to work with precisely those predefined components.  A fixed set of software agents could be used.
  2. Configurable design.  The application has some mechanism, such as a configuration file which allows an integrator to pick and mix and match application functions, such that there is no fixed, predefined relationship between all components, but at least the universe of components is fixed.  A fixed universe of software agents could be used, with only a subset active for a specified configuration.
  3. Add-on extensible design.  The integrator or even the user can actually add components to the application which were not known to the application designers.  This begins to enable emergent behavior, within the bounds of the original application.  The universe of software agents would be unbounded, but starts with a "base", pre-defined set.
  4. Open design.  All bets are off.  Application components stand alone, without assumption of the existence of other components.  There is some mechanism for discovery of components and negotiation and facilitation of interaction between components.  This enables truly emergent behavior.  Literally nothing is known about the initial set of software agents.  Actually, precisely one thing is known: the software agent representing each individual application component.  The resulting "applications" are emergent and unknown to the component designers.  Each such emergent application would be a "swarm application".  Nobody would know in advance the "design" of such an application.  And, the emergent design can change dynamically.

More thought is needed.  I just wanted to put out some food for thought, consistent with "open design" where the final results really are emergent and not pre-defined.

Monday, July 04, 2005

Software Agency: a blend of computer science, philosophy, psychology, statistics, and economics

As I have been incrementally thinking more deeply about software agents and what really makes them tick, my thoughts have coalesced around a mix of computer science, philosophy, psychology, statistics, and economics.  Software agents or software agency is not simply about two or more computer programs directly interacting, but much more about "social" interactions of computational entities.  Much of what needs to be computed can be best accomplished through "effects" rather than synchronized interactions.  In fact, the effect of one software agent may be "felt" and processed by an untold number of other software agents.  Or, an aggregate effect may come about from the uncoordinated actions of any number of independent software agents which are not even aware of each other's existence.  Beliefs, desires, and intentions are all relevant to the interactions (direct or otherwise) of software agents.  It makes perfect sense to speak of societies of software agents.  And it makes equally good sense to consider the economic values of computations and the software agents that perform them.