功能:
生成任意节点数量的网络拓扑,符合现实世界节点空间分布和连接规律
效果:
30节点:
100节点:
500节点:
程序:
%创建时间:2025年6月8日
%zhouzhichao
%自然生长出n节点的网络
% function [tp,tp_list] = large_nodes_tp(P_list,N)
close all
clear
N = 500;
P_list = ones(N,1);
tp = zeros(N);
tp(1,2)=1;tp(1,3)=1;tp(1,4)=1;%原点附近的拓扑关系直接写好
x = zeros(N,1);%存储每个节点的位置,以连接各个节点
y = zeros(N,1);
a_list = zeros(N,1);%存储每个节点角度
%%
%初级节点
%节点数量:1
%节点总数:1
%半径:0
x(1) = 0;
y(1) = 0;
c_R = 1;%当前圆环半径
c_M = 3;%当前圆环节点数量
c_index = 1;%当前节点index
last_r_list = [];
while c_index<=N
r_list = [];%存储当前圆环上的节点
alpha = 2*pi/c_M;
initial_phase = rand(1)*2*pi;
for i =1:c_M
disp(["c_index: ",c_index])
pause(0.01)
r_list = [r_list,c_index];%存储当前节点
%下面处理好当前节点的各种信息
a = initial_phase+i*alpha;
x(c_index)=c_R*cos(a);
y(c_index)=c_R*sin(a);
if ~isempty(last_r_list)
p = min_d_node(c_index,last_r_list,x,y);
tp(c_index,p) = 1;
end
c_index = c_index + 1;
end
%下一个圆环的半径增大
last_r_list = r_list;%存储圆环上节点信息,方便下一个圆环生成节点时连接拓扑
c_R = c_R + 1;
a = round(1.8*c_M);
if c_index + a<=N
c_M = a;
else
c_M = N - c_index + 1;
end
end
%%
%补环
x = x + (rand(size(x)) - 0.5) * 0.6;%位置x,y加一些随机性
y = y + (rand(size(y)) - 0.5) * 0.6;
tp = tp + tp';
tp = add_circle(tp,x,y);
tp = add_circle(tp,x,y);
% tp = add_circle(tp,x,y);
%%
%绘图
% tp = tp + tp';
grid on;
hold on;
for i = 1:N
for j = i+1:N
if tp(i, j) == 1
plot([x(i) x(j)], [y(i) y(j)], 'b', 'Color', [125/255, 178/255, 251/255]);
end
end
end
for i =1:length(x)
% scatter(x(i), y(i), 100*P_list(i), [47/255, 132/255, 248/255], 'filled', 'MarkerFaceAlpha', P_list(i));
scatter(x(i), y(i), 100, [47/255, 132/255, 248/255], 'filled', 'MarkerFaceAlpha', P_list(i));
text(x(i)-0.1, y(i)+0.4, num2str(i), 'FontSize', 8, 'Color', [0/255, 0/255, 248/255]);
end
% scatter(x, y, [], [47/255, 132/255, 248/255], 'filled');
xlabel('X');
ylabel('Y');
x_min = round(min(x)-1);
x_max = round(max(x)+1);
y_min = round(min(y)-1);
y_max = round(max(y)+1);
xlim([x_min x_max]);
ylim([y_min y_max]);
set(gca, 'FontName', 'Times New Roman');
axis off;
tp_list = [];
% 遍历拓扑矩阵,找到所有有连接的节点对
for i = 1:N
for j = i+1:N
if tp(i, j) == 1
% 添加节点对 [i, j] 到 nodePairs 矩阵
tp_list = [tp_list; i, j];
end
end
end