x=sdpvar(160,300); y=sdpvar(300,1);
F=set(y(1:150,1)==y0(1:150,1))+set(x(160,271:300)==zeros(1,30));
F=set(-ones(150,1)<=sp0*x*sp1 +e-sp2*y<=ones(150,1));
F=F+ set(-ones(1,300)<=sp3*x*sp4 -y'<=ones(1,300));
F=F+set(sp5*x*sp6==be0);
F=F+set(sp7*x*sp8==be1);
F=F+set(sp9*x*sp10==be2);
g=sum(sum(((x-x0).^2)./((x0+ones(160,300)).^2)))+sum(((y-y0).^2)./((y0+ones(300,1)).^2));
sol=solvesdp(F,g);
Except x and y, others are all known matrices or vector (only e is vector). variables started with sp are sparse matrices.
About the solver, I try the 'quadprog', and also try not assigning any specific solver.
The total solvers in my matlab include:
Searching for installed solvers |
+++++++++++++++++++++++++++++++++++++++++++++++
| Solver| Version/module| Status|
+++++++++++++++++++++++++++++++++++++++++++++++
| LINPROG| | found|
| QUADPROG| | found|
| LMILAB| | found|
| FMINCON| geometric| found|
| FMINCON| standard| found|
| FMINSEARCH| | found|
| BNB| | found|
| BINTPROG| | found|
| CUTSDP| | found|
| BMIBNB| | found|
| KKTQP| | found|
| NONE| | found|
| LSQNONNEG| | found|
| LSQLIN| | found|
sp3*x*sp4 -y'
sp3*x*sp4-y'
[1 -1]
[1-1]
x0=500*rand(154, 290);
y0=1000*rand(272,1);
e=0.1*y0(137:272,1);
be0=800*rand(35, 38); be0(35,35:38)=zeros(1,4);
q0(1:272,1:34)=repmat(eye(34),8,1); q0(273:288, 35:36)=repmat(eye(2),8,1);
q0(289:290,37:38)=eye(2);
q1(1:17,1:136)=repmat(eye(17),1,8); q1(18:35,137:154)=eye(18);
q2=zeros(136,272); q2(1:136, 137:272)=eye(136);
q3=ones(290,1); q4=zeros(136,154); q4(1:136,1:136)=eye(136);
q5=ones(1,154); q6=zeros(290,272); q6(1:272,1:272)=eye(272);
sp0=sparse(q0); sp1=sparse(q1); sp2=sparse(q2);
sp3=sparse(q3); sp4=sparse(q4); sp5=sparse(q5); sp6=sparse(q6);
clearvars q0 q1 q2 q3 q4 q5 q6;
x=sdpvar(154,290); y=sdpvar(272,1);
F=set(y(1:136,1)==y0(1:136,1))+set(x(154,273:290)==zeros(1,18));
F=set(-ones(136,1)<=sp4*x*sp3+e-sp2*y<=ones(136,1));
F=F+set(-ones(1,272)<=sp5*x*sp6-y'<=ones(1,272));
g=sum(sum(((x-x0)./(x0+ones(154,290))).^2))+sum(((y-y0)./(y0+ones(272,1))).^2);
q0(1:272,1:34)=repmat(speye(34),8,1); q0(273:288, 35:36)=repmat(speye(2),8,1);q0(289:290,37:38)=speye(2);
q2=spalloc(136,272,0); q2(1:136, 137:272)=speye(136);
etc...
x(154,273:290)==zeros(1,18)
-ones(1,272)<=sp5*x*sp6-y'<=ones(1,272)
x(154,273:290)==0
-1<=sp5*x*sp6-y'<=1
x=sdpvar(154,290);
x(154,273:290)==zeros(1,18)
x=sdpvar(154,290);
x(154,273:290)=0
solvesdp(F,g,sdpsettings('solver','quadprog','quadprog.largescale','on','quadprog.algorithm','interior-point-convex'))
z1 = sdpvar(154,290);z2 = sdpvar(272,1);g = sum(sum(z1.^2)) + sum(z2.^2);F = [F, z1 == (x-x0)./(x0+1)];F = [F, z2 == (y-y0)./(y0+1)];solvesdp(F,g,sdpsettings('solver','quadprog','quadprog.largescale','on','quadprog.algorithm','interior-point-convex'))
pk = sdpvar(1,N);
assign(pk,.1);
...
solvesdp(Constraints,Object_ive,sdpsettings('solver','fmincon','usex0',1))
p0 = rand(1,10);p0 = 9.99*p0/sum(p0)
assign(pk,p0);
double(Object_ive)
solvesdp(Constraints,Object_ive,sdpsettings('solver','knitro','usex0',1))
ans =
0.359780860450551
>> double(Object_ive)
ans =
0.359331956065639
[double(pk)' double(p0)']
ans =
1.233239664201927 1.268054055747984
1.530276044100641 1.532929627773902
0.000048320845871 0.060997533699532
1.570859697381596 1.571505652792795
1.264442631845528 1.266252936698882
1.376820312578258 1.579469386563020
0.903066155919263 0.904380888201387
0.358447969130552 0.416595368954150
1.148274914472070 1.211664745351628
0.000017362436041 0.178149804216722
qk=(1/2)*log2((1+(pk.*hk/No)));
sigmaq1=(A^2)./(3*(2^(2*qk)));
best = inf;
for i = 1:1000000
pk = rand(1,10);pk = 9.99*p0/sum(p0);
qk=(1/2)*log2((1+(pk.*hk/No)));
sigmaq1=(A^2)./(3*(1+(pk.*hk/No)));
h3=((2*N*sigma.^4.*(1+2*SNR_i)+sigmaq1).*(2*N*sigma.^2)-(2*N.*sigma.^4+sigmaq1).*(2*N*sigma.^2.*(1+2*SNR_i)))./(8*N*sigma.^4.*SNR_i); %with quantization
%a3=-((2*N*sigma.^4+sigmaq1)-2*N*sigma.^4.*(1+2*SNR_i)-sigmaq1)./((2*N.*sigma.^4.*(1+2*SNR_i)+sigmaq1).*(2*N+sigmaq1));
a3=1;
E_T_H0=N^2.*sigma.^4+2.*N.*sigma.^4+sigmaq1-2.*h3.*N.*sigma.^2+h3.^2;
E_T_H1=N^2.*sk.^4+2.*N^2.*sk.^2.*sigma.^2+4.*N.*sigma.^2.*sk.^2+N^2.*sigma.^4+2.*N.*sigma.^4+sigmaq1-2.*h3.*(N.*sk.^2+N.*sigma.^2)+h3.^2; %E{T¦H1}
eta_i=(E_T_H1-E_T_H0).^2;
Var_T_H1=4*(N^2.*sk.^4+2*N^2.*sk.^2.*sigma.^2+N^2.*sigma.^4).*(2*N.*sigma.^4+4.*N.*sigma.^2.*sk.^2)+2.*(2.*N.*sigma.^4+4.*N.*sigma.^2.*sk.^2).^2 ...
+4.*h3.^2.*(2.*N.*sigma.^4+4.*N.*sigma.^2.*sk.^2)-8.*h3.*(N.*sk.^2+N.*sigma.^2).*(2.*N.*sigma.^4+4.*N.*sigma.^2.*sk.^2);
f=((a3.^2).*eta_i);
g=((a3.^2).*Var_T_H1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Object_ive=(sum(g)/sum(f));
if Object_ive < best
best = Object_ive
bestp = pk;
end
best
end
sol = solvesdp(Constraints,Object_ive)
Optimize a model with 21 rows, 20 columns and 40 nonzeros
Presolve removed 21 rows and 20 columns
Presolve time: 0.00s
Presolve: All rows and columns removed
Iteration Objective Primal Inf. Dual Inf. Time
0 0.0000000e+00 0.000000e+00 0.000000e+00 0s
Solved in 0 iterations and 0.00 seconds
Optimal objective 0.000000000e+00
sol =
yalmiptime: 2.000000000000028e-01
solvertime: 6.000000000000227e-03
info: 'Successfully solved (GUROBI-GUROBI)'
problem: 0
yprod=[];
for i=1:size(y,2)
yprod=[yprod prod(y(:,i))];
end
ops4= sdpsettings('solver','fmincon','usex0');
ops4= sdpsettings('solver','fmincon','usex0',1);