[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