Example #1
0
def total_gain(agent, target):
    """
		calculer les réserves de l’agent additionnée à l’ensemble du sucre qu’il récupérera durant son voyage soustrait 
			au métabolisme consommé à chaque étape	
	"""
    pop = get_population(agent)
    env = get_env(agent)
    pos = get_pos(agent)
    sugar_level = get_sugar_level(agent)
    #x_diff,y_diff
    xd, yd = u.vector_diff(pos, target)
    if xd == 0:  #the same line
        steps = abs(yd)
        step = (1 if yd < 0 else -1)
        for i in range(steps):
            cell_refs = correct_position((pos[0], pos[1] + step * i), env)
            cell = e.get_cell(env, cell_refs)
            sugar_level += c.get_sugar_level(cell)
    else:  #the same row
        steps = abs(xd)
        step = (1 if xd < 0 else -1)
        for i in range(steps):
            cell_refs = correct_position((pos[0] + step * i, pos[1]), env)
            cell = e.get_cell(env, cell_refs)
            sugar_level += c.get_sugar_level(cell)
    return sugar_level - get_metabolism(agent) * steps
Example #2
0
def total_gain(agent,target):
	"""
		calculer les réserves de l’agent additionnée à l’ensemble du sucre qu’il récupérera durant son voyage soustrait 
			au métabolisme consommé à chaque étape	
	"""	
	pop = get_population(agent)
	env = get_env(agent)
	pos = get_pos(agent)
	sugar_level = get_sugar_level(agent)
	#x_diff,y_diff
	xd,yd = u.vector_diff(pos,target)
	if xd == 0: #the same line
		steps = abs(yd)
		step  = (1 if yd < 0 else -1)
		for i in range(steps):
			cell_refs = correct_position((pos[0],pos[1]+step*i),env)
			cell  = e.get_cell(env,cell_refs)
			sugar_level += c.get_sugar_level(cell)
	else: #the same row
		steps = abs(xd)
		step  = (1 if xd < 0 else -1)
		for i in range(steps):
			cell_refs = correct_position((pos[0]+step*i,pos[1]),env)
			cell  = e.get_cell(env,cell_refs)
			sugar_level += c.get_sugar_level(cell)
	return sugar_level - get_metabolism(agent)*steps
def min_sugar_level_need( env, agent, cells_refs ):
    """
        Renvoie la cell_ref minimum que l'agent a besoin parmi la liste des cells_refs
    """
    # On crée une liste des cellules graces à la liste des positions.
    cells = []
    for cell_ref in cells_refs:
        cells.append( e.get_cell( env, cell_ref ) )
    
    # On a deux listes: les cellules et les positions.
    # On ordonne la liste des cellules en fonction du taux de sucre (Et les positions s'ordonneront en fonction aussi)
    u.sort_on_second_list(cells_refs, cells, order_decrease_cell_by_sugar_level)
    
    # On recherche le minimum
    minimal_cell_ref = cells_refs[0]
    minimal_cell = cells[0]
    
    #On parcout tous les éléments
    for temp in range( len(cells) ):
        temp_ref  = cells_refs[temp] #Position
        temp_cell = cells[temp] #Cellule
        
        #Si le taux suffit à la survie et que celui-ci est plus petit que le supposé "minimal".
        if c.get_sugar_level( temp_cell ) >= get_metabolism( agent ) and c.get_sugar_level( minimal_cell ) > c.get_sugar_level( temp_cell ):
            minimal_cell_ref = temp_ref # Nouvelle position minimale
            minimal_cell = temp_cell # Nouvelle cellule minimale
            
    return minimal_cell_ref # Renvoie la position de la cellule
Example #4
0
def max_sugar_level_cell_ref(env, cell_ref_list):
    """
        Return the reference of the cell (from the given list)
        with the highest sugar level.
    """
    max_cell_ref = cell_ref_list[0]
    max_cell = get_cell(env, max_cell_ref)
    for cell_ref in cell_ref_list:
        cell = get_cell(env, cell_ref)
        if c.get_sugar_level(cell) > c.get_sugar_level(max_cell):
            max_cell = cell
            max_cell_ref = cell_ref
    return max_cell_ref
