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-