Robust optimization

The nullspace_optimizer packages includes a decorator minmax_optimizable() for conveniently implementing the robust min/max formulation of multiobjective optimization problems.

It allows to implement the optimization problem

\[\begin{aligned} \min_{x\in \mathcal{X}} \max_{1\leqslant i \leqslant r}& \quad J_i(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 specifying a multivariate objective function in the Python implementation 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...