Point (x) in the search space along with objective function values (z[]) and feasbility indication (g). The type of x is problem specific. z[] and g hold Float64 values. g should be of length 1.

When evaluating the objective function, f in the constructor, the value returned will be a Tuple if both the objective function value and the measure of infeasibility are specified. If a tuple is not returned, the return value will be taken to be the objective function value and the feasibility measure will be assumed to be 0.0, i.e. a feasible point in the search domain.


Solve an optimisation problem, defined as the minimization of the values returned by the objective function, f. f returns not only the objective function values, an array of Float64 values, but also a measure of feasibility (≤0) or infeasibility (>0). The problem is solved using the Fresa algorithm. p0 is the initial population which has to have at least one member, a Point, and domain describes the search domain. This latter argument is an instance of the Fresa.Domain struct which has a lower and an upper members which are functions to be evaluated with a current point in the domain.

The return values for the solution of a single criterion problem are the best point and the full population at the end of the search.

For a multi-objective problem, the returned values are the set of indices for the points within the full population (the second returned value) approximating the Pareto front.

The population will consist of an array of Fresa.Point objects, each of which will have the point in the search space, the objective function value and the feasibility measure.


For single objective problems, the fitness is simply the normalised objective function value.

For multi-objective cases, there are three alternative measures of fitness ranking possible. The first is based on the Hadamard product of the rank of each member of population accoring to each criterion. The second is based on a weighted Borda ranking based on each criterion ranking. Finally, a measure based on dominance, similar to that used by the popular NSGA-II genetic algorithm, is available.