Cvx-optimization-solving


(eliiiiiiiiiiiiiiiii) #1

Hi,
this is my coding of a convex optimization problem which is solved without any error …
But i don’t know why the matrices of Ac ,Bc ,Cc,Dc are factor of 1e-13…

Is there that anyone know to help me ?

clear all
close all
clc
%% First: sensor-to-controller 
A = [1 2 1;1 0.25 5;2 3 4];
B = [1 0.2;4 1;0.7 3];
C = [0.1 5 0.7;0.6 0.9 0.6];
Ad = [0.4 0.2 0;0.2 0.16 0.4;0.2 0.6 2];

k = 0:100
TauSC = 0.2*sin(k);
TauCA = 0.4*sin(k);
d = 0.1*cos(k);
n = size(A,1);
[n,m] = size(B);
[q,n] = size(C);

mu1 = 0.8; delta1 =0.4 ;
mu2 = 0.9;  delta2 = 0.5;
tau1 = -0.2;
tau2 = 0.2;
tau3 = -0.4;
tau4 = 0.4;
d1 =-0.1;
d2 =0.1;
[U,S,V] = svd(B)
%% H-infinite 
cvx_begin sdp
variable P1(n,n) symmetric;
variable P2(n,n) symmetric;
variable R1(n,n) symmetric;
variable R2(n,n) symmetric;
variable R4(n,n) symmetric;
variable Q1(n,n) symmetric;
variable Q2(n,n) symmetric;
variable Q4(n,n) symmetric;
variable O1(n,n) symmetric;
variable O2(n,n) symmetric;
variable O4(n,n) symmetric;
variable T1(n,n) symmetric;
variable T2(n,n) symmetric;
variable T4(n,n) symmetric;

variable E(8,8) symmetric;

variable omega11(q,q);
variable omega12(n-q,n-q); 
variable omega21(q,q);
variable omega22(n-q,n-q); 

variable Y(n,n)
variable X(q,n)
variable W(q,m)
variable Z(n,m)
variable gama1sq nonnegative;
variable gama2sq nonnegative;