Example #5
0
def max_sugar_level_cell_ref(env, cell_ref_list):
    """
        Return the reference of the cell (from the given list)
        with the highest sugar level.
    """
    max_cell_ref = cell_ref_list[0]
    max_cell = get_cell(env, max_cell_ref)
    for cell_ref in cell_ref_list:
        cell = get_cell(env, cell_ref)
        if c.get_sugar_level(cell) > c.get_sugar_level(max_cell):
            max_cell = cell
            max_cell_ref = cell_ref
    return max_cell_ref
Example #6
0
def max_ressource_cell_position(l, l_pos):
    """
        Returns the position of the cell of the environment which has
        the biggest sugar level.
    """
    l_res = []
    for elem in l:
        l_res.append(c.get_sugar_level(elem))
    max_res = max(l_res)
    for i in range(len(l)):
        if c.get_sugar_level(l[i]) == max_res:
            pos_cell = l_pos[i]
    return pos_cell
Example #7
0
def move_to_the_highest_sugar_level_cell(agent):
    """
		RA1 : déplace l'agent dans la cellule à quantité de sucre la plus élevée
	"""
    cells_refs = accecible_positions(agent)
    if len(cells_refs) > 0:
        highest = cells_refs[0]
        env = get_env(agent)
        for i in range(len(cells_refs)):
            cell = e.get_cell(env, cells_refs[i])
            highest_cell = e.get_cell(env, highest)
            if c.get_sugar_level(cell) > c.get_sugar_level(highest_cell):
                highest = cells_refs[i]
        move(agent, highest)
Example #8
0
def move_to_the_lowest_sugar_level_cell(agent):
	"""
		RA3 : déplace l'agent dans la cellule à quantité de sucre la moins élevée
		et assez pour son métabolisme
	"""
	cells_refs = accecible_positions(agent)
	if len(cells_refs) > 0:
		lowest = cells_refs[0]
		env = get_env(agent)
		for i in range(len(cells_refs)):
			cell = e.get_cell(env,cells_refs[i])
			lowest_cell = e.get_cell(env,lowest)
			if c.get_sugar_level(cell) < c.get_sugar_level(lowest_cell):
				lowest = cells_refs[i]
		move (agent,lowest)
Example #9
0
def move_to_the_highest_sugar_level_cell(agent):

	"""
		RA1 : déplace l'agent dans la cellule à quantité de sucre la plus élevée
	"""
	cells_refs = accecible_positions(agent)
	if len(cells_refs) > 0:
		highest = cells_refs[0]
		env = get_env(agent)
		for i in range(len(cells_refs)):
			cell = e.get_cell(env,cells_refs[i])
			highest_cell = e.get_cell(env,highest)
			if c.get_sugar_level(cell) > c.get_sugar_level(highest_cell):
				highest = cells_refs[i]
		move (agent,highest)
Example #10
0
def move_to_the_lowest_sugar_level_cell(agent):
    """
		RA3 : déplace l'agent dans la cellule à quantité de sucre la moins élevée
		et assez pour son métabolisme
	"""
    cells_refs = accecible_positions(agent)
    if len(cells_refs) > 0:
        lowest = cells_refs[0]
        env = get_env(agent)
        for i in range(len(cells_refs)):
            cell = e.get_cell(env, cells_refs[i])
            lowest_cell = e.get_cell(env, lowest)
            if c.get_sugar_level(cell) < c.get_sugar_level(lowest_cell):
                lowest = cells_refs[i]
        move(agent, lowest)
Example #11
0
def eat_quarter(agent):
	"""
		consomme le quart du sucre de la cellule
	"""
	cell = get_cell(agent)
	amount = c.get_sugar_level(cell)/4
	consumption_sugar(agent,amount)
Example #12
0
def eat_half(agent):
	"""
		consomme la moitié du sucre de la cellule
	"""
	cell = get_cell(agent)	
	amount = c.get_sugar_level(cell)/2
	consumption_sugar(agent,amount)
Example #13
0
def eat_all(agent):
	"""
		consomme tout le sucre de la cellule
	"""
	cell = get_cell(agent)
	amount = c.get_sugar_level(cell) 
	consumption_sugar(agent,amount)
