agents.py 35,2 ko
Newer Older
    # TODO: Arrow needs to be implemented
# ______________________________________________________________________________
def compare_agents(EnvFactory, AgentFactories, n=10, steps=1000):
    """See how well each of several agents do in n instances of an environment.
    Pass in a factory (constructor) for environments, and several for agents.
withal's avatar
withal a validé
    Create n instances of the environment, and run each agent in copies of
Aman Deep Singh's avatar
Aman Deep Singh a validé
    each one for steps. Return a list of (agent, average-score) tuples.
    >>> environment = TrivialVacuumEnvironment
    >>> agents = [ModelBasedVacuumAgent, ReflexVacuumAgent]
    >>> result = compare_agents(environment, agents)
    >>> performance_ModelBasedVacummAgent = result[0][1]
    >>> performance_ReflexVacummAgent = result[1][1]
    >>> performance_ReflexVacummAgent <= performance_ModelBasedVacummAgent
    True
    """
    envs = [EnvFactory() for i in range(n)]
withal's avatar
withal a validé
    return [(A, test_agent(A, steps, copy.deepcopy(envs)))
def test_agent(AgentFactory, steps, envs):
Aman Deep Singh's avatar
Aman Deep Singh a validé
    """Return the mean score of running an agent in each of the envs, for steps
    >>> def constant_prog(percept):
    ...     return percept
    ...
    >>> agent = Agent(constant_prog)
    >>> result = agent.program(5)
    >>> result == 5
    True
    """
Donato Meoli's avatar
Donato Meoli a validé

withal's avatar
withal a validé
    def score(env):
withal's avatar
withal a validé
        return agent.performance
Donato Meoli's avatar
Donato Meoli a validé

    return mean(map(score, envs))
Donato Meoli's avatar
Donato Meoli a validé

# _________________________________________________________________________
__doc__ += """
>>> a = ReflexVacuumAgent()
>>> a.program((loc_A, 'Clean'))
'Right'
>>> a.program((loc_B, 'Clean'))
'Left'
>>> a.program((loc_A, 'Dirty'))
'Suck'
>>> a.program((loc_A, 'Dirty'))
'Suck'

>>> e = TrivialVacuumEnvironment()
>>> e.add_thing(ModelBasedVacuumAgent())