изменение OpenNERO DFS в IDFS - PullRequest
       14

изменение OpenNERO DFS в IDFS

0 голосов
/ 01 марта 2019

У нас есть групповой проект, и я думаю, что проект, который мы предложили, был немного выше нашей зарплаты.Он требовал изменить алгоритм поиска в глубину в OpenNero Maze в интерактивную DFS.Мы думали, что это будет просто добавление нескольких строк, но, как 3 новичка на Python, мы не могли даже пройти через DFS намного реже, изменив его, чтобы сделать только 1 уровень в = a = время.Буду признателен за любые идеи.В качестве примера, код ниже показывает def act. Я понятия не имею, как это вызывается.Мне удалось добавить две метрики в инструкции prit в методах начала и конца, НО между этими двумя я потерян.Как бы я мог сказать, искать только итеративно и вернуться вверх, а не погружаться вниз через все узлы 1 ветви?

 class DFSSearchAgent(SearchAgent):
   """
Depth first search implementation
"""
def __init__(self):
    """
    A new Agent
    """
    # this line is crucial, otherwise the class is not recognized as anAgentBrainPtr by C++
    SearchAgent.__init__(self)
    self.visited = set([])
    self.adjlist = {}
    self.parents = {}

def dfs_action(self, observations):
    r = observations[0]
    c = observations[1]
    current_cell = (r, c)
    # if we have not been here before, build a list of other places we can go
    if current_cell not in self.visited:
        tovisit = []
        for m, (dr, dc) in enumerate(MAZE_MOVES):
            r2, c2 = r + dr, c + dc
            if not observations[2 + m]: # can we go that way?
                if (r2, c2) not in self.visited:
                    tovisit.append((r2, c2))
                    self.parents[(r2, c2)] = current_cell
        # remember the cells that are adjacent to this one
        self.adjlist[current_cell] = tovisit
    # if we have been here before, check if we have other places to visit
    adjlist = self.adjlist[current_cell]
    k = 0
    while k < len(adjlist) and adjlist[k] in self.visited:
        k += 1
    # if we don't have other neighbors to visit, back up
    if k == len(adjlist):
        next_cell = self.parents[current_cell]
    else: # otherwise visit the next place
        next_cell = adjlist[k]
    self.visited.add(current_cell) # add this location to visited list
    if current_cell != self.starting_pos:
        get_environment().mark_maze_blue(r, c) # mark it as blue on the maze
    v = self.constraints.get_instance() # make the action vector to return
    dr, dc = next_cell[0] - r, next_cell[1] - c # the move we want to make
    v[0] = get_action_index((dr, dc))
    # remember how to get back
    if next_cell not in self.backpointers:
        self.backpointers[next_cell] = current_cell
    return v

def initialize(self, init_info):
    self.constraints = init_info.actions
    return True

def start(self, time, observations):
    # return action
print '#######   start of DFS located in class DFS Search ####'
self.startT = timeit.default_timer()  
print self.startT


#################################  TEST FOR RESOURCE #############################################
process=psutil.Process(os.getpid())

    r = observations[0]
    c = observations[1]
    self.starting_pos = (r, c)
    get_environment().mark_maze_white(r, c)
    return self.dfs_action(observations)

def reset(self):
    self.visited = set([])
    self.parents = {}
    self.backpointers = {}
    self.starting_pos = None

def act(self, time, observations, reward):
    # return action
    return self.dfs_action(observations)

def end(self, time, reward):
    print  "Final reward @@@@ : %f, cumulative: %f" % (reward[0], self.fitness[0])
elapsedT = timeit.default_timer() - self.startT  
print self.startT
print'\nElapsed time below expressed in seconds'    
print elapsedT   
print 'Printing process ID stats ' 
    #print (process.memory_info()[0])
print 'Resource tracker '
print resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
self.reset()
    return True

def mark_path(self, r, c):
    get_environment().mark_maze_white(r,c)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...