class_docstr: A BOA class, inherited from Optimizer.
  
  This is the designed class to define BOA-related
  variables and methods.
  
  References:
      S. Arora and S. Singh. Butterfly optimization algorithm: a novel approach for global optimization.
      Soft Computing (2019).
docstr: Updates the agent's position towards the best butterfly (eq. 2).
  
  Args:
      agent_positio: Agent's current position.
      best_positio: Best agent's current position.
      fragrance: Agent's current fragrance value.
      random: A random number between 0 and 1.
  
  Returns:
      (np.ndarray): A new position based on best movement.
docstr_tok: ["Updates","the","agent","'s","position","towards","the","best","butterfly","(","eq",".","2",")",".","Args",":","agent_positio",":","Agent","'s","current","position",".","best_positio",":","Best","agent","'s","current","position",".","fragrance",":","Agent","'s","current","fragrance","value",".","random",":","A","random","number","between","0","and","1",".","Returns",":","(","np.ndarray",")",":","A","new","position","based","on","best","movement","."]
code: def _best_movement(
      self,
      agent_position: np.ndarray,
      best_position: np.ndarray,
      fragrance: np.ndarray,
      random: float,
  ) -> np.ndarray:
      """Updates the agent's position towards the best butterfly (eq. 2).
  
      Args:
          agent_positio: Agent's current position.
          best_positio: Best agent's current position.
          fragrance: Agent's current fragrance value.
          random: A random number between 0 and 1.
  
      Returns:
          (np.ndarray): A new position based on best movement.
  
      """
  
      new_position = (
          agent_position
          + (random**2 * best_position - agent_position) * fragrance
      )
  
      return new_position
  
imports: from typing import Any, Dict, Optional
  import numpy
  import opytimizer.math.random
  import opytimizer.utils.exception
  from opytimizer.core import Optimizer
  from opytimizer.core.space import Space
  from opytimizer.utils import logging
label_desc: Use image node_id 11 for calling the BOA obj's underlying member method code with example usage: obj._best_movement(agent_position, best_position, fragrance, random) and returns: new_position