Ayer comencé a implementar ejemplos del libro Artificial Intelligence: A Modern Approach, de Stuart Russell y Peter Norvig. Ver el sitio del libro
Hay implementaciones en distintos lenguajes:
http://aima.cs.berkeley.edu/code.html (hay en Python, Java, C#, Prolog, Lisp, … )
Mi implementación en
https://github.com/ajlopez/SharpAima
Quiero ir armándola con TDD. Por ahora me baso en la versión en Python, pero puede que también vea la versión en Java, debido a las diferencias de los lenguajes: C# y Java son lenguajes tipados.
La versión que presento hoy es la 0.0.1
https://github.com/ajlopez/SharpAima/tree/0.0.1
Por cada post iré “taggeando” una nueva versión. Mi primer código trata de implementar los primeros agentes descriptos en el capítulo 2. Me basé en el código de:
http://aima-python.googlecode.com/svn/trunk/agents.py
Tengo una solución con dos proyectos: uno de clases y otro de tests:
La idea es tener agentes en un ambiente:
(Adaptado de la figura 2.1 del libro)
El agente recibe percepciones y genera acciones. La primera implementación es:
public abstract class Agent<TLocation, TPerception, TAction> { public TLocation Location { get; set; } public int Performance { get; set; } public abstract TAction GetAction(TPerception perception); }
Y las implementaciones en concreto son de un agente robot máquina aspiradora (VacuumAgent y variantes).
Vean la historia del proyecto, cómo fue evolucionando desde TDD. Primero implementé un agente concreto, y luego fue surgiendo la abstracción de arriba. Noten que en C# tenemos que apelar a algo tipado, y de ahí el uso de tipos genéricos: un tipo de agente concreto se define dando el tipo de lugares (location) que maneja (por ejemplo, una posición X, Y, a implementar en la próxima versión), el tipo de percepciones que recibe (ej: “estoy en lugar A y el lugar está limpio”), y el tipo de acciones (“Limpiar”, “Ir a la Derecha”, … ). En Python es más simple, por no tener tipos.
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com