Performs one step of the differential evolution algorithm.


  • objective_function: A Python callable that accepts a batch of possible solutions and returns the values of the objective function at those arguments as a rank 1 real Tensor. This specifies the function to be minimized. The input to this callable may be either a single Tensor or a Python list of Tensors. The signature must match the format of the argument population. (i.e. objective_function(*population) must return the value of the function to be minimized).
  • population: Tensor or Python list of Tensors representing the current population vectors. Each Tensor must be of the same real dtype. The first dimension indexes individual population members while the rest of the dimensions are consumed by the value function. For example, if the population is a single Tensor of shape [n, m1, m2], then n is the population size and the output of objective_function applied to the population is a Tensor of shape [n]. If the population is a python list of Tensors then each Tensor in the list should have the first axis of a common size, say n and objective_function(*population) should return a `Tensor of shape [n]. The population must have at least 4 members for the algorithm to work correctly.
  • population_values: A Tensor of rank 1 and real dtype. The result of applying objective_function to the population. If not supplied it is computed using the objective_function. Default value: None.
  • differential_weight: Real scalar Tensor. Must be positive and less than 2.0. The parameter controlling the strength of mutation. Default value: 0.5
  • crossover_prob: Real scalar Tensor. Must be between 0 and 1. The probability of recombination per site. Default value: 0.9
  • seed: int or None. The random seed for this Op. If None, no seed is applied. Default value: None.
  • name: (Optional) Python str. The name prefixed to the ops created by this function. If not supplied, the default name 'one_step' is used. Default value: None


A sequence containing the following elements (in order): * next_population: A Tensor or Python list of Tensors of the same structure as the input population. The population at the next generation. * next_population_values: A Tensor of same shape and dtype as input population_values. The function values for the next_population.