Khối sắp xếp đường đi

Một phần của tài liệu Tiết kiệm năng lượng trong mạng (Trang 29 - 33)

7.1 Ý nghĩa

Để tối ưu hóa hệ thống chúng ta phải chọn đường đi cho kết nối ở vị trí bên trái nhất. Chính vì thế sau khi tìm được tất cả các đường đi chúng ta phải sắp xếp các đường đi này theo thứ tự trái nhất đến phải nhất để phục vụ cho việc Optimizer

7.2 Giải thuật

Để phân biệt các server chúng ta sẽ đánh số các chuyển mạch theo thứ tự từ trái sang phải bắt đầu từ 1. Do đó các server có số càng nhỏ càng nằm phía bên phải thì có trọng số càng nhỏ. Ta thực hiện sắp xếp theo cách:

• Duyệt tất cả các đường đi tìm thấy một cách tuần tự • Với mỗi đường đi , tính tổng trọng số của đường đi đó • Sắp xếp các đường đi theo tổng trọng số

7.3 Thực hiện

Ta sử dụng một hàm phụ để tính tổng trọng số của đường đi a nào đó

s=0#Khởi tạo tổng s

for i in range(1,len(a)-1,1):#Duyệt các chuyển mạch trên đường đi a s=s+a[i]#Cộng trọng số của các chuyển mạch này vào s

return s#Trả về s

Thực hiện khối sắp xếp: def sapxepduong(a):

#Đầu vào:

#a: Tập hợp đường đi chứa tất cả các đường đi cần sắp xếp c=[]#Biến phụ c

for i in range(len(a)):

for j in range (len(a)):#Duyệt tập hợp đường a

if (tong(a[j])>tong(a[i])):#Sắp xếp các đường đi bằng thuật toán sắp xếp thông thường

c=a[i]; a[i]=a[j] a[j]=c return a

8.Khối kiểm tra đường đi

Sau khi tìm và sắp xếp các đường đi ta phải kiểm tra xem các chuyển mạch trên đường đi đó đã quá tải hay chưa để tránh trường hợp chọn phải đường đi đã quá tải cho kết nối.

8.2 Giải thuật

Ta thấy trong đường đi gồm 7 chặng của chúng ta thì chặng thứ 1 và thứ 7 là server nguồn và server đích do đó chúng ta không cần quan tâm đến. Chúng ta chỉ cần quan tâm đến các chuyển mạch từ thứ 2 đến thứ 6 trên đường đi. Do chỉ số của ma trận bắt đầu từ 0 nên ta quan tâm đến các phần tử từ 1=>5 của ma trận đường

8.3 Thực hiện

def kiemtra(a,b,c,d): #Đầu vào:

#a: Ma trận đường chứa đường đi gồm 7 chặng

#b: Ma trận chứa dung lượng hiện thời của cả hệ thống #c: Capacity của hệ thống

#d:Dung lượng kết nối

#Ta sử dụng cac biến k1=>k5 để lưu dung lượng các chuyển mạch sau khi đã cộng thêm dung lượng kết nối đầu vào

if (a[1]==a[5]):#Vì phần tử thứ 1 và thứ 5 đều thuộc tầng top of rack nên ta phải xét trường hợp 2 chuyển mạch này trùng nhau

k5=k1#Nếu phần tử 1 và 5 trùng nhau thì ta phải cộng vào dung lượng hiện thời 2 lần dung lượng link đầu vào do chuyển mạch đó được đi qua 2 lần

else:#Nếu 2 phần tử nàyko trùng nhau

k1=b[2][a[1]-1]+d#Cộng dung lượng link đầu vào cho cả 2 biến k1,k5 k5=b[2][a[5]-1]+d

if(a[2]==a[4]):#Tương tự như trên k2=b[1][a[2]-1]+2*d k4=k2 else: k2=b[1][a[2]-1]+d k4=b[1][a[4]-1]+d k3=b[0][a[3]-1]+d

#Đến đây ta đã có các biến k1=>k5 lưu dung lượng hệ thống sau khi cộng thêm dung lượng link đầu vào

if (k1>c):#Kiểm tra có chuyển mạch nào có dung lượng vượt quá capacity ko return 0#Nếu có trả về 0 tức đường đi sẽ quá tải nếu thêm liên kết

if (k2>c): return 0 if (k3>c): return 0

if (k4>c): return 0 if (k5>c): return 0

return 1 #Nếu tất cả các chuyển mạch đều có dung lượng nhỏ hơn capacity sau khi thêm liên kết thì trả về 1.

Một phần của tài liệu Tiết kiệm năng lượng trong mạng (Trang 29 - 33)

Tải bản đầy đủ (DOC)

(51 trang)
w