@minmax_optimizable

minmax_optimizable(optimizable)

A decorator to implement the min/max formulation for multiobjective optimization.

It allows to implement the optimization problem

(1)\[\begin{aligned} \min_{x\in \mathcal{X}} \max_{1\leqslant k \leqslant r}& \quad J_k(x)\\ \textrm{s.t.} & \left\{\begin{aligned} g_i(x)&=0, \text{ for all } 1\leqslant i\leqslant p,\\ h_j(x) &\leqslant 0, \text{ for all }1\leqslant j \leqslant q,\\ \end{aligned}\right. \end{aligned}\]

by constructing the optimization problem equivalent to (1):

\[\begin{aligned} \min_{(x,m)\in \mathcal{X}\times \R} \quad m\\ \textrm{s.t.} & \left\{\begin{aligned} g_i(x)&=0, \text{ for all } 1\leqslant i\leqslant p,\\ h_j(x) &\leqslant 0, \text{ for all }1\leqslant j \leqslant q,\\ J_k(x) -m & \leqslant 0,\text{ for all }1\leqslant k\leqslant r. \end{aligned}\right. \end{aligned}\]

The decorator can be used to implement the multiobjective optimization problem (1) by specifying a multivariate objective function in the definition of the Optimizable object as follows:

python
from nullspace_optimizer import EuclideanOptimizable, filtered_optimizable

@minmax_optimizable
class Problem(EuclideanOptimizable):  
     def x0(self):   
         #x0 
     #...

     def J(self, x): 
         # multivariate objective function   
         # return [J1, J2, J3, ..., Jr]

     def G(self, x): 
         # equality constraints
         # return [G1,G2,...,Gp] 

     def H(self, x): 
         # inequality constraints
         # return [H1,H2,...,Hq] 

     def dJ(self, x):    
         # return Jacobian matrix of the multivariate objective  
         # function  
         # return (dJi/dxj)_{i,j}

     # etc...