Minimizacija norme afine funkcije
Afina funkcija je $F(x) = F0 + x1*F1 + x2*F2$.
Varijable su: $\gamma$, x1, x2, a problem se svodi na minimizaciju funkcije $g(x) = \gamma$, uz ograničenje $$ \begin{pmatrix} -\gamma I & F(x) \\ F(x)^T & -\gamma I \end{pmatrix} \le 0. $$
import picos as pic
import cvxopt as cvx
import numpy as np
F0 = cvx.matrix(np.random.randn(3,3))
F1 = cvx.matrix(np.random.randn(3,3))
F2 = cvx.matrix(np.random.randn(3,3))
I = cvx.matrix(np.eye(6))
F0 = pic.new_param('F0',F0)
F1 = pic.new_param('F1',F1)
F2 = pic.new_param('F2',F2)
Z = pic.Problem()
x1 = Z.add_variable('x1',1)
x2 = Z.add_variable('x2',1)
gamma = Z.add_variable('gamma',1)
Z.set_objective('min',gamma)
Z.add_constraint( (((0 & F0 + x1*F1 + x2*F2)) // (F0.T + x1*F1.T + x2*F2.T & 0)) - gamma * I <<0 )
<6×6 LMI Constraint: [0, F0 + x1·F1 + x2·F2; F0ᵀ + x1·F1ᵀ + x2·F2ᵀ, 0] - gamma·[6×6] ≼ 0>
Z.solve(verbose = 0, solver = 'cvxopt')
{'cvxopt_sol': {'x': <21x1 matrix, tc='d'>, 'y': <3x1 matrix, tc='d'>, 's': <36x1 matrix, tc='d'>, 'z': <36x1 matrix, tc='d'>, 'status': 'optimal', 'gap': 1.9716884117178657e-08, 'relative gap': 7.041988567732233e-09, 'primal objective': -2.7999028864552935, 'dual objective': -2.7999028874260166, 'primal infeasibility': 1.654014039024794e-15, 'dual infeasibility': 7.841403364724266e-09, 'primal slack': 5.16304003017391e-10, 'dual slack': 3.275459754603446e-09, 'residual as primal infeasibility certificate': None, 'residual as dual infeasibility certificate': None, 'iterations': 12}, 'status': 'optimal', 'time': 0.0229189395904541, 'primals': {'x1': <1x1 matrix, tc='d'>, 'x2': <1x1 matrix, tc='d'>, 'gamma': <1x1 matrix, tc='d'>}, 'duals': [<6x6 matrix, tc='d'>], 'obj': 2.799902886940655}
print ('Minimalna norma je {0:.4f}'.format(Z.obj_value()))
Minimalna norma je 2.7999