code: def hill_climbing(problem):
      
      current = Node(problem.initial)
      while True:
          neighbors = current.expand(problem)
          if not neighbors:
              break
          neighbor = argmax_random_tie(neighbors,
                                       lambda node: problem.value(node.state))
          if problem.value(neighbor.state) <= problem.value(current.state):
              break
          current = neighbor
      return current.state
docs: From the initial node, keep choosing the neighbor with highest value,
      stopping when no neighbor is better. [Fig. 4.2]