CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-cma

CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

samplers-adaptation.mddocs/

Samplers and Adaptation

Advanced sampling methods and step-size adaptation techniques that extend CMA-ES functionality for specialized optimization scenarios.

Sampling Methods

Core Sampler Classes

# Access sampling functionality
from cma.sampler import GaussFullSampler, GaussStandardSampler
from cma.restricted_gaussian_sampler import RestrictedGaussianSampler

class GaussFullSampler:
    """
    Full Gaussian sampler with complete covariance matrix.
    
    Standard CMA-ES sampler that maintains and updates full covariance matrix.
    """
    
    def __init__(self, N, **kwargs):
        """
        Initialize Gaussian sampler.
        
        Parameters:
        -----------
        N : int
            Problem dimension.
        """
        pass
    
    def sample(self, number, update=None):
        """
        Sample candidate solutions.
        
        Parameters:
        -----------
        number : int
            Number of samples to generate.
        update : bool, optional
            Whether to update internal state.
            
        Returns:
        --------
        list[array]
            List of sampled solutions.
        """
        pass

class GaussStandardSampler:
    """
    Standard Gaussian sampler for basic sampling needs.
    """
    
    def __init__(self, N, **kwargs):
        """Initialize standard Gaussian sampler."""
        pass

class RestrictedGaussianSampler:
    """
    Gaussian sampler with restrictions on eigenvalue range.
    
    Prevents numerical issues by restricting condition number of
    covariance matrix within reasonable bounds.
    """
    
    def __init__(self, dimension, **kwargs):
        """
        Initialize restricted sampler.
        
        Parameters:
        -----------
        dimension : int
            Problem dimension.
        """
        pass

Step-Size Adaptation

Sigma Adaptation Classes

# Step-size adaptation methods
from cma.sigma_adaptation import CMAAdaptSigmaCSA, CMAAdaptSigmaTPA

class CMAAdaptSigmaCSA:
    """
    Cumulative Step-size Adaptation (CSA) for CMA-ES.
    
    Classic step-size adaptation method that adjusts global step-size
    based on evolution path length and direction.
    """
    
    def __init__(self, dimension, **kwargs):
        """
        Initialize CSA adaptation.
        
        Parameters:
        -----------
        dimension : int
            Problem dimension.
        """
        pass
    
    def update(self, es, **kwargs):
        """
        Update step-size based on evolution path.
        
        Parameters:
        -----------
        es : CMAEvolutionStrategy
            Evolution strategy instance.
        """
        pass

class CMAAdaptSigmaTPA:
    """
    Two-Point Adaptation (TPA) for step-size control.
    
    Alternative adaptation method using two reference points.
    """
    
    def __init__(self, dimension, **kwargs):
        """Initialize TPA adaptation."""
        pass
    
    def update(self, es, **kwargs):
        """Update step-size using TPA method."""
        pass

Recombination Weights

# Recombination weight computation
from cma.recombination_weights import RecombinationWeights

class RecombinationWeights:
    """
    Compute and manage recombination weights for parent selection.
    
    Determines how much each parent contributes to the next generation
    mean and covariance matrix updates.
    """
    
    def __init__(self, number_of_weights, **kwargs):
        """
        Initialize recombination weights.
        
        Parameters:
        -----------
        number_of_weights : int
            Number of parent solutions (mu).
        """
        pass
    
    @property
    def weights(self):
        """array: Current recombination weights."""
        pass
    
    @property
    def mueff(self):
        """float: Effective parent population size."""
        pass
    
    @property
    def diversity_emphasis(self):
        """float: Emphasis on population diversity."""
        pass

Usage Examples

Custom Sampling Configuration

import cma
from cma.sampler import GaussFullSampler

# Configure custom sampler
options = {
    'CMA_sampler': GaussFullSampler,
    'CMA_sampler_options': {'eigenmethod': 1}
}

es = cma.CMAEvolutionStrategy([0, 0, 0], 0.5, options)

# Optimization with custom sampler
while not es.stop():
    X = es.ask()
    es.tell(X, [cma.ff.sphere(x) for x in X])

Step-Size Adaptation Methods

import cma
from cma.sigma_adaptation import CMAAdaptSigmaCSA

# Configure step-size adaptation
options = {
    'AdaptSigma': CMAAdaptSigmaCSA,
    'CSA_dampfac': 1.0,  # Damping factor
    'CSA_damp_mueff_exponent': 0.5
}

es = cma.CMAEvolutionStrategy([1, 2, 3], 0.3, options)

# Monitor step-size evolution
while not es.stop():
    X = es.ask()
    es.tell(X, [cma.ff.rosen(x) for x in X])
    
    if es.countiter % 10 == 0:
        print(f"Iteration {es.countiter}: sigma = {es.sigma:.6f}")

Recombination Weight Customization

import cma
from cma.recombination_weights import RecombinationWeights

# Custom recombination weights
def create_custom_weights(mu):
    """Create custom recombination weights."""
    weights = RecombinationWeights(mu)
    # Modify weights for specific requirements
    return weights

options = {
    'CMA_recombination_weights': create_custom_weights,
    'popsize': 20
}

es = cma.CMAEvolutionStrategy([0] * 5, 0.8, options)

Advanced Sampling Strategies

Mirrored Sampling

# Enable mirrored sampling for improved efficiency
options = {
    'CMA_mirrors': 0.5,  # Fraction of mirrored solutions  
    'CMA_mirrormethod': 2  # Mirroring method
}

es = cma.CMAEvolutionStrategy([1, 1, 1], 0.5, options)

while not es.stop():
    X = es.ask()
    # Note: Some solutions in X are mirrored versions
    es.tell(X, [objective_function(x) for x in X])

Elitist Strategy

# Enable elitist selection
options = {
    'CMA_elitist': True,  # Use elitist variant
    'CMA_elitist_percentage': 0.1  # Percentage of elite solutions
}

es = cma.CMAEvolutionStrategy([0, 0, 0], 0.5, options)

Install with Tessl CLI

npx tessl i tessl/pypi-cma

docs

advanced-optimization.md

configuration.md

constraints-boundaries.md

core-optimization.md

fitness-functions.md

index.md

logging-analysis.md

samplers-adaptation.md

tile.json