<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def search(self, max=False, **params) -> Tuple[np.ndarray, List[float]]: """ Search for the optimal solution This sets up the search for the optimization and calls the _search method Parameters max : bool (default False) If true find mximum of the objective function instead of minimum **params : dict [optional] Parameters for single objective optimization method """


        self._max = max
        if max:
            self._coeff = -1.0
        else:
            self._coeff = 1.0

        return self._search(**params)