Contents
Example of decLMI decentralized controller synthesis
This demo file shows how to use the DECLMI class to synthesize three LTI proportional controllers that guarantees stability while fulfilling constraints for the netwotk depicted below:
Controllers are:
- centralized ideal: each actuator can always exploit the whole state measurements to compute the control action;
- decentralized ideal: each actuator can exploit a subset of state measurements to compute the control action, and that set is time invariant;
- decentralized lossy: each controller can exploit a subset of state measurements, and measruements sent through some network links can be lost. No stochastic model of the dropouts is exploited here. The resulting controller guarantees robust convergence to the origin for any occurrence of packet dropouts.
Moreover, a stochastic controller is also computed, which guarantees closed-loop stability in the mean-square sense. It exploits a model of the packet dropouts as given by a two-state Markov chain. In this case the constraints are not guaranteed to hold at every time step.
clear variables clear globals close all clc
Plant model
Net describes how the network is connected: * 1 = wired (reliable); * -1 = wireless (unreliable, i.e., seubject to dropouts); * 0 = no link.
% e f g h j k l m Net = [ 1 1 1 0 0 -1 0 0 % a -1 1 0 1 1 0 0 0 % b 0 0 1 0 0 1 1 -1 % c 0 0 0 -1 1 0 1 1]; % d [m,n]=size(Net);
State space matrices of the LTI discrete-time model $x(k+1) = A x(k) + B u(k)
A =[0.2843 -0.2895 0.1268 -0.0624 -0.2098 0.1882 -0.0061 0.2227; -0.2729 0.5052 0.0129 -0.1057 -0.1361 0.2154 0.2799 -0.0183; 0.1610 -0.1229 0.1829 -0.4267 0.0589 -0.0905 -0.0417 -0.1709; -0.1084 -0.0138 -0.4611 -0.0735 -0.2013 0.1463 0.0854 -0.1567; -0.0300 -0.1167 -0.0012 -0.1847 0.3547 0.2081 0.0567 0.1566; 0.2852 0.3036 -0.0994 0.1240 0.1099 0.1262 0.0229 -0.1599 -0.0032 0.1558 -0.1285 0.1898 -0.0040 0.0017 0.7065 -0.1697; 0.1961 -0.0173 -0.1023 -0.1888 0.0327 -0.2866 -0.1202 0.3198]; B =[ 0 -2.2374 -0.4531 0; -0.1794 1.0976 1.3995 0.4287; -1.4671 0 -0.4620 -0.7370; 1.3953 -1.6146 0.0327 0.5649; 0.4408 -1.2287 0.7988 -1.3842; 0.5654 0.2074 0.8968 0.4603; 0 0 0.1379 0; 0 -1.0061 0 0.3798];
Sample time
Ts = 1;
Constraints on input and state sqrt(x'x) <= xmax, sqrt(u'u)<=umax
xmax = 150; umax = 150;
%Weights
Qx = eye(n);
Qu = 1e-2*eye(m);
Vertices of the initial state uncertainty polytope
X0 = [ 7.7618 7.7618 8.7618 8.7618 6.0485 7.0485 6.0485 7.0485 6.2866 6.2866 6.2866 6.2866 6.6018 6.6018 6.6018 6.6018 5.1547 5.1547 5.1547 5.1547 7.8859 7.8859 7.8859 7.8859 5.1507 5.1507 5.1507 5.1507 5.0470 5.0470 5.0470 5.0470];
Markov chain description
The two-state Markov chain is described by:
- d : array, where d(i) is the probability of losing a packet being in the i-th state of the Markov chain;
- q : array, where q(i) is the probability of of remaining in the i-th state of the Markov chain.
Mc.d = [.1 .5]; Mc.q = [.8 .5];
Computation instance creation
obj = decLMI(Net,A,B,Qx,Qu,X0,xmax,umax,Mc);
Now all the controller synthesis problems are formulated and solved. The time needed for each computation is stored for comparison purposes.
Centralized ideal
tic obj=obj.solve_centralized_lmi(); CPUtime.centralized = toc;
Solving centralized SDP problem... SeDuMi 1.3 by AdvOL, 2005-2008 and Jos F. Sturm, 1998-2003. Alg = 2: xz-corrector, theta = 0.250, beta = 0.500 eqs m = 69, order n = 101, dim = 1573, blocks = 9 nnz(A) = 1872 + 0, nnz(ADA) = 4761, nnz(L) = 2415 it : b*y gap delta rate t/tP* t/tD* feas cg cg prec 0 : 7.53E+004 0.000 1 : -1.78E+004 2.49E+004 0.000 0.3311 0.9000 0.9000 1.07 1 1 8.5E+000 2 : -1.94E+004 6.62E+003 0.000 0.2654 0.9000 0.9000 1.41 1 1 2.8E+000 3 : -5.13E+003 2.66E+003 0.000 0.4016 0.9000 0.9000 2.59 1 1 7.4E-001 4 : -4.41E+002 6.11E+002 0.000 0.2299 0.9000 0.9000 2.61 1 1 3.3E-001 5 : -1.02E+002 1.50E+002 0.000 0.2449 0.9000 0.9000 1.20 1 1 2.8E-001 6 : -7.92E+001 8.63E+001 0.000 0.5769 0.9000 0.9000 0.98 1 1 2.2E-001 7 : -1.33E+002 4.53E+001 0.000 0.5247 0.9000 0.9000 0.39 1 1 1.4E-001 8 : -1.77E+002 1.70E+001 0.000 0.3752 0.9000 0.9000 0.43 1 1 6.9E-002 9 : -1.92E+002 1.18E+001 0.008 0.6939 0.9000 0.9000 0.47 1 1 5.6E-002 10 : -2.25E+002 6.00E+000 0.000 0.5095 0.9000 0.9000 0.17 1 1 5.1E-002 11 : -2.47E+002 3.89E+000 0.000 0.6483 0.9000 0.9000 0.04 1 1 5.1E-002 12 : -3.03E+002 1.59E+000 0.000 0.4079 0.9000 0.9000 0.17 1 1 3.1E-002 13 : -3.32E+002 8.80E-001 0.000 0.5545 0.9000 0.9000 0.31 1 1 2.5E-002 14 : -3.60E+002 4.66E-001 0.000 0.5296 0.9000 0.9000 0.42 1 1 1.8E-002 15 : -3.82E+002 2.60E-001 0.000 0.5568 0.9000 0.9000 0.55 1 1 1.2E-002 16 : -3.98E+002 1.47E-001 0.000 0.5652 0.9000 0.9000 0.66 1 1 8.2E-003 17 : -4.10E+002 7.85E-002 0.000 0.5347 0.9000 0.9000 0.76 1 1 5.0E-003 18 : -4.19E+002 3.92E-002 0.000 0.5001 0.9000 0.9000 0.84 1 1 2.7E-003 19 : -4.24E+002 1.71E-002 0.000 0.4348 0.9000 0.9000 0.91 1 1 1.3E-003 20 : -4.27E+002 5.79E-003 0.000 0.3394 0.9000 0.9000 0.95 1 1 4.4E-004 21 : -4.28E+002 1.32E-003 0.000 0.2271 0.9000 0.9000 0.98 1 1 1.0E-004 22 : -4.29E+002 8.26E-005 0.192 0.0628 0.9900 0.9900 0.99 1 1 6.5E-006 23 : -4.29E+002 4.75E-006 0.000 0.0575 0.9900 0.9900 1.00 1 1 3.7E-007 24 : -4.29E+002 1.56E-008 0.398 0.0033 0.9990 0.9990 1.00 4 4 1.2E-009 Run into numerical problems. iter seconds digits c*x b*y 24 1.5 9.3 -4.2868543504e+002 -4.2868543527e+002 |Ax-b| = 2.7e-011, [Ay-c]_+ = 1.1E-008, |x|= 4.3e+002, |y|= 1.1e+003 Detailed timing (sec) Pre IPM Post 7.970E-001 1.703E+000 7.799E-002 Max-norms: ||b||=1, ||c|| = 22500, Cholesky |add|=1, |skip| = 9, ||L.L|| = 94286.7. \nCentralized SDP problem solved!\n

