208 lines
6.7 KiB
Matlab
Executable File
208 lines
6.7 KiB
Matlab
Executable File
function YESNO = is(F,property)
|
|
%IS Check property of constraint.
|
|
% d = IS(x,property) returns 1 if 'property' holds
|
|
%
|
|
% Properties possible to test are: 'elementwise', 'sdp',
|
|
% 'socc', 'equality', 'lmi', 'linear', 'kyp', 'sos'
|
|
|
|
if length(F.LMIid)==0
|
|
YESNO = 0;
|
|
else
|
|
|
|
F = flatten(F);
|
|
|
|
YESNO=zeros(length(F.LMIid),1);
|
|
switch property
|
|
case 'dualized'
|
|
YESNO = F.dualized == 1;
|
|
|
|
case 'chance'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = ~isempty(Fi.confidencelevel);
|
|
end
|
|
|
|
case 'meta'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==56);
|
|
end
|
|
case 'equality'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==3);
|
|
end
|
|
case {'element-wise','elementwise'}
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==2);
|
|
end
|
|
case {'socc','socp'}
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==4);
|
|
end
|
|
case {'vecsocp'}
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==54);
|
|
end
|
|
case 'pcone'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==20);
|
|
end
|
|
|
|
case 'sdpcone'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = is(Fi.data,'sdpcone');
|
|
end
|
|
|
|
case 'realsdpcone'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = is(Fi.data,'realsdpcone');
|
|
end
|
|
|
|
case 'complexsdpcone'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = is(Fi.data,'complexsdpcone');
|
|
end
|
|
case 'sdp'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = Fi.type==1;
|
|
end
|
|
case 'lmi'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = full((((Fi.type==1) | (Fi.type==9)) | ((Fi.type==2) & (prod(size(Fi.data))==1))) & (islinear(Fi.data)));
|
|
end
|
|
case 'linear'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = islinear(Fi.data);
|
|
end
|
|
case 'kyp'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==9);
|
|
end
|
|
case 'sos2'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==50);
|
|
end
|
|
case 'sos1'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==51);
|
|
end
|
|
case 'semivar'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==52);
|
|
end
|
|
case 'semiintvar'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==53);
|
|
end
|
|
case 'complementarity'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==55);
|
|
end
|
|
|
|
case 'sos'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = (Fi.type==11);
|
|
end
|
|
case 'eig'
|
|
YESNO(i,1) = (Fi.type==10);
|
|
case 'sigmonial'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
monomtable = yalmip('monomtable');
|
|
monomtable = monomtable(getvariables(Fi.data),:);
|
|
YESNO(i,1) = any(find(any(0>monomtable,2) | any(monomtable-fix(monomtable),2)));
|
|
end
|
|
case 'binary'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = Fi.type == 8;
|
|
end
|
|
case 'integer'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = Fi.type == 7;
|
|
end
|
|
case 'parametric'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = Fi.type == 13;
|
|
end
|
|
case 'uncertain'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = Fi.type == 15;
|
|
end
|
|
case 'random'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = Fi.type == 16;
|
|
end
|
|
|
|
|
|
case 'logic'
|
|
allextvars = yalmip('extvariables');
|
|
if isempty(allextvars)
|
|
YESNO(i,1) = 0;
|
|
else
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
xi = getvariables(Fi.data);
|
|
lgc = find(ismembc(xi,allextvars));
|
|
if ~isempty(lgc)
|
|
for j = lgc
|
|
variable = xi(j);
|
|
extstruct = yalmip('extstruct',11);
|
|
if isequal(extstruct.fcn,'or') | isequal(extstruct.fcn,'and')
|
|
YESNO(i,1) = 1;
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
case 'lowrank'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = Fi.type == 14;
|
|
% YESNO(i,1) = is(Fi.data,'complex');
|
|
end
|
|
case 'complex'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = isa(Fi.data,'sdpvar') && is(Fi.data,'complex');
|
|
end
|
|
case 'interval'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = isa(Fi.data,'sdpvar') && is(Fi.data,'interval');
|
|
end
|
|
case 'real'
|
|
for i = 1:length(F.clauses)
|
|
Fi = F.clauses{i};
|
|
YESNO(i,1) = isa(Fi.data,'sdpvar') && is(Fi.data,'real');
|
|
end
|
|
otherwise
|
|
YESNO = error('Huh?');
|
|
end
|
|
% end
|
|
end
|
|
|
|
YESNO = full(YESNO); |