[2] feat - оркестратор MazeSolver и статистика
This commit is contained in:
parent
acbd3a3892
commit
a966076c00
|
|
@ -246,18 +246,54 @@ class AStar(SearchAlgorithm):
|
|||
return []
|
||||
|
||||
|
||||
# ----------------------------- Оркестратор -----------------------------
|
||||
class Pathfinder:
|
||||
def __init__(self, maze):
|
||||
self._maze = maze
|
||||
self._algorithm = None
|
||||
self._listeners = []
|
||||
|
||||
def attach(self, listener):
|
||||
self._listeners.append(listener)
|
||||
|
||||
def notify(self, event, data):
|
||||
for lst in self._listeners:
|
||||
lst.update(event, data)
|
||||
|
||||
def set_algorithm(self, algorithm):
|
||||
self._algorithm = algorithm
|
||||
|
||||
def solve(self):
|
||||
if self._algorithm is None:
|
||||
return None
|
||||
t0 = time.perf_counter()
|
||||
path = self._algorithm.compute_path(self._maze, self._maze.start, self._maze.exit)
|
||||
t1 = time.perf_counter()
|
||||
elapsed_ms = (t1 - t0) * 1000
|
||||
|
||||
return PerformanceData(elapsed_ms, self._algorithm.visited_nodes(), len(path))
|
||||
|
||||
|
||||
class PerformanceData:
|
||||
def __init__(self, time_ms, visited, length):
|
||||
self.time_ms = time_ms
|
||||
self.visited_cells = visited
|
||||
self.path_length = length
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
builder = TxtLabyrinthBuilder()
|
||||
maze = builder.build_from_file("maze/level1.txt")
|
||||
|
||||
bfs = BFS()
|
||||
path = bfs.compute_path(maze, maze.start, maze.exit)
|
||||
print(f"BFS path length: {len(path)}")
|
||||
pf = Pathfinder(maze)
|
||||
pf.set_algorithm(BFS())
|
||||
stats = pf.solve()
|
||||
print(f"BFS: {stats.time_ms:.3f}ms, visited={stats.visited_cells}, length={stats.path_length}")
|
||||
|
||||
dfs = DFS()
|
||||
path = dfs.compute_path(maze, maze.start, maze.exit)
|
||||
print(f"DFS path length: {len(path)}")
|
||||
pf.set_algorithm(DFS())
|
||||
stats = pf.solve()
|
||||
print(f"DFS: {stats.time_ms:.3f}ms, visited={stats.visited_cells}, length={stats.path_length}")
|
||||
|
||||
astar = AStar()
|
||||
path = astar.compute_path(maze, maze.start, maze.exit)
|
||||
print(f"A* path length: {len(path)}")
|
||||
pf.set_algorithm(AStar())
|
||||
stats = pf.solve()
|
||||
print(f"A*: {stats.time_ms:.3f}ms, visited={stats.visited_cells}, length={stats.path_length}")
|
||||
Loading…
Reference in New Issue
Block a user