num_pods = 4;
num_racks_per_pod = 4;
num_nodes_per_rack = 4;
max_wavelength = 50;
num_packets = 1000;
packet_size = 1500;
link_bandwidth = 100e6;
link_delay = 1e-6;
[adj_matrix, node_list] = generate_topology(num_pods, num_racks_per_pod, num_nodes_per_rack);
traffic_matrix = generate_traffic_matrix(length(node_list), num_packets);
[wavelength_assignment, conflict_graph] = assign_wavelengths(adj_matrix, max_wavelength);
fprintf('冲突图边数: %d\n', sum(conflict_graph(:)) / 2);
fprintf('波长分配完成,使用的波长数: %d\n', length(unique(wavelength_assignment)));
[avg_delay, blocking_rate] = simulate_network(adj_matrix, wavelength_assignment, traffic_matrix, link_bandwidth, link_delay, packet_size);
fprintf('平均时延: %.6f 秒\n', avg_delay);
fprintf('阻塞率: %.2f%%\n', blocking_rate * 100);
function [adj_matrix, node_list] = generate_topology(num_pods, num_racks_per_pod, num_nodes_per_rack)
total_nodes = num_pods * num_racks_per_pod * num_nodes_per_rack;
adj_matrix = zeros(total_nodes, total_nodes);
node_list = 1:total_nodes;
for pod = 1:num_pods
start_rack = (pod-1)*num_racks_per_pod + 1;
end_rack = pod*num_racks_per_pod;
racks_in_pod = start_rack:end_rack;
for rack = racks_in_pod
nodes = (rack-1)*num_nodes_per_rack + 1 : rack*num_nodes_per_rack;
adj_matrix(nodes, nodes) = 1;
end
for i = 1:length(racks_in_pod)
for j = i+1:length(racks_in_pod)
if rand() < 0.5
rack1 = racks_in_pod(i);
rack2 = racks_in_pod(j);
range1 = (rack1-