[pyar] Inteligencia Artificial con python

fisa fisadev en gmail.com
Mie Sep 12 02:51:41 ART 2012


Con Rafa Carrascosa y Santi Romero estuvimos dedicando algunas horas
machinalicas a armar una lib de inteligencia artificial con python.
Implementa los algoritmos de AIMA (el libro más conocido de IA, de
Peter Norvig, director de investigación en Google y profesor de IA en
Stanford).
Ya existía una lib en python de aima hecha por Norvig mismo
(aima-python), pero de hace muchos años, no terminada del todo, y muy
abandonada. Además el código era un poco caótico y no tan simple de
saber lo que estaba hecho y lo que estaba a medias, sin tests, etc.
Era más fácil hacer una nueva que forkear.

Ya tenemos implementado lo que queríamos para la primer etapa:
algoritmos de búsqueda de solución, informada, no informada, y local,
incluyendo algoritmos genéticos. Para las siguientes etapas quedan por
implementar CSP (satisfacción de restricciones), y cosas como NLP,
aprendizaje, planeamiento, etc.
Todo con tests, código bien pythónico, y ya es instalable desde pypi.
Y con Ariel Rossanigo la vamos a estar usando para dar clases de IA en
la universidad, así que también va a tener un poco de castigo de casos
más reales.

El código está en https://github.com/fisadev/simpleai , y también
pueden instalarla con pip:

pip install simpleai

Una pizca como para que saboreen, un "HELLO WORLD" que parte de un
string vacío y busca la solución con algoritmo A*:

from simpleai.models import Problem
from simpleai.search import astar

GOAL = 'HELLO WORLD'

class HelloProblem(Problem):
    def actions(self, state):
        if len(state) < len(GOAL):
            return [c for c in ' ABCDEFGHIJKLMNOPQRSTUVWXYZ']
        else:
            return []

    def result(self, state, action):
        return state + action

    def is_goal(self, state):
        return state == GOAL

    def heuristic(self, state):
        # how far are we from the goal?
        wrong = sum([1 if state[i] != GOAL[i] else 0
                    for i in range(len(state))])
        missing = len(GOAL) - len(state)
        return wrong + missing


problem = HelloProblem(initial_state='')
result = astar(problem)

print result.state
print result.path()


Saludos!!

-- 
fisa  -  Juan Pedro Fisanotti



More information about the pyar mailing list