Decentralized ideal
tic obj = obj.solve_dec_ideal_lmi(); CPUtime.dec_ideal = toc;
\nSolving decentralized SDP problem...\n SeDuMi 1.3 by AdvOL, 2005-2008 and Jos F. Sturm, 1998-2003. Alg = 2: xz-corrector, theta = 0.250, beta = 0.500 eqs m = 29, order n = 101, dim = 1573, blocks = 9 nnz(A) = 616 + 0, nnz(ADA) = 841, nnz(L) = 435 it : b*y gap delta rate t/tP* t/tD* feas cg cg prec 0 : 7.53E+004 0.000 1 : -1.76E+004 2.43E+004 0.000 0.3227 0.9000 0.9000 1.07 1 1 8.2E+000 2 : -1.92E+004 6.63E+003 0.000 0.2727 0.9000 0.9000 1.44 1 1 2.7E+000 3 : -5.30E+003 2.85E+003 0.000 0.4299 0.9000 0.9000 2.68 1 1 7.4E-001 4 : -4.06E+002 5.81E+002 0.000 0.2038 0.9000 0.9000 2.43 1 1 3.7E-001 5 : -1.02E+002 1.51E+002 0.000 0.2593 0.9000 0.9000 1.14 1 1 3.2E-001 6 : -8.58E+001 8.72E+001 0.000 0.5790 0.9000 0.9000 0.96 1 1 2.5E-001 7 : -1.34E+002 5.06E+001 0.000 0.5807 0.9000 0.9000 0.35 1 1 1.6E-001 8 : -1.94E+002 1.77E+001 0.226 0.3498 0.9000 0.9000 0.38 1 1 7.5E-002 9 : -2.12E+002 1.25E+001 0.280 0.7077 0.9000 0.9000 0.47 1 1 6.1E-002 10 : -2.26E+002 9.76E+000 0.039 0.7784 0.9000 0.9000 0.23 1 1 5.8E-002 11 : -2.34E+002 7.31E+000 0.000 0.7492 0.9000 0.9000 -0.31 1 1 7.0E-002 12 : -2.95E+002 3.23E+000 0.000 0.4419 0.9000 0.9000 -0.15 1 1 5.7E-002 13 : -3.83E+002 1.02E+000 0.000 0.3148 0.9000 0.9000 0.18 1 1 2.7E-002 14 : -4.30E+002 4.25E-001 0.000 0.4176 0.9000 0.9000 0.39 1 1 1.7E-002 15 : -4.56E+002 2.25E-001 0.000 0.5300 0.9000 0.9000 0.47 1 1 1.2E-002 16 : -4.87E+002 8.19E-002 0.000 0.3637 0.9000 0.9000 0.64 1 1 5.6E-003 17 : -5.00E+002 3.65E-002 0.000 0.4455 0.9000 0.9000 0.79 1 1 2.8E-003 18 : -5.09E+002 1.11E-002 0.000 0.3053 0.9000 0.9000 0.90 1 1 9.4E-004 19 : -5.12E+002 3.43E-003 0.000 0.3078 0.9000 0.9000 0.95 1 1 3.0E-004 20 : -5.13E+002 3.06E-004 0.000 0.0894 0.9900 0.9900 0.98 1 1 2.7E-005 21 : -5.13E+002 7.36E-005 0.000 0.2402 0.9000 0.9000 1.00 1 1 6.6E-006 22 : -5.13E+002 2.61E-007 0.294 0.0035 0.9990 0.9990 1.00 1 1 2.3E-008 23 : -5.13E+002 5.16E-008 0.000 0.1978 0.9000 0.9000 1.00 2 2 4.6E-009 24 : -5.13E+002 1.39E-009 0.000 0.0269 0.9900 0.9900 1.00 2 2 1.2E-010 iter seconds digits c*x b*y 24 0.7 10.3 -5.1298252214e+002 -5.1298252217e+002 |Ax-b| = 2.8e-012, [Ay-c]_+ = 1.1E-009, |x|= 5.1e+002, |y|= 9.8e+002 Detailed timing (sec) Pre IPM Post 6.301E-002 3.440E-001 1.501E-002 Max-norms: ||b||=1, ||c|| = 22500, Cholesky |add|=0, |skip| = 0, ||L.L|| = 362.831. \nDecentralized SDP problem solved!\n

