@filtered_optimizable¶
-
filtered_optimizable(filter, diff_filter)¶ -
A decorator for an Optimizable class for filtering optimization variables.
pythondef filter(x): # Perform some operation on x def diff_filter(x,v): # returns v @ dfilter(x) where dfilter(x) is the Jacobian function # of the filter @filtered_optimizable(filter, diff_filter) class problem(Optimizable): def J(self, x): #return something def G(self, x): # return something #...Then, a problem of the form
\[\begin{aligned} \min_{x\in \R^n}& \quad J(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}\]is converted into
\[\begin{aligned} \min_{x\in \R^n}& \quad J(\texttt{filter}(x))\\ \textrm{s.t.} & \left\{\begin{aligned} g_i(\texttt{filter}(x))&=0, \text{ for all } 1\leqslant i\leqslant p,\\ h_j(\texttt{filter}(x)) &\leqslant 0, \text{ for all }1\leqslant j \leqslant q,\\ \end{aligned}\right. \end{aligned}\]Several decorators can be appended to implement successive composition of filters.
python@filtered_optimizable(filter_2, diff_filter_2) @filtered_optimizable(filter_1, diff_filter_1) class problem(Optimizable): #...In that case,
J(x),G(x)will be replaced byJ(filter_1(filter_2(x))),G(filter_1(filter_2(x))), etc…- Parameters:
filter – the filtering function.
diff_filter –
the transpose derivative operator of the filtering function.
diff_filter(x,v)sould be equal tov @ dfilter(x)wheredfilteris the Jacobian matrix offilteratx, in order to match the chain ruleconsoled[J(filter(x))] @ dx =dJ(filter(x)) @ dfilter(x) @ dx