input: Write a python function to perform gradient descent optimization and minimize a cost function. 
  assert np.isclose(gradient_descent_optimization(5, 0.2, 10)[0], 5)
  assert np.isclose(gradient_descent_optimization(0, 0.1, 10)[0], 5)
  assert np.isclose(gradient_descent_optimization(10, 0.05, 20)[0], 5)
output: import numpy as np
  
  def gradient_descent_optimization(x_init, learning_rate, num_iterations):
      def cost_function(x):
          return (x - 5) ** 2
      
      def gradient(x):
          return 2 * (x - 5)
      
      x = x_init
      for _ in range(num_iterations):
          x -= learning_rate * gradient(x)
      
      return x, cost_function(x)