Decentralized lossy (robust)
tic obj = obj.solve_dec_lossy_lmi(); CPUtime.dec_lossy = toc;
\nSolving dec. lossy SDP problem...\n SeDuMi 1.3 by AdvOL, 2005-2008 and Jos F. Sturm, 1998-2003. Alg = 2: xz-corrector, theta = 0.250, beta = 0.500 eqs m = 37, order n = 941, dim = 19333, blocks = 54 nnz(A) = 6056 + 0, nnz(ADA) = 1273, nnz(L) = 691 it : b*y gap delta rate t/tP* t/tD* feas cg cg prec 0 : 1.78E+006 0.000 1 : -1.93E+004 4.80E+005 0.000 0.2692 0.9000 0.9000 1.01 1 1 1.0E+002 2 : -3.01E+004 4.34E+004 0.000 0.0906 0.9900 0.9900 1.14 1 1 9.3E+000 3 : -2.40E+004 1.34E+004 0.000 0.3093 0.9000 0.9000 1.36 1 1 3.3E+000 4 : -6.26E+003 4.85E+003 0.000 0.3608 0.9000 0.9000 2.43 1 1 7.9E-001 5 : -7.24E+002 1.03E+003 0.000 0.2117 0.9000 0.9000 1.99 1 1 4.1E-001 6 : -3.94E+002 5.58E+002 0.000 0.5441 0.9000 0.9000 1.13 1 1 3.7E-001 7 : -3.69E+002 4.89E+002 0.000 0.8763 0.9000 0.9000 1.01 1 1 3.5E-001 8 : -4.46E+002 3.58E+002 0.000 0.7310 0.9000 0.9000 0.55 1 1 2.7E-001 9 : -5.19E+002 2.28E+002 0.000 0.6362 0.9000 0.9000 0.56 1 1 1.9E-001 10 : -5.62E+002 1.46E+002 0.000 0.6404 0.9000 0.9000 0.64 1 1 1.3E-001 11 : -5.74E+002 1.30E+002 0.133 0.8925 0.9000 0.9000 0.60 1 1 1.2E-001 12 : -6.23E+002 8.46E+001 0.000 0.6501 0.9000 0.9000 0.35 1 1 1.1E-001 13 : -6.76E+002 5.40E+001 0.000 0.6387 0.9000 0.9000 0.29 1 1 8.7E-002 14 : -7.84E+002 1.85E+001 0.000 0.3432 0.9000 0.9000 0.54 1 1 3.5E-002 15 : -8.24E+002 8.69E+000 0.000 0.4686 0.9000 0.9000 0.67 1 1 2.0E-002 16 : -8.48E+002 4.24E+000 0.000 0.4886 0.9000 0.9000 0.78 1 1 1.1E-002 17 : -8.69E+002 9.78E-001 0.000 0.2305 0.9000 0.9000 0.89 1 1 2.7E-003 18 : -8.75E+002 2.06E-001 0.000 0.2101 0.9000 0.9000 0.96 1 1 5.8E-004 19 : -8.76E+002 5.68E-002 0.000 0.2762 0.9000 0.9000 0.99 1 1 1.6E-004 20 : -8.76E+002 1.91E-002 0.000 0.3359 0.9000 0.9000 1.00 1 1 5.5E-005 21 : -8.76E+002 4.35E-003 0.000 0.2283 0.9000 0.9000 1.00 1 1 1.2E-005 22 : -8.76E+002 8.86E-004 0.000 0.2035 0.9000 0.9000 1.00 1 1 2.5E-006 23 : -8.76E+002 6.95E-005 0.403 0.0785 0.9900 0.9900 1.00 1 3 2.0E-007 24 : -8.76E+002 1.73E-005 0.000 0.2490 0.9000 0.9000 1.00 7 7 5.0E-008 25 : -8.76E+002 1.67E-006 0.433 0.0967 0.9900 0.9900 1.00 15 15 4.8E-009 26 : -8.76E+002 3.76E-007 0.000 0.2244 0.9000 0.9000 1.00 26 26 1.1E-009 27 : -8.76E+002 2.43E-007 0.000 0.6456 0.9000 0.9000 1.00 51 51 7.0E-010 iter seconds digits c*x b*y 27 9.5 9.0 -8.7629587526e+002 -8.7629587608e+002 |Ax-b| = 5.5e-011, [Ay-c]_+ = 2.1E-009, |x|= 8.8e+002, |y|= 1.4e+003 Detailed timing (sec) Pre IPM Post 7.800E-002 4.766E+000 0.000E+000 Max-norms: ||b||=1, ||c|| = 22500, Cholesky |add|=4, |skip| = 6, ||L.L|| = 66994.4. Closed loop max eig: 0.76382 Closed loop max eig: 0.76244 Closed loop max eig: 0.76016 Closed loop max eig: 0.75831 Closed loop max eig: 0.76902 Closed loop max eig: 0.76786 Closed loop max eig: 0.76324 Closed loop max eig: 0.76252 Closed loop max eig: 0.76201 Closed loop max eig: 0.76155 Closed loop max eig: 0.75941 Closed loop max eig: 0.75855 Closed loop max eig: 0.77144 Closed loop max eig: 0.77039 Closed loop max eig: 0.76748 Closed loop max eig: 0.76679