Example #14
0
def env_plot(env, showGrid=True):
    """
        Add a plot of the environment (possibly including a
        grid) to the current pylab plot. 
        To actually show the plot, the pylab.show() method
        still has to be invoked.
    """
    ax = plt.gca()
    ax.set_aspect('equal', 'box')
    ax.xaxis.set_major_locator(plt.NullLocator())
    ax.yaxis.set_major_locator(plt.NullLocator())
    sz = e.size(env)
    mat = []
    row = []
    col = []
    sugar = []
    size_factor = 3000.0/sz/e.get_max_capacity(env)
    # Plot sugar level of each cell
    for cell_ref in e.get_cell_refs(env):
        cell = e.get_cell(env, cell_ref)
        (y, x) = cell_ref
        row.append(y+0.5)
        col.append(x+0.5)
        sugar.append(size_factor*c.get_sugar_level(cell))
    plt.scatter(row, col, sugar, color='yellow', alpha=1)#, marker='s')
    # Plot the grid (or only an outer border)
    for k in range(sz+1):
        if showGrid or k == 0 or k == sz:
            plt.plot([k, k], [0, sz], color='black', alpha=0.1, ls='-')
            plt.plot([0, sz], [k, k], color='black', alpha=0.1, ls='-')
Example #15
0
def eat_sugar(agent, mas):
    matrix = e.get_cell_matrix(m.get_env(mas))
    pop = m.get_pop(mas)
    (col, lig) = get_pos(agent)
    vision = get_vision(agent)
    sugar_agent = get_sugar_level(agent)
    max_sugar_agent = get_max_sugar_capacity(agent)
    sugar_cell = c.get_sugar_level(matrix[lig][col])
    new_sugar_agent = 0.0
    new_sugar_cell = 0.0

    if sugar_agent == max_sugar_agent:
        new_sugar_agent = max_sugar_agent
        new_sugar_cell = sugar_cell

    if sugar_agent < max_sugar_agent:
        if sugar_agent + sugar_cell < max_sugar_agent:
            new_sugar_agent = sugar_agent + sugar_cell
            new_sugar_cell = 0.0

        if sugar_agent + sugar_cell > max_sugar_agent:
            new_sugar_agent = max_sugar_agent
            new_sugar_cell = sugar_cell + (sugar_agent - max_sugar_agent)

    c.set_sugar_level(matrix[lig][col], new_sugar_cell)
    return new_sugar_agent, new_sugar_cell
Example #16
0
def eat_half(agent):
    """
		consomme la moitié du sucre de la cellule
	"""
    cell = get_cell(agent)
    amount = c.get_sugar_level(cell) / 2
    consumption_sugar(agent, amount)
Example #17
0
def eat_all(agent):
    """
		consomme tout le sucre de la cellule
	"""
    cell = get_cell(agent)
    amount = c.get_sugar_level(cell)
    consumption_sugar(agent, amount)
Example #18
0
def eat_quarter(agent):
    """
		consomme le quart du sucre de la cellule
	"""
    cell = get_cell(agent)
    amount = c.get_sugar_level(cell) / 4
    consumption_sugar(agent, amount)
def eat_all(agent, env):
    cell_ref = get_pos(agent)
    cell = e.get_cell(env, cell_ref )
    sugar = c.get_sugar_level( cell ) # On enregistre le taux de sucre de la cellule
    sugar += get_sugar_level ( agent ) # On ajoute la réserve de l'agent
    c.set_sugar_level( cell , 0 ) # On vide la cellule
    set_sugar_level ( agent , sugar ) # On donne tout à l'agent
Example #20
0
def better_ressource_cell_position(l, l_pos, agent):
    """
        Returns the position of the cell in the environment which has
        enough sugar for the metabolism of the agent. But this sugar
        level must be near the metabolism of the agent (as near as possible).
        But if the metabolism of the agent is bigger than every sugar level of
        every cell, then this function returns the position of the nearest
        sugar level. Used for RA3.
    """
    l_res = []
    for elem in l:
        l_res.append(c.get_sugar_level(elem))
    l_res.append(get_metabolism(agent))
    l_res.sort()
    best_res = best_ressource(agent, l_res, get_metabolism(agent))
    for i in range(len(l)):
        if c.get_sugar_level(l[i]) == best_res:
            pos_cell = l_pos[i]
    return pos_cell