R =[R1 R2;R2' R4];
Q =[Q1 Q2;Q2' Q4];
O =[O1 O2;O2' O4];
T =[T1 T2;T2' T4];
U1 = U(:,1:2);
U2 = U(:,3);
P = [P1 zeros(n,n);zeros(n,n) P2];
omega1 = U1*omega11*U1'+U2*omega12*U2';
omega2 = U1*omega21*U1'+U2*omega22*U2';

Acl  = [A'*omega1' zeros(n,n);zeros(n,n) Y];
Adcl = [Ad'*omega1' zeros(n,n);zeros(n,n) zeros(n,n)];
A1cl = [zeros(n,n) mu1*C'*X;zeros(n,n) zeros(n,n)];
A2cl = [zeros(n,n) zeros(n,n);mu2*Z*B' zeros(n,n)];
A3cl = [mu1*mu2*C'*W*B' zeros(n,n);zeros(n,n) zeros(n,n)];
B1cl = [zeros(m,n) mu1*X;zeros(m,n) zeros(m,n)];
B2cl = [zeros(m,n) zeros(m,n);mu2*B'*omega1' zeros(m,n)];
B3cl = [mu1*mu2*W*B' zeros(m,n);zeros(m,n) zeros(m,n)];
B1hcl = [zeros(2,3) mu1*X;mu2*B'*omega1' zeros(2,3)];
Pcl  = [P1-(omega1+omega1') zeros(n,n);zeros(n,n) P2-(omega2+omega2')];

omegaT1 = inv(V')*pinv(S)*inv(U)*omega1*U*S*V';
omegaT2 = inv(V')*pinv(S)*inv(U)*omega2*U*S*V';

C1cl = [C'*omegaT2' zeros(3,6);zeros(3,2) zeros(3,6)];
C2cl = [zeros(3,6) zeros(3,2);zeros(3,6) Z];
C3cl = [zeros(3,6) mu1*C'*W;zeros(3,6) zeros(3,2)];
D1cl = [omegaT2' zeros(2,6);zeros(2,2) zeros(2,6)];
D2cl = [zeros(2,6) zeros(2,2);zeros(2,6) omegaT1'];
D3cl = [zeros(2,6) mu1*W;zeros(2,6) zeros(2,2)];
PQRST = -P+(tau2-tau1+1)*R+(d2-d1+1)*Q+(tau4-tau3+1)*O+(tau4+tau2-tau1-tau3+1)*T;
DomegaT = [omegaT2 zeros(2,2);zeros(2,2) omegaT1]
OT = [zeros(4,4) DomegaT;DomegaT' zeros(4,4)]

delta = delta1^2+delta2^2;
mu = inv(mu1)-1+inv(mu2)-1;

minimize gama1sq*delta+gama2sq*mu

subject to 

% % H_infinite
[PQRST zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,4) zeros(6,4) zeros(6,4) Acl zeros(6,8);
zeros(6,6) -Q zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,4) zeros(6,4) zeros(6,4) Adcl zeros(6,8);
zeros(6,6) zeros(6,6) -R zeros(6,6) zeros(6,6) zeros(6,4) zeros(6,4) zeros(6,4) A1cl C1cl;
zeros(6,6) zeros(6,6) zeros(6,6) -O zeros(6,6) zeros(6,4) zeros(6,4) zeros(6,4) A2cl C2cl;
zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,6) -T zeros(6,4) zeros(6,4) zeros(6,4) A3cl C3cl;
zeros(4,6) zeros(4,6) zeros(4,6) zeros(4,6) zeros(4,6) -gama1sq*eye(4) zeros(4,4) zeros(4,4) B1cl D1cl;
zeros(4,6) zeros(4,6) zeros(4,6) zeros(4,6) zeros(4,6) zeros(4,4) -gama1sq*eye(4) zeros(4,4) B2cl D2cl;
zeros(4,6) zeros(4,6) zeros(4,6) zeros(4,6) zeros(4,6) zeros(4,4) zeros(4,4) -gama1sq*eye(4) B3cl D3cl;
Acl' Adcl' A1cl' A2cl' A3cl' B1cl' B2cl' B3cl' Pcl zeros(6,8);
zeros(8,6) zeros(8,6) C1cl' C2cl' C3cl' D1cl' D2cl' D3cl' zeros(8,6) OT]<=0

%H2-constraint
AH = [Acl;Adcl;A1cl;A2cl;A3cl]
CH = [zeros(6,8);zeros(6,8);C1cl;C2cl;C3cl]   
AHH=[Acl' Adcl' A1cl' A2cl' A3cl']
CHH =[zeros(8,6) zeros(8,6) C1cl' C2cl' C3cl']

B1h = [zeros(2,3) mu1*X;mu2*B'*omega1' zeros(2,3)];
B2h = [mu1*mu2*W*B' zeros(2,3);zeros(2,3) zeros(2,3)];
BH = [B1h;B2h];
BHH = [B1h' B2h'];
DH = [zeros(4,8);D3cl];
DHH =[zeros(8,4) D3cl'];

PH = [P zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,6);zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,6);zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,6);zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,6);zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,6) zeros(6,6)]

[PH AH CH;
AHH -Pcl zeros(6,8);
CHH zeros(8,6) OT]>=0

[E BH DH;
BHH -Pcl zeros(6,8);
DHH zeros(8,6) OT]>=0

trace(E)< gama2sq

cvx_end

%% matrices controller
Ac = inv(omega2)*Y'
Bc = inv(omega2)*X'
Cc = inv(omegaT1)*Z'
Dc = inv(omegaT1)*W'
sys = ss(Ac,Bc,Cc,Dc,0.1)
K =tf(sys)

(Mark L. Stone) #2

The optimal values of gama1sq and gama2sq are in reality zero, but the reported solution is solver tolerance away from zeros. That is because your LMIs are feasible with gama1sq and gama2sq at zero.

Running your problem in sdpt3 and sedumi, I get somewhat different solutions, but here is the output of your post cvx_end calculations using sedumi (magnitudes are smaller in sdpt3);

Ac =
   1.0e-04 *
    0.0340   -0.0010    0.0082
    0.1366   -0.0041    0.0333
    0.0354    0.0000    0.0106
Bc =
   1.0e-04 *
   -0.0089    0.0257
   -0.0356    0.1033
   -0.0065    0.0264
Cc =
   1.0e-05 *
   -0.0270    0.0252   -0.0344
   -0.2634    0.0112   -0.1568
Dc =
   1.0e-05 *
    0.0608   -0.2096
    0.0896   -0.2690
>> inv(omega2)
ans =
   1.0e+11 *
    0.1446    0.5712   -0.0008
    0.5820    2.3006    0.0171
    0.1528    0.6243    0.2920

Then I re-ran the problem in sedumi, but this time I constrained gama1sq==0;gama2sq==0;
and changed the objective function to maximize(trace(diag(diag(X)))) . There is nothing special about this objective function, I just made up something rather arbitrary to see if I could induce Bc = inv(omega2)*X' to come out significantly different than in your problem as originally specified, even though my modified version is optimal for your original problem, because it has gama1sq and gama2sq constrained to be at the optimal values for your original problem. Here is the result:

Ac =
   1.0e-06 *
    0.0263   -0.0066    0.0005
    0.1065   -0.0268    0.0020
    0.0392   -0.0099    0.0007
Bc =
    0.0413   -0.2003
    0.1662   -0.8070
    0.0465   -0.2259
Cc =
   1.0e-09 *
   -0.0172   -0.0015    0.0360
    0.0055   -0.0871    0.1221
Dc =
   1.0e-09 *
   -0.0175    0.0565
   -0.0240    0.1153
>> inv(omega2)
ans =
   1.0e+06 *
    0.3982    1.5814    0.1146
    1.6044    6.3759    0.5261
    0.4438    1.8270    1.0495

As you can see, I came out with a quite different Bc, even though this solution and the solution from your original problem are both optimal for that original problem. This shows that your calculations of Ac, Bc, and I suspect Cc and Dc are rather meaningless, or in any event, far from unique. If they should have unique meaningful values, then your problem formulation is inadequate.