input: 
  from typing import Callable, Dict, Union
  
  def optimize(fn: Callable[[Params], int], params: Params) -> Dict[str, int]:
   """ Optimizes the given function 'fn' by iterating over a range of parameters around the initial values of 'params' and returns the parameters that maximize the function output.
   
   >>> from dataclasses import dataclass
   >>> @dataclass
   ... class Params:
   ...     a: int
   ...     b: int
   ...     c: int
   >>> def get_result(params: Params) -> int:
   ...     return params.a + params.b + params.c
   >>> optimize(get_result, Params(1, 2, 3)) == {'a': 3, 'b': 4, 'c': 5}
   True
   """
   best_score = 0
   best_params = None
   for a in range(params.a - 10, params.a + 10):
    for b in range(params.b - 10, params.b + 10):
     for c in range(params.c - 10, params.c + 10):
      score = fn(Params(a, b , c))
      if score > best_score:
       best_score = score
       best_params = {
        'a': a,
        'b': b,
        'c': c
       }
   return best_params
  
output:     best_score = 0
      best_params = None
      for a in range(params.a - 10, params.a + 10):
          for b in range(params.b - 10, params.b + 10):
              for c in range(params.c - 10, params.c + 10):
                  score = fn(Params(a, b , c))
                  if score > best_score:
                      best_score = score
                      best_params = {
                          'a': a,
                          'b': b,
                          'c': c
                      }
      return best_params