Hii everyone,
I am getting the solver not applicable(sedumi) error when I am solving a QCQP(quadratically constrained quadratic program). Please help me to understand this:
Matrix=csvread('breast_cancer.dat');
[M, N]=size(Matrix);
Y = Matrix(:,N) ;
Matrix = Matrix(:,2:N-1);
[M, N]=size(Matrix);
% display(Matrix) ;
for i = drange(1:M)
if (Y(i) == 2)
Y(i) = -1 ;
else
Y(i) = 1 ;
end
end
training = M * 0.8 ;
%it may be a floor value, dont forget it to make an integer
training = floor(training) ;
test = M * 0.2 ;
test = ceil(test) ;
y = Y(1:training,:) ;
% The same thing applies here as well.
% Since we have to learn the kernel matrix in transduction setting, we
% jusn need to be aware of trhis fact that starrting 80 per data are of
% training data and 20 per data is test data.
% now we have read the data .Now we will calculate kernel matrix
KM1=zeros(M,M);
sigma = 0.01 ;
for i=drange(1:M)
for j=drange(1:M)
KM1(i,j)=exp(-norm((Matrix(i,:)-Matrix(j,:)))/(2*sigma*sigma));
end
end
sigma = sigma * 10 ;
KM2 = zeros(M,M) ;
for i=drange(1:M)
for j=drange(1:M)
KM2(i,j)=exp(-norm((Matrix(i,:)-Matrix(j,:)))/(2*sigma*sigma));
end
end
sigma = sigma * 10 ;
KM3 = zeros(M,M) ;
for i=drange(1:M)
for j=drange(1:M)
KM3(i,j)=exp(-norm((Matrix(i,:)-Matrix(j,:)))/(2*sigma*sigma));
end
end
sigma = sigma * 10 ;
KM4 = zeros(M,M) ;
for i=drange(1:M)
for j=drange(1:M)
KM4(i,j)=exp(-norm((Matrix(i,:)-Matrix(j,:)))/(2*sigma*sigma));
end
end
sigma = sigma * 10 ;
KM5 = zeros(M, M) ;
for i=drange(1:M)
for j=drange(1:M)
KM5(i,j)=exp(-norm((Matrix(i,:)-Matrix(j,:)))/(2*sigma*sigma));
end
end
Tau = sdpvar(1,1) ;
t = sdpvar(1,1) ;
mu = sdpvar(5,1) ;
KM = mu(1) * KM1 + mu(2) * KM2 + mu(3) * KM3 + mu(4) * KM4 + mu(5) * KM5 ;
alpha = sdpvar(training, 1) ;
I = eye(M) ;
c = trace(KM + Tau * I) ;
% How to write a vector of 1's in Matlab
e = ones(training,1) ;
objective = 2*alpha'*e - c * t;
constraints = [t >= 1/(trace(KM1)) * alpha' * diag(y) * KM1(1:training,1:training) * diag(y) * alpha ] ;
constraints = [constraints,t >= 1/(trace(KM2)) * alpha' * diag(y) * KM2(1:training,1:training) * diag(y) * alpha ] ;
constraints = [constraints,t >= 1/(trace(KM3)) * alpha' * diag(y) * KM3(1:training,1:training) * diag(y) * alpha ] ;
constraints = [constraints,t >= 1/(trace(KM4)) * alpha' * diag(y) * KM4(1:training,1:training) * diag(y) * alpha ] ;
constraints = [constraints,t >= 1/(trace(KM5)) * alpha' * diag(y) * KM5(1:training,1:training) * diag(y) * alpha ] ;
constraints = [constraints,t >= 1/(training) * (alpha' * alpha)] ;
constraints = [constraints,alpha' * y == 0] ;
constraints = [constraints,alpha >= 0] ;
options = sdpsettings('solver','sedumi','verbose',1,'cachesolvers',1,'sedumi.eps',1e-3);
sol = optimize(constraints,objective,options);
if sol.problem==0
% solution = value(mu) ;
% solution1 = value(Tau) ;
else
display('Hmmm, something went wrong') ;
yalmiperror(sol.problem)
end