Пример #1
0
def move_by_only_a_cell(agent):
    """
		RA2 : l'agent ne peut se déplacer que d'une cellule par cycle en verifiant certains conditions développées dans la fonction 
			is_interested_to_move
	"""
    xi, yi = get_pos(agent)
    env = get_env(agent)
    acc_refs = accecible_positions(agent)
    found_target = False
    size_poss = len(acc_refs)
    if size_poss != 0:
        sorted_list = e.sort_sugar_level_desc(env, acc_refs)
        i = 0
        #car la liste est triée
        maximum = sorted_list[0]
        while i < size_poss and not found_target:
            if not is_interested_to_move(agent, maximum):
                if i + 1 < size_poss:
                    maximum = sorted_list[i + 1]
            else:
                found_target = True
            i += 1
    if found_target:
        xf, yf = maximum
        xd, yd = u.vector_diff(get_pos(agent), maximum)
        if xd == 0:
            step = (1 if yd < 0 else -1)
            move_y = correct_position((xi, yi + step), env)
            move(agent, move_y)
        else:
            step = (1 if xd < 0 else -1)
            move_x = correct_position((xi + step, yi), env)
            move(agent, move_x)
Пример #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
Пример #3
0
def move_by_only_a_cell(agent):
	"""
		RA2 : l'agent ne peut se déplacer que d'une cellule par cycle en verifiant certains conditions développées dans la fonction 
			is_interested_to_move
	"""
	xi,yi = get_pos(agent)
	env = get_env(agent)
	acc_refs = accecible_positions(agent)
	found_target = False
	size_poss = len(acc_refs)
	if size_poss != 0:
		sorted_list = e.sort_sugar_level_desc(env,acc_refs)
		i = 0
		#car la liste est triée
		maximum = sorted_list[0]
		while i < size_poss and not found_target:
			if not is_interested_to_move(agent,maximum):
				if i+1 < size_poss:
					maximum = sorted_list[i+1]
			else:
				found_target = True
			i+=1
	if found_target:
		xf,yf = maximum
		xd,yd = u.vector_diff(get_pos(agent),maximum)
		if xd == 0:
			step  = (1 if yd < 0 else -1)
			move_y =  correct_position((xi,yi+step),env)
			move(agent,move_y)
		else:
			step  = (1 if xd < 0 else -1)
			move_x =  correct_position((xi+step,yi),env)
			move(agent,move_x)
Пример #4
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 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)
Пример #6
0
def unital_move(env, env_size, agent, pos_cell):
    """
        Makes the movement of the agent respecting the RA2 rule which makes
        the agents move from one cell to another cell which is just one cell further.
    """
    deplacement = deplacement_into_unit(u.vector_diff(pos_cell,
                                                      get_pos(agent)))
    save = ref_adapted_to_env(env_size,
                              u.vector_sum(get_pos(agent), deplacement))
    return possible_cell_position(env, agent, save)
Пример #7
0
def unital_move(env, env_size, agent, pos_cell):
    """
        Makes the walkers move from one cell to another cell which is just one
        cell further.
    """
    deplacement = a.deplacement_into_unit(
        u.vector_diff(pos_cell, get_pos(agent)))
    save = a.ref_adapted_to_env(env_size,
                                u.vector_sum(get_pos(agent), deplacement))
    return possible_cell_position(env, agent, save)
def RA2( pop, env, agent ):
    """
        Règle 2: Se dirige vers la cellule avec le plus de sucre mais de 1 case par 1 case.
    """
    agent_ref = get_pos(agent)
    cells_refs = get_cells_refs( env, agent )
    
    if len(cells_refs) > 0:
        sort_cells_refs_decrease( env, cells_refs )
        
        for target in cells_refs:
            if RA2_is_possible( env, agent, target ):
                result =  u.vector_diff( target, agent_ref )
                target_unit = vector_one_max( result )
                cell_ref = u.vector_sum( agent_ref, target_unit ) # Récupère la position de la cellule à coté de l'agent
                move_to(env, agent, cell_ref) # Bouge l'agent
                return
Пример #9
0
def is_interested_to_move(agent,target):
	"""
		- vérifier si le total_gain(agent,target) est plus grand que zèro 
		- si un autre agent peut atteindre la cellule avant lui
		- si il n'y a pas d'agents dans la direction choisie 
	"""
	pos = get_pos(agent)
	xd,yd = u.vector_diff(pos,target)
	env = get_env(agent)
	agent_on_way = False
	if xd == 0:
		step  = (1 if yd < 0 else -1)
		next_move = correct_position((pos[0],pos[1]+step),env)
		agent_on_way = c.get_present_agent(e.get_cell(env,next_move))
	else:
		step  = (1 if xd < 0 else -1)
		next_move = correct_position((pos[0]+step,pos[1]),env)
		agent_on_way = c.get_present_agent(e.get_cell(env,next_move))
	return (not is_an_agent_can_be_there_faster(agent,target) and not agent_on_way and total_gain(agent,target) > 0)
Пример #10
0
def is_interested_to_move(agent, target):
    """
		- vérifier si le total_gain(agent,target) est plus grand que zèro 
		- si un autre agent peut atteindre la cellule avant lui
		- si il n'y a pas d'agents dans la direction choisie 
	"""
    pos = get_pos(agent)
    xd, yd = u.vector_diff(pos, target)
    env = get_env(agent)
    agent_on_way = False
    if xd == 0:
        step = (1 if yd < 0 else -1)
        next_move = correct_position((pos[0], pos[1] + step), env)
        agent_on_way = c.get_present_agent(e.get_cell(env, next_move))
    else:
        step = (1 if xd < 0 else -1)
        next_move = correct_position((pos[0] + step, pos[1]), env)
        agent_on_way = c.get_present_agent(e.get_cell(env, next_move))
    return (not is_an_agent_can_be_there_faster(agent, target)
            and not agent_on_way and total_gain(agent, target) > 0)