73 lines
2.0 KiB
Python
73 lines
2.0 KiB
Python
|
|
class State:
|
|
|
|
def __init__(self, direction, x, y):
|
|
self.direction = direction # kierunek w ktorym "patrzy wozek"
|
|
self.x = x
|
|
self.y = y
|
|
|
|
def get_direction(self):
|
|
return self.direction
|
|
|
|
def get_x(self):
|
|
return self.x
|
|
|
|
def get_y(self):
|
|
return self.y
|
|
|
|
def goal_test(self, goal): # sprawdza czy osiagnelismy cel
|
|
if self.x == goal[0] and self.y == goal[1]:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
class Node:
|
|
def __init__(self, action, state, parent):
|
|
self.state = state
|
|
self.action = action # akcja jaką ma wykonać (jedz prawo, lewo, przod)
|
|
self.direction = state.direction
|
|
self.parent = parent # ojciec wierzchołka
|
|
|
|
def get_action(self):
|
|
return self.action
|
|
|
|
def get_direction(self):
|
|
return self.direction
|
|
|
|
def get_parent(self):
|
|
return self.parent
|
|
|
|
|
|
def cost(node): # funkcja kosztu : ile kosztuje przejechanie przez dane pole
|
|
cost = 0
|
|
while node.parent is not None: # FIX!!!!!!!!!!
|
|
cost = cost + 1 + 1
|
|
node = node.parent
|
|
return cost
|
|
|
|
|
|
def f(goal, node): # funkcja zwracająca sumę funkcji kosztu oraz heurestyki
|
|
return cost(node) + heuristic(goal, node)
|
|
|
|
|
|
def heuristic(goal, node): # funkcja heurestyki : oszacowuje koszt osiągnięcia stanu końcowego (droga)
|
|
return abs(node.x - goal[0]) + abs(node.y - goal[1])
|
|
|
|
|
|
def print_moves(elem): # zwraca listę ruchów jakie należy wykonać by dotrzeć do punktu docelowego
|
|
moves_list = []
|
|
while elem.parent is not None:
|
|
moves_list.append(elem.action)
|
|
elem = elem.parent
|
|
moves_list.reverse()
|
|
return moves_list
|
|
|
|
|
|
def succ(elem): # funkcja następnika, przypisuje jakie akcje są możliwe do wykonania na danym polu oraz jaki będzie stan (kierunek, położenie) po wykonaniu tej akcji
|
|
pass
|
|
|
|
def graphsearch(explored, fringe, goaltest, istate): # przeszukiwanie grafu wszerz
|
|
pass
|
|
|