Decentralized stochastic
tic obj = obj.solve_dec_stoch_lmi(); CPUtime.dec_stoch = toc;
\nSolving decentralized stoch. SDP problem...\n SeDuMi 1.3 by AdvOL, 2005-2008 and Jos F. Sturm, 1998-2003. Alg = 2: xz-corrector, theta = 0.250, beta = 0.500 Put 2 free variables in a quadratic cone eqs m = 47, order n = 758, dim = 226511, blocks = 13 nnz(A) = 10685 + 0, nnz(ADA) = 2029, nnz(L) = 1038 it : b*y gap delta rate t/tP* t/tD* feas cg cg prec 0 : 5.13E+001 0.000 1 : -9.89E+003 1.44E+001 0.000 0.2810 0.9000 0.9000 -0.72 1 1 2.4E+002 2 : -8.93E+003 7.30E+000 0.000 0.5066 0.9000 0.9000 -0.60 1 1 2.1E+002 3 : -8.68E+003 5.00E+000 0.000 0.6848 0.9000 0.9000 -0.49 1 1 1.9E+002 4 : -7.37E+003 2.50E+000 0.000 0.4997 0.9000 0.9000 -0.42 1 1 1.5E+002 5 : -5.18E+003 8.68E-001 0.000 0.3475 0.9000 0.9000 -0.25 1 1 9.3E+001 6 : -3.00E+003 2.08E-001 0.000 0.2397 0.9000 0.9000 0.05 1 1 3.7E+001 7 : -1.72E+003 6.69E-003 0.000 0.0322 0.9900 0.9900 0.46 1 1 1.7E+000 8 : -1.64E+003 1.37E-004 0.000 0.0204 0.9900 0.9900 0.98 1 1 3.4E-002 9 : -1.10E+003 3.39E-005 0.000 0.2479 0.9000 0.9000 1.68 1 1 5.7E-003 10 : -9.14E+002 1.48E-005 0.000 0.4378 0.9000 0.9000 1.61 1 1 2.1E-003 11 : -8.84E+002 6.51E-006 0.000 0.4386 0.9000 0.9000 1.15 1 1 8.9E-004 12 : -8.79E+002 2.31E-006 0.000 0.3544 0.9000 0.9000 1.03 1 1 3.1E-004 13 : -8.76E+002 1.95E-007 0.000 0.0846 0.9900 0.9900 1.01 1 1 2.6E-005 14 : -8.76E+002 9.14E-009 0.000 0.0468 0.9900 0.9900 1.00 1 1 1.2E-006 15 : -8.76E+002 7.45E-010 0.000 0.0815 0.9900 0.9900 1.00 1 1 1.0E-007 16 : -8.76E+002 6.33E-011 0.000 0.0850 0.9900 0.9900 1.00 2 2 8.6E-009 17 : -8.76E+002 3.35E-012 0.142 0.0530 0.9900 0.9900 1.00 3 3 4.5E-010 iter seconds digits c*x b*y 17 76.3 8.9 -8.7629588185e+002 -8.7629588070e+002 |Ax-b| = 3.2e-007, [Ay-c]_+ = 1.4E-011, |x|= 5.3e+004, |y|= 1.7e+003 Detailed timing (sec) Pre IPM Post 1.560E-001 4.700E+001 1.570E-001 Max-norms: ||b||=1000, ||c|| = 1.752360e+001, Cholesky |add|=0, |skip| = 0, ||L.L|| = 26676.2. \nDecentralized stoch. SDP problem solved!\n