Example #21
0
def is_possible_to_move(agent,position):
	"""
		vérifie si un agent peut se déplcer, on vérifie si: la quantité de sucre de la cellule additionnée 
			à la réserve de sucre de l'agent est suffisante au métabolisme, 
			si il n'y a pas d'agent dans sa cellule
	"""
	env = get_env(agent)
	cell = e.get_cell(env,position)	
	possible_to_move =  not c.agent_is_present(cell)  \
				and (c.get_sugar_level(cell)+get_sugar_level(agent)) >= get_metabolism(agent)
	return possible_to_move
Example #22
0
def __compute_cell_color(cell):
    # Compute the color of the cell, depending on its sugar level
    sugar_level = c.get_sugar_level(cell)
    env = c.get_env(cell)
    max_capacity = e.get_max_capacity(env)
    ratio = sugar_level / max_capacity
    color_level = int(255 * (1 - ratio))
    # convert the color level to hexadecimal representation
    hex_color_level = hex(color_level)[2:].zfill(2)
    color_code = '#' + 'ff' + 'ff' + hex_color_level
    return color_code
Example #23
0
def __compute_cell_color(cell):
    # Compute the color of the cell, depending on its sugar level
    sugar_level = c.get_sugar_level(cell)
    env = c.get_env(cell)
    max_capacity = e.get_max_capacity(env)
    ratio = sugar_level / max_capacity
    color_level = int(255 * (1 - ratio))
    # convert the color level to hexadecimal representation
    hex_color_level = hex(color_level)[2:].zfill(2)
    color_code = '#' + 'ff' + 'ff' + hex_color_level
    return color_code
Example #24
0
def is_possible_to_move(agent, position):
    """
		vérifie si un agent peut se déplcer, on vérifie si: la quantité de sucre de la cellule additionnée 
			à la réserve de sucre de l'agent est suffisante au métabolisme, 
			si il n'y a pas d'agent dans sa cellule
	"""
    env = get_env(agent)
    cell = e.get_cell(env, position)
    possible_to_move =  not c.agent_is_present(cell)  \
       and (c.get_sugar_level(cell)+get_sugar_level(agent)) >= get_metabolism(agent)
    return possible_to_move
Example #25
0
def eat_and_consumpt_sugar(agent, cell):
    """
        Adds the sugar level of the cell to the sugar level of
        the agent and makes the cell empty.
        It also reduce the agent's sugar level because of his
        metabolism.
    """
    new = get_sugar_level(agent) + c.get_sugar_level(cell)
    set_sugar_level(agent, new)
    c.set_sugar_level(cell, 0)
    new2 = get_sugar_level(agent) - get_metabolism(agent)
    set_sugar_level(agent, new2)
Example #26
0
def sort_sugar_level_desc(env, cell_ref_list):
    """
        Sort the list of cells reference in descending order of 
        their corresponding sugar level.
    """
    # Build a separate list that assigns the sugar level to each
    # corresponding cell referenced in the list given as parameter.
    sugar_level_list = []
    for cell_ref in cell_ref_list:
        cell = get_cell(cell_ref)
        level = c.get_sugar_level(cell)
        sugar_level_list.append(level)
    # Call sorting function.
    sort_on_second_list(cell_ref_list, sugar_level_list, order_numeric_asc)
def sort_sugar_level_desc(env, cell_ref_list):
    """
        Sort the list of cells reference in descending order of 
        their corresponding sugar level.
    """
    # Build a separate list that assigns the sugar level to each
    # corresponding cell referenced in the list given as parameter.
    sugar_level_list = []
    for cell_ref in cell_ref_list:
        cell = get_cell(env, cell_ref)
        level = c.get_sugar_level(cell)
        sugar_level_list.append(level)
    # Call sorting function.
    u.sort_on_second_list(cell_ref_list, sugar_level_list, order_numeric_asc)
Example #28
0
def get_is_living(agent):
	"""
		vérifie si un agent est vivant : s'il a assez à manger, s'il peut se déplacer et si son age ne dépasse pas la limite 
	"""
	cell = get_cell(agent)
	cell_sugar_level = c.get_sugar_level(cell)
	metabolism = get_metabolism(agent)
	agent_sugar_level = get_sugar_level(agent)
	age = get_age(agent)
	pop = get_population(agent)
	max_age = p.get_pop_property(pop,"MAX_AGENT_AGE")
	is_alive = (cell_sugar_level+agent_sugar_level >= metabolism) and age <= max_age
	if not is_alive:
		kill(agent)
	return is_alive
