Skip to content

segmentation fault when passing trigger in place #194

@rickwierenga

Description

@rickwierenga

Passing triggers in place instead of storing them in a variable will result in a segmentation fault when evaluating an algorithm:

import ioh
import numpy as np

def styblinski_tang(x: np.ndarray) -> float:
    return np.sum(np.power(x, 4) - (16 * np.power(x, 2)) + (5 * x)) / 2
ioh.problem.wrap_real_problem(
    styblinski_tang,                                     # Handle to the function
    name="StyblinskiTang",                               # Name to be used when instantiating
    optimization_type=ioh.OptimizationType.MIN, # Specify that we want to minimize
    lb=-5,                                               # The lower bound
    ub=5,                                                # The upper bound
)

triggers = [ioh.logger.trigger.Each(3)]

logger = ioh.logger.Analyzer(
    folder_name="my-experiment",       
    algorithm_name="random-search",    
    triggers = [ioh.logger.trigger.Each(1)], # <----------- CRASH
    #triggers=triggers # no crash
)
problem = ioh.get_problem("StyblinskiTang", instance=1, dimension=2)
problem.attach_logger(logger)

class RandomSearch:
    'Simple random search algorithm'
    def __init__(self, n: int, length: float = 0.0):
        self.n: int = n
        self.length: float = length
        
    def __call__(self, problem: ioh.problem.RealSingleObjective) -> None:
        'Evaluate the problem n times with a randomly generated solution'
        
        for _ in range(self.n):
            # We can use the problems bounds accessor to get information about the problem bounds
            x = np.random.uniform(problem.bounds.lb, problem.bounds.ub)
            self.length = np.linalg.norm(x)
            
            problem(x)   

algorithm = RandomSearch(10)
algorithm(problem) # <---- will crash on this line

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions