Remote Quadratic Programming

Remote Quadratic Programming#

This example considers a strongly convex optimization problem

\[\beta^* \in \argmin_{\norm{\beta}_1 \leq \tau} \sum_{i=1}^{5} f_i(\beta),\]

where each function \(f_i\) is a quadratic in \(S_{m_i, L_i}\).

The overall composite optimization problem is described using the constants

\[\begin{split}\begin{align*} m &= \mat{cccccc}{0, 1, -2, 1, 1, 0}\\ L &= \mat{cccccc}{5, 2, 1, 6, 1, \infty}.\\ \end{align*} \end{split}\]

The Synthesized algorithm to solve this problem must have a block-lower-triangular \(\Dcl\) matrix. Synthesis of an algorithm with convergence rate \(\rho < 0.7679\) is accomplished by using the code

Composite Quadratic Programming#
 1%form the operators
 2m = [0, 1, -2, 1, 1, 0];
 3L = [5, 2, 1, 6, 1, inf];
 4s = length(m);
 5
 6ops= cell(s, 1);
 7for i = 1:s
 8    ops{i} = op_sml(m(i), L(i));
 9end
10
11%form the systems
12sys = opt_system(ops);
13
14%solve the problem
15man = opt_synthesis(sys);
16sol = man.bisect();  %0.7679

Next, the same optimization problem must be solved in a remote setting. The network dynamics separating the oracles \(\partial f\) include time-delays and channel memory. The following code generates an algorithm with \(\rho < 0.9341\) in the networked setting.

Composite Quadratic Programming with Network Dynamics#
 1%form the operators
 2m = [0, 1, -2, 1, 1, 0];
 3L = [5, 2, 1, 6, 1, inf];
 4s = length(m);
 5
 6ops= cell(s, 1);
 7for i = 1:s
 8    ops{i} = op_sml(m(i), L(i));
 9end
10
11%describe the network
12channel = bridge_pass_through(s);
13z = tf('z', 1);
14channel.P(5, s+2) = z^(-1);
15channel.P(s+2, 5) = z^(-1);
16
17channel.P(s+4, 4) = z^(-2);
18channel.P(s+3, 5) = z^(-1);
19
20channel.P(1, s+1) =  0.5/(z-0.5);
21channel.P(s+1, 1) = 0.5/(z-0.5);
22
23channel.P(3, s+3) =  -1/(z+0.4);
24channel.P(s+3, 3) = -1/(z+0.4);
25
26%form the systems
27sys_channel = opt_system(ops, channel);
28
29
30%information structure for the channel case
31%enforces block-lower-triangularity of the closed-loop system
32config = opt_config();
33config.syn.D_mask = [1, 0, 1, 1, 0, 0;
34    1, 1, 1, 1, 0, 0;
35    1, 1, 1, 1, 1, 1;
36    1, 1, 1, 1, 0, 0;
37    1, 1, 1,1 ,1 ,0;
38    1, 1, 1, 1, 1, 1];
39
40%solve the problem
41man_channel = opt_synthesis(sys_channel, config);
42sol_channel = man_channel.bisect(); 
43% 0.9357 with block-triangular
44% 0.9341 with relaxed info structure