sequince.steps.mutation.adaptive.policies.de
============================================

.. py:module:: sequince.steps.mutation.adaptive.policies.de

.. autoapi-nested-parse::

   Stage-boundary policies for a fixed bank of DE scale multipliers.



Classes
-------

.. autoapisummary::

   sequince.steps.mutation.adaptive.policies.de.DEScaleWeightPolicy
   sequince.steps.mutation.adaptive.policies.de.ESJDScaleWeightPolicy


Module Contents
---------------

.. py:class:: DEScaleWeightPolicy

   Bases: :py:obj:`Protocol`


   Choose categorical weights only from completed mutation blocks.


   .. py:method:: initialise(*, initial_weights, context)


   .. py:method:: update(*, current_weights, metrics, context)


.. py:class:: ESJDScaleWeightPolicy

   Favor DE scales with larger squared displacement per attempted move.

   :param learning_rate: Fraction of the proposed distribution used in each update, in (0, 1].
                         The remainder retains the current weights.
   :type learning_rate: float
   :param exploration_probability: Fraction of each proposed distribution assigned uniformly, in (0, 1].
                                   Initialization mixes the supplied weights with this uniform fraction
                                   too, ensuring every component can be measured. Every weight is then at
                                   least ``exploration_probability / n_components``.
   :type exploration_probability: float
   :param min_attempts: Require this many attempts in *every* ordinary component before
                        updating. Sparse blocks and blocks with zero total movement retain
                        the current distribution.
   :type min_attempts: int

   .. rubric:: Notes

   Scores are squared accepted-jump sums divided by attempts (rejections
   contribute zero). Explicit unit moves, component -1, are excluded; their
   probability is not adapted. Scores use mutation coordinates, including
   any configured transform. They are not normalized for coordinate scale
   or likelihood cost. Equal-cost proposals make ESJD a movement-per-cost
   proxy, not a convergence diagnostic. Host conversion occurs only after
   the mutation block has completed.


   .. py:attribute:: learning_rate
      :type:  float
      :value: 0.5



   .. py:attribute:: exploration_probability
      :type:  float
      :value: 0.1



   .. py:attribute:: min_attempts
      :type:  int
      :value: 20



   .. py:method:: initialise(*, initial_weights, context)


   .. py:method:: update(*, current_weights, metrics, context)


