Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
250 changes: 125 additions & 125 deletions entornos_o.py
Original file line number Diff line number Diff line change
@@ -1,125 +1,125 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
entornos_o.py
------------

Entornos y agentes desde una prespectiva OO

"""

__author__ = 'juliowaissman'

class Entorno:
"""
Clase abstracta para entornos

En realidad funciona como un contenedor de funciones

"""

def __init__(self, x0=[]):
"""
Inicializa la clase con el estado inicial como una lista

"""
self.x = x0[:]
self.costo = 0

def acción_legal(self, accion):
"""
@param acción: Una accion en el entorno

@return: True si accion es legal en estado, False en caso contrario

Por default acepta cualquier acción.

"""
return True

def transición(self, accion):
"""
@param accion: Uno de los elementos de acciones_legales( estado)

Modifica self.x y self.costo

"""
pass

def percepcion(self):
"""
@return: Tupla con los valores que se perciben del entorno por
default el estado completo

"""
return self.x


class Agente(object):
"""
Clase abstracta para un agente que interactua con un
entorno discreto determinista observable.

"""

def programa(self, percepcion):
"""
@param percepcion: Lista con los valores que se perciben de un entorno

@return: accion: Acción seleccionada por el agente.

"""
pass


def simulador(entorno, agente, pasos=10, verbose=True):
"""Realiza la simulación de un agente actuando en un entorno de forma genérica

@param entorno: Un objeto de la clase Entorno
@param agente: Un objeto de la clase Agente
@param pasos: Un int con el número de pasos a simular
@param verbose: Si True, imprime el resultado de la simulación

@retrun (historial_estados, historial_acciones,
historial_desempeño) donde cada una es una lista con los
estados, acciones y medida de desempeño encontradas a lo
largo de la simulación.

"""
historial_costo = [entorno.costo]
historial_estados = [entorno.x[:]]
historial_acciones = []

for _ in range(pasos):
p = entorno.percepcion()
a = agente.programa(p)
entorno.transicion(a)

historial_costo.append(entorno.costo)
historial_estados.append(entorno.x[:])
historial_acciones.append(a)

historial_acciones.append(None)

if verbose:
print(u"\n\nSimulación de entorno tipo " +
str(type(entorno)) +
" con el agente tipo " +
str(type(agente)) + "\n")

print('Paso'.center(10) +
'Estado'.center(40) +
u'Acción'.center(25) +
u'Costo'.center(15))

print('_' * (10 + 40 + 25 + 15))

for i in range(pasos):
print(str(i).center(10) +
str(historial_estados[i]).center(40) +
str(historial_acciones[i]).center(25) +
str(historial_costo[i]).rjust(12))

print('_' * (10 + 40 + 25 + 15) + '\n\n')

return historial_estados, historial_acciones, historial_costo
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import copy
"""
entornos_o.py
------------
Entornos y agentes desde una prespectiva OO
"""
__author__ = 'juliowaissman'
class Entorno:
"""
Clase abstracta para entornos
En realidad funciona como un contenedor de funciones
"""
def __init__(self, x0=[]):
"""
Inicializa la clase con el estado inicial como una lista
"""
self.x = x0[:]
self.costo = 0
def acción_legal(self, accion):
"""
@param acción: Una accion en el entorno
@return: True si accion es legal en estado, False en caso contrario
Por default acepta cualquier acción.
"""
return True
def transición(self, accion):
"""
@param accion: Uno de los elementos de acciones_legales( estado)
Modifica self.x y self.costo
"""
pass
def percepcion(self):
"""
@return: Tupla con los valores que se perciben del entorno por
default el estado completo
"""
return self.x
class Agente(object):
"""
Clase abstracta para un agente que interactua con un
entorno discreto determinista observable.
"""
def programa(self, percepcion):
"""
@param percepcion: Lista con los valores que se perciben de un entorno
@return: accion: Acción seleccionada por el agente.
"""
pass
def simulador(entorno, agente, pasos=10, verbose=True):
"""Realiza la simulación de un agente actuando en un entorno de forma genérica
@param entorno: Un objeto de la clase Entorno
@param agente: Un objeto de la clase Agente
@param pasos: Un int con el número de pasos a simular
@param verbose: Si True, imprime el resultado de la simulación
@return (historial_estados, historial_acciones, historial_desempeño)
donde cada una es una lista con los estados, acciones y medidas de desempeño
encontradas a lo largo de la simulación.
"""
historial_costo = [entorno.costo]
historial_estados = [copy.deepcopy(entorno.x)] # Copia profunda del estado inicial
historial_acciones = []
for _ in range(pasos):
p = entorno.percepcion() # Obtenemos la percepción (estado actual)
# Pasamos el entorno completo al agente, no solo la percepción
a = agente.programa([entorno] + list(p)) # Ahora pasamos tanto el entorno como la percepción
entorno.transicion(a)
historial_costo.append(entorno.costo)
historial_estados.append(copy.deepcopy(entorno.x)) # Copia profunda del estado actual
historial_acciones.append(a)
historial_acciones.append(None)
if verbose:
print(u"\n\nSimulación de entorno tipo " +
str(type(entorno)) +
" con el agente tipo " +
str(type(agente)) + "\n")
print('Paso'.center(10) +
'Estado'.center(40) +
u'Acción'.center(25) +
u'Costo'.center(15))
print('_' * (10 + 40 + 25 + 15))
for i in range(pasos):
print(str(i).center(10) +
str(historial_estados[i]).center(40) +
str(historial_acciones[i]).center(25) +
str(historial_costo[i]).rjust(12))
print('_' * (10 + 40 + 25 + 15) + '\n\n')
return historial_estados, historial_acciones, historial_costo
Loading