Example #29
0
def get_is_living(agent):
    """
		vérifie si un agent est vivant : s'il a assez à manger, s'il peut se déplacer et si son age ne dépasse pas la limite 
	"""
    cell = get_cell(agent)
    cell_sugar_level = c.get_sugar_level(cell)
    metabolism = get_metabolism(agent)
    agent_sugar_level = get_sugar_level(agent)
    age = get_age(agent)
    pop = get_population(agent)
    max_age = p.get_pop_property(pop, "MAX_AGENT_AGE")
    is_alive = (cell_sugar_level + agent_sugar_level >=
                metabolism) and age <= max_age
    if not is_alive:
        kill(agent)
    return is_alive
Example #30
0
def better_ressources_for_average(l, l_pos, agent):
    """
        Returns the list of the positions of the cells which have enough
        sugar compared with the metabolism of the agent. But if the metabolism
        of the agent is bigger than every sugar level of every cell, it
        returns a list containing the cell which has the biggest sugar level.
    """
    l_res = []
    l_good_pos = []
    for elem in l:
        l_res.append(c.get_sugar_level(elem))
    u.sort_on_second_list(l_pos, l_res, u_mod.order_scalar_asc)
    if len(l_res) > 0:
        if get_metabolism(agent) > max(l_res):
            l_good_pos = [l_pos[len(l_pos) - 1]]
        else:
            for i in range(len(l_res)):
                if l_res[i] > get_metabolism(agent):
                    l_good_pos.append(l_pos[i])
    return l_good_pos
Example #31
0
def consumption_sugar(agent, amount):
    """
		consomation de sucre par l'agent
		amount : quantité de sucre qui va être consomé (s'il le peut)
	"""
    cell = get_cell(agent)
    pop = get_population(agent)
    c_sugar_level = c.get_sugar_level(cell)
    a_sugar_level = get_sugar_level(agent)
    metabolism = get_metabolism(agent)
    max_sugar_level = p.get_pop_property(pop, "MAX_SUGAR_LEVEL")
    if (amount >= metabolism):
        if not has_max_sugar_level(agent):
            a_sugar_level += amount - metabolism
            if a_sugar_level > max_sugar_level:
                a_sugar_level = max_sugar_level
                c_sugar_level -= amount
        else:
            a_sugar_level -= metabolism
    elif (amount + a_sugar_level) >= metabolism:
        a_sugar_level -= metabolism - amount
        c_sugar_level -= amount
    set_sugar_level(agent, a_sugar_level)
    c.set_sugar_level(cell, c_sugar_level)
Example #32
0
def consumption_sugar(agent,amount):
	"""
		consomation de sucre par l'agent
		amount : quantité de sucre qui va être consomé (s'il le peut)
	"""
	cell = get_cell(agent)
	pop  = get_population(agent)
	c_sugar_level  = c.get_sugar_level(cell)
	a_sugar_level = get_sugar_level(agent)
	metabolism 	= get_metabolism(agent)
	max_sugar_level = p.get_pop_property(pop,"MAX_SUGAR_LEVEL")
	if (amount >= metabolism):
		if not has_max_sugar_level(agent):
			a_sugar_level += amount - metabolism
			if a_sugar_level > max_sugar_level:
				a_sugar_level = max_sugar_level
				c_sugar_level  -= amount 
		else:
			a_sugar_level -= metabolism
	elif (amount + a_sugar_level) >= metabolism:
		a_sugar_level -= metabolism - amount
		c_sugar_level -= amount
	set_sugar_level(agent,a_sugar_level)
	c.set_sugar_level(cell,c_sugar_level)
def RA2_is_possible( env, agent, target ):
    agent_ref = get_pos( agent )
    result =  u.vector_diff( target, agent_ref )
    target_unit = vector_one_max( result )
    cell_ref = u.vector_sum( agent_ref, target_unit )
    cell = e.get_cell( env, cell_ref )
    return ( not c.agent_is_present(cell) ) and get_metabolism(agent) <= get_sugar_level(agent) + c.get_sugar_level(cell)
def order_decrease_cell_by_sugar_level( cell1, cell2 ):
    """
        Renvoie vrai si le taux de sucre de la cell1 est plus petit que celui de la cell2.
    """
    return c.get_sugar_level( cell1 ) < c.get_sugar_level( cell2 )