在下面的Matlab代码中,对于节点N=10
,您将获得随机选取的节点,其概率为P= .25
,标记为红色节点。
nodeN = [];
nodeM = [];
N=input('No. of Nodes:');
P=input('probability of cluster head : ');
R=input('range of cluster head: ')
data = rand(N,2) % Randomly generated n no. of nodes
x = data(:,1);
y = data(:,2);
plot(x,y,'b*')
hold on
index = (rand(N,1) <= P); %# to choose cluster head out of N nodes with probability P
selected = data(index,:) % nodes which are now cluster head
length(selected) % no. of nodes which are cluster head
not_selected = data(~index,:) % remaining nodes which would be cluster members(out of N nodes)
length(not_selected) % no. of remaining nodes
plot(x(index),y(index),'r*'); % cluster head will be colored red in figure
for i=1:length(selected);
for j=1:length(not_selected);
dist_ij = sqrt(sum((selected(i,:)- not_selected(j,:)).^2)) % distance between selected cluster heads and remaining nodes
if(dist_ij<=R)
nodeN = [nodeN; selected(i,:)]
nodeM = [nodeM; not_selected(j,:)]
end;
end;
end;
if size(nodeN,1)~=0 && size(nodeN,2)~=0 && size(nodeM,1)~=0 && size(nodeM,2)~=0
X1=[nodeN(:,1)' ; nodeM(:,1)']
Y1=[nodeN(:,2)' ; nodeM(:,2)']
plot(X1,Y1)
hold on
end;
如何找到那些不在范围内的剩余蓝色节点的矩阵,并且不使用红色节点制作任何边缘并将这些节点绘制为绿色?
答案 0 :(得分:1)
好的,效率不高,但我觉得它很有效。
我还将length(selected)
更改为size(selected, 1)
(与not_selected
相同),因为当您只有一个选定(或未选择)节点时,它的运行方式不起作用。
nodeN = [];
nodeM = [];
N=input('No. of Nodes:');
P=input('probability of cluster head : ');
R=input('range of cluster head: ')
data = rand(N,2) % Randomly generated n no. of nodes
x = data(:,1);
y = data(:,2);
plot(x,y,'b*')
hold on
index = (rand(N,1) <= P); %# to choose cluster head out of N nodes with probability P
selected = data(index,:) % nodes which are now cluster head
length(selected) % no. of nodes which are cluster head
not_selected = data(~index,:) % remaining nodes which would be cluster members(out of N nodes)
length(not_selected) % no. of remaining nodes
plot(x(index),y(index),'r*'); % cluster head will be colored red in figure
bitar = zeros([1 length(not_selected)]);
for i=1:size(selected, 1);
for j=1:size(not_selected, 1);
dist_ij = sqrt(sum((selected(i,:)- not_selected(j,:)).^2)) % distance between selected cluster heads and remaining nodes
if(dist_ij<=R)
nodeN = [nodeN; selected(i,:)]
nodeM = [nodeM; not_selected(j,:)]
bitar(j) = 1;
end;
end;
end;
if size(nodeN,1)~=0 && size(nodeN,2)~=0 && size(nodeM,1)~=0 && size(nodeM,2)~=0
X1=[nodeN(:,1)' ; nodeM(:,1)']
Y1=[nodeN(:,2)' ; nodeM(:,2)']
plot(X1,Y1)
hold on
end;
for i=1:length(bitar)
if bitar(i) == 0
plot(not_selected(i, 1), not_selected(i, 2), 'g*');
end;
end;