Source code for niapy.problems.problem
# encoding=utf8
"""Implementation of problems utility function."""
from abc import ABC, abstractmethod
import logging
from niapy.util.array import full_array
logging.basicConfig()
logger = logging.getLogger('niapy.problems.problem')
logger.setLevel('INFO')
__all__ = ['Problem']
[docs]class Problem(ABC):
r"""Class representing an optimization problem.
Attributes:
dimension (int): Dimension of the problem.
lower (numpy.ndarray): Lower bounds of the problem.
upper (numpy.ndarray): Upper bounds of the problem.
"""
[docs] def __init__(self, dimension=1, lower=None, upper=None, *args, **kwargs):
r"""Initialize Problem.
Args:
dimension (Optional[int]): Dimension of the problem.
lower (Optional[Union[float, Iterable[float]]]): Lower bounds of the problem.
upper (Optional[Union[float, Iterable[float]]]): Upper bounds of the problem.
"""
self.dimension = dimension
self.lower = full_array(lower, dimension)
self.upper = full_array(upper, dimension)
[docs] @abstractmethod
def _evaluate(self, x):
"""Evaluate solution."""
pass
[docs] def evaluate(self, x):
"""Evaluate solution.
Args:
x (numpy.ndarray): Solution.
Returns:
float: Function value of `x`.
"""
if x.shape[0] != self.dimension:
raise ValueError('Dimensions do not match. {} != {}'.format(x.shape[0], self.dimension))
return self._evaluate(x)
[docs] def __call__(self, x):
r"""Evaluate solution.
Args:
x (numpy.ndarray): Solution.
Returns:
float: Function value of `x`.
See Also:
:func:`niapy.problems.Problem.evaluate`
"""
return self.evaluate(x)
[docs] def name(self):
"""Get class name."""
return self.__class__.__name__