Agentes Físicos Dinámicos

Josep Lluís de la Rosa i Esteva
Institut d’Informàtica i Aplicacions
Universitat de Girona
peplluis@eia.udg.es

Orígenes de la Investigación


Consensus

Consensus (características)
 


Supervisión de controladores

Hay precedentes de supervisabilidad:
  • Cómo aprovechar al máximo las prestaciones de los controladores, una vez diseñados? (Optimización, gain scheduling del área de control de procesos químicos?).
  • Cómo hacer axiomática de supervisabilidad similar a la controlabilidad (SAMAAN 1989)?
  • Problemas:



    CASSD

    “Computer Aided Supervisory Systems Design”

    Su objetivo:

    Problemas
  • La supervisión local de cada controlador se ha de combinar con la supervisión global.
  • Los sistemas complejos dispondrán de numerosos pequeños supervisores de controladores.
  • Posible solución

    Toolboxes de supervisión


    Diseño de Agentes con Robots

  • El curso de doctorado “IA Distribuida” del bienio 1994-96 yo buscaba un ejemplo adecuado que justificase el uso de agentes cooperantes.
  • En dicho año se inició los primeros mundiales de la FIRA y Robocup.  En Julio de 1996 construimos el primer equipo de fútbol robótico de la UdG.
  • Los agentes controlaban cada robot y debían jugar de forma cooperativa en competición contra otros agentes (el equipo contrario).
  • En el año 1999-2000 somos el único equipo Europeo que ha participado en todos los mundiales y hacemos investigación en dicha plataforma de investigación.

  • Motivación internacional de la investigación

    Los retos de la IA


    Los eternos problemas de la IA

    Los agentes inteligentes disponen de un origen múltiple


    La FIRA y RoboCup


    Particularidades de RoboCup


    La experiencia en CASSD, consensus y diseño de robots motiva:


    Supervisión y Diseño de Agentes


    Que son agentes?


    Conjetura de Bozzo


    Que son AgentesFísicos?

    Según [Asada 97]


    Retos de los agentes físicos


    Agentes Físicos Regidos por Dinámica


    Agentes Físicos Regidos por Dinámica Estado del Arte


    Cómo superar el estado del arte?


    Ejemplos ilustrativos


    Convoy
    Soluciones:


    Negotiation Algorithm

    1. Agent A decides to change the speed and sends a request message to Agent B as follows:

    request ( agent_A, agent_B, initial_speed, final_speed, time);

    2. Agent B receives the message and looks in it base of capacities, for one that fulfil the requirements.

    IF CAPACITY exists
      THEN
         inform ( Agent_B, Agent_A, final_speed, certainty);
     ELSE
          inform ( Agent_B, Agent_A, final_speed, 0.0);
    END

    3. Agent A receives the answer:

    IF certainty > threshold
     THEN
             inform ( Agent_A, Agent_B, DO_ACTION);
    Agent B starts to do the action.
     do (agent_A, final_speed, controller_parameters);
      ELSE

    4. Agent A looks in its base of capacities for one where the final and initial speeds match with the requirements, but using another controller, so the specified time changes.

      IF CAPACITY exists
      THEN
           request ( Agent_A, Agent_B, final_speed,time);

    5. The algorithm goes to step 2.

      ELSE
         inform ( Agent_B, Agent_A,DO_NOT_ACTION);

    6. End of the negotiation.

    END

    Aquí tenemos la tabla de capacidades sobre las que hemos basado este razonamiento


    Transporte de Containers

    Conjunto de posiciones
        A={(x, y) | x? [1...MaxX], y? [1...MaxY]}

    Conjunto de contenedores
            C={c1, c2,..., cn}
    Posición 
            pi = (pxi , pyi )? A
    Destinación
            di = (dxi , dyi )? A 
    Deadline
            t? R
    Velocidad
           vi ? R

    procedure Simulation(var Sim:Simulation);
    begin
    Initialize(Sim);
    repeat
         for each robot r in Sim.Robots do 
            begin 
              ChooseDirection(Sim,r);
              // Recoger y entregar containers
              DoThings (Sim,r); end;
    until finished (Sim);
    end
     


    Transporte de Equipos


    El lenguaje agente para la cooperación es el de [Shoham93]


    Características del lenguaje orientado a agentes AGENT0


    El lenguaje puede ser ejecutado con el siguiente intérprete de agentes

    Condiciones

    hay_mesa()
    Tengo_mesa()
    Tengo_compañero()
    Estoy_en_el_almacén()
    Acciones
    buscar_mesa
    transportar_mesa
    entregar_mesa
    agent name a1

    initial beliefs
         beliefs that hay_mesa at 0
         beliefs that not Tengo_mesa(a1) at 0
         beliefs that not Tengo_compañero(a1) at 0

    capabilities
        can do buscar_mesaif beliefs that not Tengo_mesa(a1) at T
        can do transportar_mesaif beliefs that Tengo_compañero(a1) at T
        can do entregar_mesa if beliefs that Estoy_en_el_almacén(a1) at T

    commitment rule 1
            message conditions
                    informed by A that not Tengo_compañero(A) at T
            mental conditions
                    beliefs that not Tengo_compañero(a1) at T and differents(A,a1)
            actions  in time T
                            inform A that Tengo_compañero(A) at T and
                            inform a1 that Tengo_compañero(a1) at T
    commitment rule 2
            message conditions
                    true
            mental conditions
                    beliefs that hay_mesa at T and
                    beliefs that not Tengo_mesa(a1) at T
            actions  in time T
                            do buscar_mesa and
                            inform everybody that Tengo_mesa(a1) at T

    commitment rule 3
            message conditions
                    true
            mental conditions
                    beliefs that Tengo_mesa(a1) at T and
                    beliefs that not Tengo_compañero(a1) at T
            actions  in time T
                     inform others that not Tengo_compañero(a1) at T
    commitment rule 4
            message conditions
                    true
            mental conditions
                    beliefs that Tengo_compañero(a1) at T
            actions
                    in time T do transportar_mesa and
                    inform a1 that not Tengo_compañero(a1) at T and
                    inform a1 that not Tengo_mesa(a1) at  T
    end a1

    Traza de ejecución

    | ?- reset_time.
    yes
    | ?- cycle.
    Asserting  cmt(a1,a1,0,do(fetch_table) and inform(everybody,fact(0,Tengo_mesa(a1))))
    Retracting  cmt(a1,a1,0,do(fetch_table) and inform(everybody,fact(0,Tengo_mesa(a1))))
    Asserting  m(a1,a1,inform(fact(0,Tengo_mesa(a1))))
    Asserting  m(a2,a1,inform(fact(0,Tengo_mesa(a1))))
    Asserting  m(a3,a1,inform(fact(0,Tengo_mesa(a1))))

    Asserting  b(a2,fact(0,Tengo_mesa(a1)))
    Asserting  cmt(a2,a2,0,do(fetch_table) and inform(everybody,fact(0,Tengo_mesa(a2))))
    Retracting  m(a2,a1,inform(fact(0,Tengo_mesa(a1))))
    Retracting  cmt(a2,a2,0,do(fetch_table) and inform(everybody,fact(0,Tengo_mesa(a2))))
    Asserting  m(a1,a2,inform(fact(0,Tengo_mesa(a2))))
    Asserting  m(a2,a2,inform(fact(0,Tengo_mesa(a2))))
    Asserting  m(a3,a2,inform(fact(0,Tengo_mesa(a2))))

    Asserting  b(a3,fact(0,Tengo_mesa(a1)))
    Asserting  b(a3,fact(0,Tengo_mesa(a2)))
    Asserting  cmt(a3,a3,0,do(fetch_table) and inform(everybody,fact(0,Tengo_mesa(a3))))
    Retracting  m(a3,a1,inform(fact(0,Tengo_mesa(a1))))
    Retracting  m(a3,a2,inform(fact(0,Tengo_mesa(a2))))
    Retracting  cmt(a3,a3,0,do(fetch_table) and inform(everybody,fact(0,Tengo_mesa(a3))))
    Asserting  m(a1,a3,inform(fact(0,Tengo_mesa(a3))))
    Asserting  m(a2,a3,inform(fact(0,Tengo_mesa(a3))))
    Asserting  m(a3,a3,inform(fact(0,Tengo_mesa(a3))))
    yes

    | ?- cycle.
    Retracting  b(a1,fact(0,not Tengo_mesa(a1)))
    Asserting  b(a1,fact(0,Tengo_mesa(a1)))
    Asserting  b(a1,fact(0,Tengo_mesa(a2)))
    Asserting  b(a1,fact(0,Tengo_mesa(a3)))
    Asserting  cmt(a1,a1,0,inform(others,fact(0,not Tengo_compañero(a1))))
    Retracting  m(a1,a1,inform(fact(0,Tengo_mesa(a1))))
    Retracting  m(a1,a2,inform(fact(0,Tengo_mesa(a2))))
    Retracting  m(a1,a3,inform(fact(0,Tengo_mesa(a3))))
    Retracting  cmt(a1,a1,0,inform(others,fact(0,not Tengo_compañero(a1))))
    Asserting  m(a2,a1,inform(fact(0,not Tengo_compañero(a1))))
    Asserting  m(a3,a1,inform(fact(0,not Tengo_compañero(a1))))

    Retracting  b(a2,fact(0,not Tengo_mesa(a2)))
    Asserting  b(a2,fact(0,Tengo_mesa(a2)))
    Asserting  b(a2,fact(0,Tengo_mesa(a3)))
    Asserting  b(a2,fact(0,not Tengo_compañero(a1)))
    Asserting  cmt(a2,a2,0,inform(a1,fact(0,Tengo_compañero(a1))) and inform(a2,fact(0,Tengo_compañero(a2))))
    Asserting  cmt(a2,a2,0,inform(others,fact(0,not Tengo_compañero(a2))))
    Retracting  m(a2,a2,inform(fact(0,Tengo_mesa(a2))))
    Retracting  m(a2,a3,inform(fact(0,Tengo_mesa(a3))))
    Retracting  m(a2,a1,inform(fact(0,not Tengo_compañero(a1))))
    Retracting  cmt(a2,a2,0,inform(a1,fact(0,Tengo_compañero(a1))) and inform(a2,fact(0,Tengo_compañero(a2))))
    Asserting  m(a1,a2,inform(fact(0,Tengo_compañero(a1))))
    Asserting  m(a2,a2,inform(fact(0,Tengo_compañero(a2))))
    Retracting  cmt(a2,a2,0,inform(others,fact(0,not Tengo_compañero(a2))))
    Asserting  m(a1,a2,inform(fact(0,not Tengo_compañero(a2))))
    Asserting  m(a3,a2,inform(fact(0,not Tengo_compañero(a2))))
    Retracting  b(a3,fact(0,not Tengo_mesa(a3)))
    Asserting  b(a3,fact(0,Tengo_mesa(a3)))
    Asserting  b(a3,fact(0,not Tengo_compañero(a1)))
    Asserting  b(a3,fact(0,not Tengo_compañero(a2)))
    Asserting  cmt(a3,a3,0,inform(a1,fact(0,Tengo_compañero(a1))) and inform(a3,fact(0,Tengo_compañero(a3))))
    Asserting  cmt(a3,a3,0,inform(a2,fact(0,Tengo_compañero(a2))) and inform(a3,fact(0,Tengo_compañero(a3))))
    Asserting  cmt(a3,a3,0,inform(others,fact(0,not Tengo_compañero(a3))))
    Retracting  m(a3,a3,inform(fact(0,Tengo_mesa(a3))))
    Retracting  m(a3,a1,inform(fact(0,not Tengo_compañero(a1))))
    Retracting  m(a3,a2,inform(fact(0,not Tengo_compañero(a2))))
    Retracting  cmt(a3,a3,0,inform(a1,fact(0,Tengo_compañero(a1))) and inform(a3,fact(0,Tengo_compañero(a3))))
    Asserting  m(a1,a3,inform(fact(0,Tengo_compañero(a1))))
    Asserting  m(a3,a3,inform(fact(0,Tengo_compañero(a3))))
    Retracting  cmt(a3,a3,0,inform(a2,fact(0,Tengo_compañero(a2))) and inform(a3,fact(0,Tengo_compañero(a3))))
    Asserting  m(a2,a3,inform(fact(0,Tengo_compañero(a2))))
    Asserting  m(a3,a3,inform(fact(0,Tengo_compañero(a3))))
    Retracting  cmt(a3,a3,0,inform(others,fact(0,not Tengo_compañero(a3))))
    Asserting  m(a1,a3,inform(fact(0,not Tengo_compañero(a3))))
    Asserting  m(a2,a3,inform(fact(0,not Tengo_compañero(a3))))
    yes

    | ?- cycle.
    Retracting  b(a1,fact(0,not Tengo_compañero(a1)))
    Asserting  b(a1,fact(0,Tengo_compañero(a1)))
    Asserting  b(a1,fact(0,not Tengo_compañero(a2)))
    Asserting  b(a1,fact(0,not Tengo_compañero(a3)))
    Asserting  cmt(a1,a1,0,do(transportar_mesa) and inform(a1,fact(0,not Tengo_compañero(a1))) and inform(a1,fact(0,not Tengo_mesa(a1))))
    Retracting  m(a1,a2,inform(fact(0,Tengo_compañero(a1))))
    Retracting  m(a1,a2,inform(fact(0,not Tengo_compañero(a2))))
    Retracting  m(a1,a3,inform(fact(0,Tengo_compañero(a1))))
    Retracting  m(a1,a3,inform(fact(0,not Tengo_compañero(a3))))
    Retracting  cmt(a1,a1,0,do(transportar_mesa) and inform(a1,fact(0,not Tengo_compañero(a1))) and inform(a1,fact(0,not Tengo_mesa(a1))))
    Asserting  m(a1,a1,inform(fact(0,not Tengo_compañero(a1))))
    Asserting  m(a1,a1,inform(fact(0,not Tengo_mesa(a1))))

    Retracting  b(a2,fact(0,not Tengo_compañero(a2)))
    Asserting  b(a2,fact(0,Tengo_compañero(a2)))
    Asserting  b(a2,fact(0,not Tengo_compañero(a3)))
    Asserting  cmt(a2,a2,0,do(transportar_mesa) and inform(a2,fact(0,not Tengo_compañero(a2))) and inform(a2,fact(0,not Tengo_mesa(a2))))
    Retracting  m(a2,a2,inform(fact(0,Tengo_compañero(a2))))
    Retracting  m(a2,a3,inform(fact(0,Tengo_compañero(a2))))
    Retracting  m(a2,a3,inform(fact(0,not Tengo_compañero(a3))))
    Retracting  cmt(a2,a2,0,do(transportar_mesa) and inform(a2,fact(0,not Tengo_compañero(a2))) and inform(a2,fact(0,not Tengo_mesa(a2))))
    Asserting  m(a2,a2,inform(fact(0,not Tengo_compañero(a2))))
    Asserting  m(a2,a2,inform(fact(0,not Tengo_mesa(a2))))

    Retracting  b(a3,fact(0,not Tengo_compañero(a3)))
    Asserting  b(a3,fact(0,Tengo_compañero(a3)))
    Asserting  cmt(a3,a3,0,do(transportar_mesa) and inform(a3,fact(0,not Tengo_compañero(a3))) and inform(a3,fact(0,not Tengo_mesa(a3))))
    Retracting  m(a3,a3,inform(fact(0,Tengo_compañero(a3))))
    Retracting  m(a3,a3,inform(fact(0,Tengo_compañero(a3))))
    Retracting  cmt(a3,a3,0,do(transportar_mesa) and inform(a3,fact(0,not Tengo_compañero(a3))) and inform(a3,fact(0,not Tengo_mesa(a3))))
    Asserting  m(a3,a3,inform(fact(0,not Tengo_compañero(a3))))
    Asserting  m(a3,a3,inform(fact(0,not Tengo_mesa(a3))))
    yes

    Poder o no poder

    Autómatas híbridos

    Sistemas híbridos
    Un sistema dinámico híbrido que llamaremos Automata Híbrido, H, es una colección (X,U,Y,I,f,E,h), donde:

    Un automata híbrido permite representar un sistema continuo con diferentes fases.
     

    f: determina la evolución del estado continuo
    E: evolución discreta del estado
    h: determina la evolución de la salida

    Poder o no poder: capacidades observadas de los supervisores híbridos

    Supervisabilidad y Supervisores híbridos

    Conclusiones de los ejemplos de Convoy y Transporte de Equipos:


    Exploración de Fondos Submarino
     
    Mapa original                                                                                        Mapa generado
     


    Pases en el Fútbol Robótico



    Ecosistemas de Agentes

    La dinámica de Hogg:

    Mejoras sobre Hogg:

    Si los retardos son = 10s o bien de = 40s vemos que aparecen oscilaciones, y hasta incluso el sistema se vuelve caótico: los agentes dudan sobre qué recurso consultar la información/conocimiento.

    Vemos que la interacción entre los ecosistemas tiene un efecto estabilizador.  Dicha estabilización ha de redundar en seguridad y mejor rendimiento del ecosistema.

    Ejemplo de aplicación a un péndulo invertido.  Hay dos recursos que deciden la acción de control del péndulo, sobre la que se aplica consensus


    Rendimiento J1

    Rendimiento J3 estabilizado

    Poblaciones 1, 2 y 3 estabilizadas


    Situación actual de la investigación

    Objetivos metodológicos de la plataforma Otros resultados residuales Agradecimientos Referencias Bibliográficas