class_docstr: Line search algorithm which iteratively optimizes the value $f(x)$ for $x$ on the line between
  $x'$ and $x_0$ by optimistically taking the first acceptable $x$ starting from $x_0$ and
  moving towards $x'$.
class_docstr_tok: ["Line","search","algorithm","which","iteratively","optimizes","the","value","$","f","(","x",")","$","for","$","x","$","on","the","line","between","$","x","'","$","and","$","x_0","$","by","optimistically","taking","the","first","acceptable","$","x","$","starting","from","$","x_0","$","and","moving","towards","$","x","'","$","."]
docstr: Iteration loop body of the line search algorithm.
  
  Args:
      x: Current solution estimate $x_{t-1}$.
      deltas: Current difference $x_t - x_{t-1}$.
      improvement: Current improvement $(f(x') - f(x_t))$.
      last_improvement: Last improvement $(f(x') - f(x_{t-1}))$.
      base_value: Value $f(x')$ at $x = x'$.
  
  Returns:
      Updated arguments for next iteration.
docstr_tok: ["Iteration","loop","body","of","the","line","search","algorithm",".","Args",":","x",":","Current","solution","estimate","$","x_","{","t-1","}","$",".","deltas",":","Current","difference","$","x_t","-","x_","{","t-1","}","$",".","improvement",":","Current","improvement","$","(","f","(","x","'",")","-","f","(","x_t",")",")","$",".","last_improvement",":","Last","improvement","$","(","f","(","x","'",")","-","f","(","x_","{","t-1","}",")",")","$",".","base_value",":","Value","$","f","(","x","'",")","$","at","$","x","=","x","'","$",".","Returns",":","Updated","arguments","for","next","iteration","."]
code: def step(
      self,
      *,
      arguments,
      x,
      deltas,
      improvement,
      last_improvement,
      base_value,
  ):
      """
      Iteration loop body of the line search algorithm.
  
      Args:
          x: Current solution estimate $x_{t-1}$.
          deltas: Current difference $x_t - x_{t-1}$.
          improvement: Current improvement $(f(x') - f(x_t))$.
          last_improvement: Last improvement $(f(x') - f(x_{t-1}))$.
          base_value: Value $f(x')$ at $x = x'$.
  
      Returns:
          Updated arguments for next iteration.
      """
      next_x = x.fmap(
          function=(lambda t, delta: t + delta), zip_values=deltas
      )
  
      backtracking_factor = self.backtracking_factor.value()
      next_deltas = deltas.fmap(
          function=(lambda delta: delta * backtracking_factor)
      )
  
      target_value = self.fn_x(arguments, next_deltas)
      next_improvement = base_value - target_value
  
      return (
          arguments,
          next_x,
          next_deltas,
          next_improvement,
          improvement,
          base_value,
      )
  
file_path: tensorforce/tensorforce/core/optimizers/solvers/line_search.py
imports: import tensorflow
  from tensorforce import util
  from tensorforce.core import parameter_modules, SignatureDict, TensorSpec, tf_function, tf_util
  from tensorforce.core.optimizers.solvers import Iterative
label_desc: Use image node_id 6 for calling the LineSearch obj's underlying member method code with example usage: obj.step() and returns: arguments,  next_x,  next_deltas,  next_improvement,  improvement,  base_value