X=sdpvar(1,NodeNum,'full');Y=sdpvar(NodeNum,NodeNum,'full');XF=binvar(1,NodeNum,'full');
Z=binvar(NodeNum,NodeNum,'full'); V=[1 0.4 1 1];
for p=1:NodeNum
F=[F, sum(Y(p,:))==X(p) X(p)<=V(p) implies(X(p),XF(p))];%If X(p)>0, XF=1, otherwise, XF(p)=0
F=[F, sum(Y(:,p))<=V(p) X(p)*(sum(Y(:,p))-Y(p,p))==0];%Y(p,p)means node p itself can join the computation,
for q=1:NodeNum
F=[F; implies(Y(p,q),Z(p,q))]; % if Y(p,q) >0, then Z(p,q)=1
end
end
C=sum(sum(Y));
options=sdpsettings('solver','bnb','verbose',0,'debug',1);
opt=optimize(F,C,options); %get maximal C
double(C)
x=double(X)
xf=double(XF)
y=double(Y)
z=double(Z)
Thanks a lot!
F=[F; implies(Y(p,q),Z(p,q))]; % if Y(p,q) >0, then Z(p,q)=1