Simulation
Random initial state in X0
x0 =[ 8.3272 5.7953 7.2282 8.6640 5.8317 6.6488 8.1784 6.5376];
Simulation length
Tsim = 50;
Number of simulations to be carried out
Nsim = 50;
For a proper comparison, a sequence of states and emissions of the Markov chain model is stored.
load Statechange_paper load Randvals_paper Sim = []; for iter=1:Nsim
Generate realizations of Markov chain
statechange = Statechange(1,:,iter); randvals = Randvals(1,:,iter);
Initial Markov chain state
initialstate = 1;
Compute sequence of Markov chain states
trc = cumsum(obj.Mc.T,2);
ec = cumsum(obj.Mc.E,2);
currentstate = initialstate;
numStates = size(obj.Mc.T,1);
numEmissions = size(obj.Mc.E,2);
for i = 1:Tsim
Calculate state transition
stateVal = statechange(i); state = 1; for innerState = numStates-1:-1:1 if stateVal > trc(currentstate,innerState) state = innerState + 1; break end end
Calculate emission
val = randvals(i); emit = 1; for inner = numEmissions-1:-1:1 if val > ec(state,inner) emit = inner + 1; break end end
Add values and states to output
seq(i) = emit; states(i) = state; currentstate = state;
end
Get controllers gains from decLMI obj
Kc=obj.K.ci; Kd=obj.K.di; Kl=obj.K.dl; Ks=obj.K.ds;
Init states, inputs, state norms and input norms
Xc = x0; Xd = x0; Xn = x0; Xl = x0; Xs = x0; Uc = []; Ud = []; Un = []; Ul = []; Us = []; Xcnorm = []; Xdnorm = []; Xnnorm = []; Xlnorm = []; Xsnorm = []; Ucnorm = []; Udnorm = []; Unnorm = []; Ulnorm = []; Usnorm = [];
Perform current simulation
for i=1:Tsim
Centralized
Uc(:,i) = Kc*Xc(:,i); Xc(:,i+1) = A*Xc(:,i) + B*Uc(:,i); Xcnorm(i) = norm(Xc(:,i)); Ucnorm(i) = norm(Uc(:,i));
Decentralized with ideal network
Ud(:,i) = Kd*Xd(:,i); Xd(:,i+1) = A*Xd(:,i) + B*Ud(:,i); Xdnorm(i) = norm(Xd(:,i)); Udnorm(i) = norm(Ud(:,i));
Decentralized with lossy network and robust stability
Ul(:,i) = Kl{seq(i)}*Xl(:,i); Xl(:,i+1) = A*Xl(:,i) + B*Ul(:,i); Xlnorm(i) = norm(Xl(:,i)); Ulnorm(i) = norm(Ul(:,i));
Decentralized with lossy network and stoch. stability
Us(:,i) = Ks{seq(i),states(i)}*Xs(:,i); Xs(:,i+1) = A*Xs(:,i) + B*Us(:,i); Xsnorm(i) = norm(Xs(:,i)); Usnorm(i) = norm(Us(:,i));
end
Performance indices initialization
Jc = []; Jd = []; Jl = []; Js = [];
The used performance index is a sum over the entire simulation horizon of the state and input norms weighted by the Riccati equation weights.
for i=1:Tsim Jc(i) = sqrt(Xc(:,i)'*Qx*Xc(:,i) + Uc(:,i)'*Qu*Uc(:,i)); Jd(i) = sqrt(Xd(:,i)'*Qx*Xd(:,i) + Ud(:,i)'*Qu*Ud(:,i)); Jl(i) = sqrt(Xl(:,i)'*Qx*Xl(:,i) + Ul(:,i)'*Qu*Ul(:,i)); Js(i) = sqrt(Xs(:,i)'*Qx*Xs(:,i) + Us(:,i)'*Qu*Us(:,i)); end
store the current simulation results
Sim.Jc(iter) = sum(Jc); Sim.Jd(iter) = sum(Jd); Sim.Jl(iter) = sum(Jl); Sim.Js(iter) = sum(Js);
end fprintf('\n\nGlobal results over %d simulations: \n\n',Nsim); fprintf('Central. ideal performance: %.2f\n',sum(Sim.Jc)); fprintf('Decentr. ideal performance: %.2f\n',sum(Sim.Jd)); fprintf('Decentr. lossy performance: %.2f\n',sum(Sim.Jl)); fprintf('Decentr. stoch performance: %.2f\n',sum(Sim.Js)); fprintf('\nCentral. ideal performance AVG: %.2f\n',mean(Sim.Jc)); fprintf('Decentr. ideal performance AVG: %.2f\n',mean(Sim.Jd)); fprintf('Decentr. lossy performance AVG: %.2f\n',mean(Sim.Jl)); fprintf('Decentr. stoch performance AVG: %.2f\n',mean(Sim.Js)); fprintf('\nCentral. ideal performance STD: %.2f\n',std(Sim.Jc)); fprintf('Decentr. ideal performance STD: %.2f\n',std(Sim.Jd)); fprintf('Decentr. lossy performance STD: %.2f\n',std(Sim.Jl)); fprintf('Decentr. stoch performance STD: %.2f\n',std(Sim.Js)); CPUtime
Global results over 50 simulations: Central. ideal performance: 2048.67 Decentr. ideal performance: 2251.93 Decentr. lossy performance: 2487.44 Decentr. stoch performance: 2351.85 Central. ideal performance AVG: 40.97 Decentr. ideal performance AVG: 45.04 Decentr. lossy performance AVG: 49.75 Decentr. stoch performance AVG: 47.04 Central. ideal performance STD: 0.00 Decentr. ideal performance STD: 0.00 Decentr. lossy performance STD: 1.55 Decentr. stoch performance STD: 1.44 CPUtime = centralized: 5.3040 dec_ideal: 0.8137 dec_lossy: 6.8474 dec_stoch: 51.0777
Conclusions
Performance evaluation
As expected, the best performance is achieved by the centralized ideal controller, as it can use all the state measurements for all actuators at all time steps.
However, the decentralized ideal controller achieves a performance which is only 10% higher than the ideal centralized one, while using much less communications between sensors and actuators.
A robustly stabilizing controller has been found also for the case where some of the links are subject to possible packet dropouts. In this case constraints are fulfilled at every time step, regardless of the occurrence of the dropouts in the network.
Exploiting a stochastic model of the packet dropouts, a stochastic controller has been computed which obtaines an improvement on the performance index of around 6% with respect to the robust control scheme.