## 2 Optimization Problems
### Continuous Optimization Problems  
Traditionally, optimization problems are grouped into two distinct natural categories: those with continuous variables and those with discrete variables [18]. In this subsection, we define the former, whereas the latter is defined in Section 2.2. When solving an instance of a continuous optimization problem, one is generally interested in finding a set of real numbers (possibly parameterizing a function). Continuous problems can be classified into two categories: unconstrained and constrained. The unconstrained continuous problems do not impose any explicit spatial constraints on the candidate solution's validity. In practice, however, the underlying data types are bound to the solution representations. Contrarily, constrained problems do impose explicit spatial constraints on the solution's validity. Following the mathematical definition, the constraints can be either hard, as they set explicit conditions for the solutions that are required to be satisfied, or soft, as they set conditions that penalize the fitness function if they are not satisfied [18].  
We have conceptualized a module called _continuous_ that contains different problem types from the continuous optimization field. In this release, the module contains one class called \(\mathbf{B}\mathbf{\alpha}\): a simplistic variant of a constrained continuous problem in which the parameters can take any real number within a given range of values, the box (also known as hyperrectangle), which can be regular case when the bounds are the same for every dimension or irregular when each dimension is allowed to have different bounds. The search space of an instance of the continuous box problem consists of the following key-value pairs.  
* _\"constraints\"_ is a tensor that holds the lower and the upper bounds for the search space's box. When the box is intended to be regular (i.e., all its dimensions are equally sized), it tensor holds only two values, each representing the lower and the upper bounds of each of the \(D\) dimensions of the problem, respectively. When the box is intended to be irregular, the tensor is a \(2\times D\) matrix. In such case, the first and the second row represent the lower and the upper bounds for each of the \(D\) dimensions of the problem, respectively.
* _\"n_dims\"_ is an integer value representing the dimensionality (\(D\)) of \(S\).  
When solving hard-constrained continuous problems, some authors in the scientific community bound the solutions to prevent the searching in infeasible regions [19]. The bounding mechanism generally consists of a random re-initialization of the solution on the outlying dimension. For this reason, besides the triplet _sspace, f an instance of the box problem includes an additional instance-variable called _bound_, which can optionally activate the solution bounding by assigning it the value _True_. When _bound_ is set to _False_, the outlying solution automatically receives the \"worst\" fitness score (corresponding to the largest or the smallest value allowed by the underlying data type).  
Similarly to some popular optimization libraries, such as [6,8], in this release, we implement a wide set of popular continuous optimization test functions (13 in this release): Ackley, Branin, Discus, Griewank, Hyper-ellipsoid, Kotanchek, Mexican Hat, Quartic, Rastrigin, Rosenbrock, Salomon, Sphere, and Weierstrass. The formal definitions and characteristics of the aforementioned functions can be found in [20,21].  
Appendix A.1, in the appendix, provides an example of how to create an instance of _Box_. Note that, in Section B, examples will be presented of how to solve this problem by using different iterative search algorithms contained in the current release of the library.