Agents

Agents are elements having perceptive abilities to extract information about the state of their local environment which enable them to act according to potential changes.

The following is an introduction to responsive architecture using autonomous LOGO turtles. By giving the turtles some simple perceptive abilities and influence their behaviour according to this perception, they will get some level of autonomy.

Feedback

Using concepts of cybernetics, the notion of perceptory feedback to control behaviour is central to agents. Again it is the idea that perception influences (re)action with the purpose to foster appropriate behaviour to possibly changing conditions.

Responsive architecture uses perception inputs influencing the shape or the behaviour of architectural elements in a feedback loop. This type of feedback can be used at design time or for a finished building. Examples using light range from controlling lighting according to measured light, shades to minimize solar exposure, to heliocentric complete houses.

Examples

Casey Reas

Example of graphical feedback from one of the creators of Processing.org

http://www.whitney.org/arport/commissions/softwarestructures/map.html

Braitenberg vehicles

In his description of automatic imaginary vehicles in 1974, Valentino Braitenberg presented a mechanism based on directly linking perception to action demonstrating surprisingly intelligent behaviour. His thought experiments have had an important impact on autonomous robotics research.

wikipedia

Boids

Using the same idea, C. Reynolds defined his Boids in 1986. It is a computer model of coordinated motion such as bird flocks or fish schools. It consists of three simple behaviours which describe how an individual change its direction according to its neighbours: avoidance of neighbours, alignment with their headings, cohesion with the neighbours.

Original Reynolds page the pseudo-code example

Grey Walter's Turtle

Earlier in the 1950's, Walter Grey Walter designed what is now believed to be the first autonomous robot, the machina speculatrix known as the Grey Walter turtle. Completely forgotten and rediscovered in a drawer at the end of the 90's by robotics researchers, the robots were a realization of Braitenberg thought experiments. With a simple light detector and bumper sensor, they were able to avoid obstacle and travel in complex environments.

Intelligent Agents

In studying the notion of intelligence, AI researchers have highlighted several key issues for the synthesis of intelligent systems:

  • Embodiment Intelligent agents must have a body, i.e they must interact with the environment, through physical forces, energy dissipation, etc.
  • Situatedness An agent is situated if it can acquire information about the current situation through its sensors in interaction with the environment.
  • Autonomy Every agent is dependent to some degree. This dependence can be split into dependence on the environment or dependence from other agents.
  • Adaptivity For autonomy, an agent must adapt to changes in its environment. Different form of adaptation are possible: evolutionary, physiological (homeostasis), sensory adaptation or adaptation through learning.
  • Symbol Grounding Problem If the world has to be represented in some ways, how to make sure that the symbols relate to elements or situation in the real world.

(main source: Understanding Intelligence R. Pfeiffer & C. Scheier 1999)

Rolf Pfeiffer's Lab Intelligence without reason, R. Brooks

LOGO Examples

a simple example using the distance between turtles as perceptory input to change their behaviour, in this case the grey shade of the pen.

import processing.opengl.*;
import anar.*;
 
Turtle[] turtleArray = new Turtle[5];
 
void setup(){
  size(800,400,OPENGL);
  Anar.init(this); 
  Anar.drawAxis();
 
  // here we initialize the array
  for (int i=0; i<turtleArray.length; i=i+1) {
    turtleArray[i] = new Turtle();
  }
 
 
}
 
float measureDist( Turtle t1, Turtle t2) {
  return t1.head.length(t2.head);
}
 
 
 
float measureNearestTurtle(Turtle t) {
 
  float minDist = 10000f;
 
  for (int i=0; i<turtleArray.length; i=i+1) {
 
    if (turtleArray[i] != t) {
      float distance = measureDist(t, turtleArray[i]);    
      if (distance < minDist) minDist = distance;
    }
 
  }
 
  return minDist;
}
 
 
 
void MOVE(Turtle t) {
   t.FD(random(1));
   t.LT(random(-10,10));  
   t.UP(random(-10,10));  
 
}
 
void draw(){
  background(255,155,155);
 
  for (int i=0; i<turtleArray.length; i=i+1) {
    Turtle t = turtleArray[i];
    float minDistance = measureNearestTurtle(turtleArray[i]);
 
    MOVE(t);
    t.draw();
    t.SETPC(minDistance,minDistance,minDistance);
  }
 
 
}
 
void keyPressed(){
  save("screnShot.jpg"); 
}