'Get the min mu which minimize the surrogate.
Returns:
The mu_t.'

def _get_mu_tensor(self):

    const_fact = ((((self._dist_to_opt_avg ** 2) * (self._h_min ** 2)) / 2) / self._grad_var)
    coef = tf.Variable([(-1.0), 3.0, 0.0, 1.0], dtype=tf.float32, name='cubic_solver_coef')
    coef = tf.scatter_update(coef, tf.constant(2), (- (3 + const_fact)))
    roots = tf.py_func(np.roots, [coef], Tout=tf.complex64, stateful=False)
    root_idx = tf.logical_and(tf.logical_and(tf.greater(tf.real(roots), tf.constant(0.0)), tf.less(tf.real(roots), tf.constant(1.0))), tf.less(tf.abs(tf.imag(roots)), 1e-05))
    root = tf.reshape(tf.gather(tf.gather(roots, tf.where(root_idx)), tf.constant(0)), shape=[])
    dr = (self._h_max / self._h_min)
    mu = tf.maximum((tf.real(root) ** 2), (((tf.sqrt(dr) - 1) / (tf.sqrt(dr) + 1)) ** 2))
    return mu
