Constrained optimization utilities#
- pygmo.compare_fc(f1, f2, nec, tol)#
Compares two fitness vectors in a single-objective, constrained, case.
The following strict ordering is used:
\(f_1 \prec f_2\) if \(f_1\) is feasible and \(f_2\) is not.
\(f_1 \prec f_2\) if \(f_1\) is they are both infeasible, but \(f_1\) violates fewer constraints than \(f_2\), or in case they both violate the same number of constraints, if the \(L_2\) norm of the overall constraint violation is smaller.
\(f_1 \prec f_2\) if both fitness vectors are feasible and the objective value in \(f_1\) is smaller than the objectve value in \(f_2\)
Note
The fitness vectors are assumed to contain exactly one objective, nec equality constraints and the rest (if any) inequality constraints.
- Parameters
f1 (array-like object) – the first fitness vector
f2 (array-like object) – the second fitness vector
nec (
int
) – the number of equality consraints in the fitness vectorstol (array-like object) – tolerances to be accounted for in the constraints
- Raises
OverflowError – if nec is negative or greater than an implementation-defined value
ValueError – if f1 and f2 do not have equal size \(n\), if f1 does not have at least size 1, if nec is larger than \(n-1\) (too many constraints) or if the size of tol is not \(n - 1\)
TypeError – if f1, f2 or tol cannot be converted to a vector of floats
- Returns
True
if f1 is better than f2,False
otherwise.- Return type
bool
Examples
>>> import pygmo as pg >>> pg.compare_fc(f1 = [1,1,1], f2 = [1,2.1,-1.2], nec = 1, tol = [0]*2) False
- pygmo.sort_population_con(input_f, nec, tol)#
Sorts a population (intended here as a 2D array-like containing fitness vectors) assuming a single-objective, constrained case.
The following strict ordering is used (same as the one used in
pygmo.compare_fc()
):\(f_1 \prec f_2\) if \(f_1\) is feasible and \(f_2\) is not.
\(f_1 \prec f_2\) if \(f_1\) is they are both infeasible, but \(f_1\) violates fewer constraints than \(f_2\), or in case they both violate the same number of constraints, if the \(L_2\) norm of the overall constraint violation is smaller.
\(f_1 \prec f_2\) if both fitness vectors are feasible and the objective value in \(f_1\) is smaller than the objectve value in \(f_2\)
Note
The fitness vectors are assumed to contain exactly one objective, nec equality constraints and the rest (if any) inequality constraints.
- Parameters
input_f (2-D array-like object) – the fitness vectors
nec (
int
) – the number of equality constraints in the fitness vectorstol (array-like object) – tolerances to be accounted for in the constraints
- Raises
OverflowError – if nec is negative or greater than an implementation-defined value
ValueError – if the input fitness vectors do not have all the same size \(n >=1\), or if nec is larger than \(n-1\) (too many constraints) or if the size of tol is not equal to \(n-1\)
TypeError – if input_f cannot be converted to a vector of vector of floats or tol cannot be converted to a vector of floats.
- Returns
the indexes of the sorted fitnesses vectors.
- Return type
list
of 1D NumPy int array
Examples
>>> import pygmo as pg >>> idxs = pg.sort_population_con(input_f = [[1.2,0.1,-1],[0.2,1.1,1.1],[2,-0.5,-2]], nec = 1, tol = [1e-8]*2) >>> print(idxs) [0 2 1]