Tải bản đầy đủ (.doc) (49 trang)

Báo cáo project 1 tiết kiệm năng lượng trong mạng 0546

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (376.38 KB, 49 trang )

Báo cáo Project 1

Optimizer

Mục Lục
Mục Lục...................................................................................................1
I.Tổng quan về chương trình.................................................................2
1. Mục đích của chương trình:......................................................................................................................2
2. Giới thiệu chung về Optimizer và thuật toán sử dụng..............................................................................2
3. Giới thiệu chung về chương trình.............................................................................................................2
1.Khối nhập dữ liệu đầu vào.........................................................................................................................5
2. Khối tạo ma trận bit rate...........................................................................................................................6
3. Khối tạo ma trận công suất.......................................................................................................................8
4. Khối tạo ma trận kết nối.........................................................................................................................10
5. Khối tạo 3 ma trận thể hiện kết nối........................................................................................................11
6. Khối tìm đường cho kết nối ...................................................................................................................19
7. Khối sắp xếp đường đi............................................................................................................................27
8.Khối kiểm tra đường đi............................................................................................................................28
9. Khối cập nhật dung lượng hệ thống.......................................................................................................31
10.Khối tạo cây ...........................................................................................................................................32
11. Khối in kết quả:.....................................................................................................................................45

1


Báo cáo Project 1

Optimizer

I.Tổng quan về chương trình
1. Mục đích của chương trình:


Hiện nay vấn đề tiết kiệm năng lượng đang được đặt ra như một vấn đề thiết
yếu trong tất cả các lĩnh vực của cuộc sống. Trong việc quản lí và sử dụng Data
Center vấn đề này càng cần thiết hơn vì nhiều lúc(nhất là vào ban đêm, giờ thấp
điểm) số lượng yêu cầu kết nối rất nhỏ trong khi tất cả các chuyển mạch vẫn hoạt
động gây ra sự lãng phí khơng đáng có. Chính vì thế chúng em thực hiện chương
trình này mong muốn có thể tối ưu hóa hệ thống hết mức có thể mà vẫn đáp ứng
được nhu cầu của người dùng, qua đó có thể tiết kiệm được cơng suất sử dụng.Để
thực hiện q trình này thì vấn đề Optimizer là vơ cùng cần thiết.

2. Giới thiệu chung về Optimizer và thuật toán sử dụng
Optimizer là q trình tối ưu hóa sơ đồ hệ thống(Topology) từ dạng phức tạp về
dạng đơn giản hơn.Để thực hiện được điều đó chúng ta sử dụng thuật toán
Greedybin-packing.Đối với thuật toán này chúng ta sẽ chọn đường cho các kết
nối theo đường trái nhất giúp cho sơ đồ hệ thống được giảm thiểu

3. Giới thiệu chung về chương trình
Chương trình bao gồm 11 khối chức năng chính được mơ tả như hình vẽ phía
dưới.Chương trình hoạt động theo các bước:
• Nhập dữ liệu
• Đọc các yêu cầu từ ma trận kết nối
• Giải quyết yêu cầu bằng đường đi bên trái nhất. Nếu không giải quyết được
yêu cầu(khơng tìm được đường đi hay các đường đi đã q tải) thì thêm u
cầu vào danh sách từ chối
• In kết quả ra màn hình

2


Báo cáo Project 1


Optimizer

3


Báo cáo Project 1

Optimizer

II. Các khối chức năng cụ thể của chương trình
*)Các hàm phục vụ cho q trình tính tốn
• Hàm tạo ma trận m hàng n cột với tất cả các phần tử bằng 0
def taomt(m,n):# Khai báo hàm
a=[]#Khởi tạo ma trận a rỗng
i=0#Khai báo biến i
j=0#Khai báo biến j
for i in range(m):#i chạy từ 0 đến m-1
b=[]#Khai báo b rỗng
a.append(b)#Thêm b vào a
#Như vậy sau bước này ta có ma trận a có m hàng
for i in range(m):#i chạy 0->m-1
for j in range(n):#j chạy 0-> n-1
a[i].append(0)#Thêm 0 vào hàng i để tạo ra cột
#Như vậy sau bước này ta có ma trận m hàng n cột tất cả phần tử bằng 0
return a# Trả về a
• Hàm tính xy
def mu(x,y):#Khai báo hàm
s=1#Khai báo s
4



Báo cáo Project 1

Optimizer

if y==0:#Nếu y=0
return 1#Trả về 1
else:
for i in range(y):#
s=s*x
return(s)
• Hàm add tồn bộ list y vào list x
def addlist(x,y):
for i in range(len(y)):
x.append(y[i])
return x

1.Khối nhập dữ liệu đầu vào

l=input("Nhap so server\n")
n=input("Nhap so chuyen mach Top Of Rack\n")
m=input("Nhap so chuyen mach tich hop\n")
h=input("Nhap so chuyen mach loi (core)\n")
f=input("Nhap so Top Of Rack toi da ket noi vao mot chuyen mach tich hop\n")
e=input("Nhap so server toi da ket noi vao mot Top Of Rack\n")
5


Báo cáo Project 1


Optimizer

dl=float(raw_input("Nhap capacity cua he thong"))
bitmin=float(raw_input("Nhap bitrate toi thieu cua cac ket noi"))
bitmax=float(raw_input("Nhap bitrate toi da cua cac ket noi"))
mi1=input("Nhap cong suat toi thieu cua tang chuyen mach loi")
ma1=input("Nhap cong suat toi da cua tang chuyen mach loi")
mi2=input("Nhap cong suat toi thieu cua tang chuyen mach tich hop")
ma2=input("Nhap cong suat toi da cua tang chuyen mach tich hop")
mi3=input("Nhap cong suat toi thieu cua tang chuyen mach Top Of Rack")
ma3=input("Nhap cong suat toi da cua tang chuyen mach Top Of Rack")

2. Khối tạo ma trận bit rate
2.1 Ý nghĩa:
Lưu bitrate của các yêu cầu kết nối
2.2 Định dạng ma trận
Ma trận gồm 1 hàng và l cột ( l là số server). Mỗi cột đại diện cho 1 server. Server
nào phát đi yêu cầu thì giá trị của cột tương ứng trong ma trận sẽ có giá trị là
bitrate của yêu cầu phát đi. Server nào không phát đi yêu cầu thì giá trị cột tương
ứng trong ma trận sẽ có giá trị 0.
Ví dụ: Có 5 server. Server 2,5 không phát yêu cầu. Server 1,3,4 phát yêu cầu với
bitrate tương ứng là 0.1;0.3;0.2. ta có ma trận:
6


Báo cáo Project 1

0.1

Optimizer


0

0.3

0.2

0

2.3 Giải thuật
Ta sẽ tạo ngẫu nhiên các yêu cầu kết nối theo cách:
+) Tạo ngẫu nhiên 1 trong 2 số 1 và 0 tương ứng với hai trường hợp phát và không
phát yêu cầu
+) Nhân số đã tạo ở trên với 1 số ngẫu nhiên trong khoảng min-> max đã cho. Như
thế:
• Khi server phát yêu cầu ta sẽ có giá trị 1*x=x(x nằm trong khoảng min->
max)
• Khi server khơng phát u cầu ta có giá trị 0*x=0

2.4 Thực hiện
def tao_bitrate(l,m1,m2):
#Các tham số:
#l: Số server
#m1: bitrate min của yêu cầu
#m2: bitrate max của yêu cầu
i=0
a=taomt(1,l)#Tạo ma trận 1 hàng l cột
7



Báo cáo Project 1

Optimizer

for i in range (l):
a[0][i]=random.randint(0,1)*random.uniform(m1,m2)
#Lệnh random.randint(0,1) random ra 1 trong 2 số 0 hoặc 1
#Lệnh random.uniform(m1,m2) random ra 1 số bất kì trong khoảng m1,m2
return a

3. Khối tạo ma trận công suất
3.1 Ý nghĩa
Lưu công suất trên từng chuyển mạch của hệ thống.Phục vụ cho quá trình tính tốn
cơng suất tiết kiêm được của hệ thống
3.2Định dạng ma trận
Ma trận gồm 3 hàng, n cột. Trong đó :
Hàng 1 thể hiện công suất từng chuyển mạch lõi (core)
Hàng 2 thể hiện cơng suất từng chuyển mạch tích hợp
Hàng 3 thể hiện công suất từng chuyển mạch top of rack
Vì số core ,chuyển mạch tích hợp,top of rack là không như nhau nên ta tạo
ma trận với số cột lớn nhất là n.Do đó với những phần tử dư ra trong từng hàng ta
mặc định bằng 0.
Ví dụ: Hệ thống có 2 chuyển mạch lõi với cơng suất 180 và 185 W, 4 chuyển mạch
tích hợp với cơng suất 150,152,151,154 W, 6 chuyển mạch top of rack với cơng
suất 123, 125,122,127,124,128 W. Ta sẽ có ma trận cơng suất:
8


Báo cáo Project 1


180
150
123

185
152
125

Optimizer

0
151
122

0
154
127

0
0
124

0
0
128

3.3 Giải thuật
Tạo ma trận (3,n) với tất cả các phần tử bằng 0
Hàng 1 nhập giá trị công suất của core bằng hàm random
Hàng 2 nhập giá trị cơng suất của chuyển mạch tích hợp bằng hàm random

Hàng 3 nhập giá trị công suất của top of rack bằng hàm random
Với các giá trị công suất min ,max được nhập qua các tham số
mi1,ma1,mi2,ma2,mi3,ma3
3.4 Thực hiện
#Hàm tạo ma trận công suất
def tao_mtcs(h,m,n,mi1,ma1,mi2,ma2,mi3,ma3):
# số core : h, số top of rack :m, số top of switch :n
#mi1, ma1, mi2, ma2, mi3, ma3 lần lượt là công suất min, max của core, top
of rack, top #of switch
a=taomt(3,n)
#tạo ma trận 3 hàng n cột
for i in range(h):
a[0][i]=random.randint(mi1,ma1)
#tạo hàng công suất của core lấy giá trị random trong đoạn [mi1,ma1]
for i in range(m):
a[1][i]=random.randint(mi2,ma2)
#tạo hàng công suất của core lấy giá trị random trong đoạn [mi2,ma2]
for i in range(n):
a[2][i]=random.randint(mi3,ma3)
#tạo hàng công suất của core lấy giá trị random trong đoạn [mi3,ma3]
return a

9


Báo cáo Project 1

Optimizer

4. Khối tạo ma trận kết nối

4.1 Ý nghĩa
Ma trận kết nối thể hiện thông tin đầy đủ về tất cả các yêu cầu, bao gồm:
• Server nguồn
• Server đích
• Dung lượng u cầu
4.2 Định dạng ma trận
Ma trận bao gồm l hàng l cột với l là số server. Các hàng tượng trưng cho server
phát. Các cột tượng trưng cho server thu.Tại vị trí [i][j] trong ma trận:
• Nếu giá trị của ma trận khác 0 : tồn tại yêu cầu từ server i đến server j với
dung lượng là giá trị của ma trận tại vị trí [i][j]
• Nếu giá trị của ma trận bằng 0: Không tồn tại yêu cầu từ server i đến server j
4.3 Giải thuật
Trước khi chúng ta tạo ma trận kết nối chúng ta đã có ma trận bitrate thể hiện
bitrate của các server phát do đó chúng ta phải tạo ma trận kết nối tương ứng với
ma trận bitratr e này. Cách thức thực hiện:






Khởi tạo ma trận kết nối l hàng l cột tất cả bằng 0
Duyệt ma trận bitrate
Nếu có yêu cầu(giá trị ma trận bitrate khác 0) tại vị trí i
Random một số bất kì j (khác i) làm server thu
Gán giá trị của ma trận kết nối tại vị trí [i][j] là giá trị bitrate tương ứng

4.4 Thực hiện
def tao_mtketnoi(bit,l):
10



Báo cáo Project 1

Optimizer

#Đầu vào:
#bit: ma trận bitrate
#l: số server
k=0#k : số bất kì làm server đích
kq=taomt(l,l)#Khởi tạo ma trận l hàng l cột
for i in range(l):
if bit[0][i]!=0:#Nếu tồn tại yêu cầu
k=i#Đầu tiên gán k=i
while(k==i):#Kiểm tra k có bằng i hay ko
k=random.randint(0,l-1)#Nếu có random ra 1 số bất kì từ 0=>l-1.Sau
đó quay lên kiểm tra xem k có khác i hay ko. Nếu vẫn khác thì lặp lại đến khi k khác
i
kq[i][k]=bit[0][i]#Gán giá trị
return kq

5. Khối tạo 3 ma trận thể hiện kết nối
5.1 Ý nghĩa
Ta nhận thấy rằng trong topology biểu diễn hệ thống không phải 2 chuyển
mạch bất kì nào cũng nối với nhau, do đó chúng ta cần có những ma trận thể hiện
sự kết nối giữa các tầng chuyển với nhau để khi tiến hành Optimizer chúng ta biết
11


Báo cáo Project 1


Optimizer

được những chuyển mạch nào có thể nối được với nhau và những chuyển mạch
nào không nối với nhau.
5.2 Định dạng ma trận
Trong Topology hệ thống chúng ta thấy rõ hệ thống bao gồm các tầng theo thứ tự
từ trên xuống:





Chuyển mạch lõi
Chuyển mạch tích hợp
Chuyển mạch top of rack
Server

Do đó chúng ta phải thể hiện các kết nối :
• Chuyển mạch lõi-chuyển mạch tích hơp
• Chuyển mạch tích hợp-chuyển mạch top of rack
• Chuyển mạch top of rack-Server
Do đó chúng ta sẽ xây dựng 3 ma trận thể hiện cho 3 kết nối phải thể hiện. Mỗi
tầng có định dạng như sau:
Ma trận thể hiện kêt nối giữa tầng i và tầng j . Trong đó tầng i nằm phía trên tầng j.
Tầng i có a chuyển mạch, mỗi chuyển mạch ở tầng i nối với b chuyển mạch ở tầng
j.Ta sẽ có ma trận a hàng b+1 cột trong đó:
• Cột đầu tiên của mỗi hàng biểu diễn số thứ tự của chuyển mạch ở tầng i
• Các cột từ thứ 2 đến hết của mỗi hàng thể hiện số thứ tự của chuyển mạch ở
tầng j có kết nối với i.

Ví dụ: Ta có sơ đồ kết nối giữa 2 tầng như sau:

12


Báo cáo Project 1

Optimizer

Ta thấy tâng i ( phía trên) có 3 chuyển mạch. Tầng j ( phía dưới) có 6 chuyển
mạch.Mỗi chuyển mạch ở tầng i có 4 chuyển mạch ở tầng j nối vào nó. Chuyển
mạch thứ 1,2,3, 4 của tầng j nối với chuyển mạch 1 của tầng i. Chuyển mạch
1,2,3,4 của tầng j nối với chuyển mạch 2 của tầng i. Chuyển mạch 3,4,5,6 của tầng
j nối với chuyển mạch 3 của tầng i.Từ đó ta có ma trận :
1
2
3

1
1
3

2
2
4

3
3
5


4
4
6

5.3 Giải thuật và thực hiện
5.3.1 Ma trận thể hiện kết nối giữa tầng chuyển mạch lõi-chuyển mạch tích hợp
a ) Giải thuật
Ở lớp kết nối này mỗi chuyển mạch lõi đều nối với tất cả các chuyển mạch tích
hơp.
Ví dụ: ta có 2 chuyển mạch lõi và 4 chuyển mạch tích hợp ta sẽ có sơ đồ kết nối:

13


Báo cáo Project 1

Optimizer

Do đó ta có giải thuật:
b) Thực hiện
def tao_core(m,h):
#Đầu vào:
#m: số chuyển mạch tích hợp
#h: số chuyển mạch lõi
i=0
j=0
a=taomt(h,m+1)#Tạo ma trận h hàng m+1 cột
for i in range(h):
a[i][0]=i+1#Gán cột đầu tiên mỗi hàng là số thứ tự của chuyển mạch tầng
core

for i in range(h):
for j in range(1,m+1,1):
14


Báo cáo Project 1

Optimizer

a[i][j]=j#Gán các cột còn lại là các chuyển mạch tích hợp nối đến core
return a
5.3.2 Ma trận thể hiện kết nối giữa tầng chuyển mạch tích hợp-chuyển mạch top
of rack
a. Giải thuật
Ở tầng này mỗi chuyển mạch ở tầng i(tầng tích hợp) nối với f chuyển mạch ở tầng
j(tầng top of rack).f được nhập từ bàn phím.Ta thực hiện như sau:
• Tạo 1 ma trận m hàng f+1 cột
• Gán cột đầu tiên của mỗi hàng là số thứ tự của chuyển mạch ở tầng chuyển
mạch tích hợp
• Gán các cột cịn lại là số thứ tự của chuyển mạch ở tầng top of rack nối với
chuyển mạch ở tầng tích hợp nằm ở cột đầu tiên của hàng đó.Ta sẽ thực hiện
gán như sau:

• Tính d=n/m(n: số chuyển mạch top of rack, m: số chuyển mạch tích hợp)
• Ta thấy trên hình chuyển mạch tích hợp thứ 1,2....3 sẽ được gán với
f(f=3) chuyển mạch ở tầng dưới bắt đầu từ chuyển mạch 1,3,5 .Nếu đặt x
là số thứ tự chuyển mạch ở tầng trên ( tầng i) thì ta có vị trí đầu tiên được
gán của một chuyển mạch ở tầng i là:(x-1)*d+1
15



Báo cáo Project 1

Optimizer

• Chuyển mạch thứ 4(chuyển mạch cuối) sẽ được gán với f chuyển mạch
bắt đầu từ vị trí cuối cùng đếm ngược lại
b. Thực hiện
def tao_tichhop(n,m,f):
#Đầu vào:
#n: số chuyển mạch top of rack
#m: số chuyển mạch tích hợp
#f: Số chuyển mạch top of rack nối với 1 chuyển mạch tích hợp
i=0
j=0
d=n/m#Tính d
a=taomt(m,f+1)#Tạo ma trận m hàng f+1 cột
for i in range(m):
a[i][0]=i+1#Gán hàng đầu tiên là số thứ tự của chuyển mạch ở tầng tích hợp
for i in range(m-1):#Với các chuyển mạch ở vị trí 1...m-1
for j in range(1,f+1,1):#Mỗi chuyển mạch được gán với f chuyển mạch ở tầng
dưới
a[i][j]=i*d+j#Gán các chuyển mạch bắt đầu từ vị trí i*d+1 đến i*d+f cho
chuyển mạch thứ i
if (a[i][j]>n):#Nếu số chuyển mạch được gán vượt quá n
16


Báo cáo Project 1


Optimizer

a[i][j]=i*d+1-(i*d+j-n)#Sẽ gán theo chiểu ngược lại bắt đầu từ
i*d -> i*d-1 -> i*d-2...
for i in range(1,f+1,1):#Chuyển mạch cuối cùng
a[m-1][i]=n-i+1#Gán ngược bắt đầu từ chuyển mạch cuối
return a

5.3.3Ma trận thể hiện kết nối giữa tầng chuyển mạch top of rack và các Server
a. Giải thuật
Ở tầng này mỗi chuyển mạch ở tầng i(tầng top of rack) nối với e server.e được
nhập từ bàn phím.Ta thực hiện như sau:
• Tạo 1 ma trận n hàng e+1 cột
• Gán cột đầu tiên của mỗi hàng là số thứ tự của chuyển mạch ở tầng chuyển
mạch top of rack
• Gán các cột còn lại là số thứ tự của server nối với chuyển mạch ở tầng top of
rack nằm ở cột đầu tiên của hàng đó.Ta sẽ thực hiện gán như sau:

• Tính d=l/n(l: số server, n: số chuyển mạch top of rack)
17


Báo cáo Project 1

Optimizer

• Ta thấy trên hình chuyển mạch tích hợp thứ 1,2 sẽ được gán với e(e=4)
chuyển mạch ở tầng dưới bắt đầu từ chuyển mạch 1,3 .Nếu đặt x là số thứ
tự chuyển mạch ở tầng trên ( tầng i) thì ta có vị trí đầu tiên được gán của
một chuyển mạch ở tầng i là:(x-1)*d+1

• Chuyển mạch thứ 4(chuyển mạch cuối) sẽ được gán với e chuyển mạch
bắt đầu từ vị trí cuối cùng đếm ngược lại

b. Thực hiện
def tao_topofrack(l,n,e):
#Đầu vào :
#l:số server
#n:số chuyển mạch top of rack
#e: số server nối với 1 top of rack
i=0
j=0
d=l/n#Tính d
a=taomt(n,e+1)#Tạo ma trận n hàng e+1 cột
for i in range(n):
a[i][0]=i+1#Gán cột đầu tiên là số thứ tự của chuyển mạch top of rack
for i in range(n-1): #Với các chuyển mạch ở vị trí 1...n-1
for j in range(1,e+1,1): ):#Mỗi chuyển mạch được gán với e server
18


Báo cáo Project 1

Optimizer

a[i][j]=i*d+j #Gán các server bắt đầu từ vị trí i*d+1 đến i*d+e cho chuyển
mạch thứ i
if (a[i][j]>l): #Nếu số chuyển mạch được gán vượt quá n
a[i][j]=i*d+1-(i*d+j-l) )#Sẽ gán theo chiểu ngược lại bắt đầu từ
i*d -> i*d-1 -> i*d-2...
for i in range(1,e+1,1):#Đối với chuyển mạch cuối

a[n-1][i]=l-i+1 #Gán ngược bắt đầu từ chuyển mạch cuối
return a

6. Khối tìm đường cho kết nối
6.1 Ý nghĩa
Để thực hiện Optimizer một kết nối bất kì từ server a đến server b ta phải
thực hiện tìm tất cả các đường đi có thể cho kết nối đó trước khi quyết định chọn
đường đi nào cho kết nối.
6.2 Định dạng ma trận chứa đường đi
Giả sử ta có một Topology như hình vẽ.
Hệ thống có 2 chuyển mạch lõi, 4 chuyển mạch tích hợp , 4 chuyển mạch top of
rack, 8 server.

19


Báo cáo Project 1

Optimizer

Để thuận tiện trong quá trình tìm đường ta ngầm định đánh số các chuyển mạch
theo thứ tự từ trái sang phải bắt đầu từ 1. Giả sử ta phải tìm đường đi từ server số 1
đến server số 3 ta có thể chọn đường đi như sau:
1 -> 1 -> 1 -> 1 -> 2 -> 2 -> 3
Từ đó ta thấy mỗi đường đi từ server a đến server b bất kì sẽ phải trải qua 7 chặng.
Do đó để biểu diễn đường đi ta sẽ sử dụng một ma trận bao gồm 7 phần tử tương
ứng với 7 chặng của đường đi.
Để lưu tất cả các đường đi ta sẽ sử dụng một ma trận bao gồm x phần tử ( với x là
số đường đi có thể tìm được cho kết nối đã cho). Mỗi phần tử của ma trận này là
một ma trận bao gồm 7 phần tử tương ứng với 7 chặng của đường đi.

20


Báo cáo Project 1

Optimizer

6.3 Giải thuật
Như ở phần 5 ta thấy là để thể hiện kết nối giữa 2 tầng(tầng i,tầng j) của hệ thống
ta sử dụng ma trận như sau:
Số thứ tự chuyển mạch ở tầng i

Số thứ tự chuyển mạch ở tầng j nối với chuyển mạch ở tầng i tương ứng

ii

Dựa trên các ma trận thể hiện kết nối này chúng ta sẽ thực hiện việc tìm đường
bằng cách tìm tất cả các đường đi từ server phát đến tất cả các server khác sau đó
lọc ra những đường đi đến server đích. Vụ thể như sau:
• Gán server phát vào ma trận đường đi
• Duyệt ma trận thể hiện kết nối tầng top of rack-server xem chuyển mạch top
of rack nào nối với server đường đi. Khi tìm được gán chuyển mạch này vào
ma trận đường đi
• Duyệt các đường đi thu được sau bước 2 lấy ra các chuyển mạch top of rack
trong các đường đi này. Sau đó duyệt ma trận kết nối tầng tích hợp-top of
rack tìm các chuyển mạch tích hợp có kết nối đến chuyển mạch top of rack
đã lấy ra ở trên. Khi tìm thấy gán chuyển mạch vào ma trận đường đi
• Làm tương tự với các tầng tiếp theo ta sẽ thu được một ma trận đường bao
gồm các đường đi từ server a đến server b nào đó
• Lọc ra trong ma trận trên những đường đi có điểm đích là server đã cho

6.4 Thực hiện
def timduong(x,y,l,n,m,h,e,f,a,b,c):
21


Báo cáo Project 1

Optimizer

# Đầu vào
#x: server nguồn
#y: server đích
#l: số server
#n: số chuyển mạch top of rack
#m: số chuyển mạch tích hợp
#h: số chuyển mạch lõi
#e: số server nối vào 1 chuyển mạch top of rack
#f: số chuyển mạch top of rack nối vào 1 chuyển mạch tích hợp
#a: Ma trận thể hiện kết nối tầng core-tích hợp
#b: Ma trận thể hiện kết nối tầng tích hợp-top of rack
#c: Ma trận thể hiện kết nối tầng top of rack –server
mtd=[]#Khởi tạo ma trận chứa đường
kq=[]#Khởi tạo ma trận kết quả trả về
i=0
j=0
k=0
t1=[]#Biến tạm thời chứa tập hợp các đường đi
t2=[]#Biến tạm thời lưu 1 đường đi cụ thể
22



Báo cáo Project 1

Optimizer

for i in range(n):
for j in range(1,e+1,1):#Duyệt ma trận kết nối top of rack-server
if (c[i][j]==x):#Tìm ra những top of rack có nối đến server x
t2.append(x)#Thêm x vào t2
t2.append(c[i][0])#Thêm top of rack tìm được vào t2
t1.append(t2)#Thêm t2 vào tập hợp đường

t2=[]#Xóa t2 để phục vụ cho lần tìm tiếp theo
mtd=t1#Sau khi duyêth xong gán t1 cho ma trận đường
t1=[]#Xóa t1 để phục vụ cho việc duyệt tầng tiếp theo
for i in range( len(mtd)):#Duyệt ma trận đường
for j in range(m):
for k in range(1,f+1,1):#Duyệt ma trận kết nối tầng tích hợp-top of rack
if b[j][k]==mtd[i][1]:#Xét những top of rack có trong ma trận đường.
#Tìm các chuyển mạch tích hợp nối vào top of rack đó
addlist(t2,mtd[i])#Sau khi tìm được ta sẽ copy đường đi đã có
t2.append(b[j][0]) #Thêm vào đó các chuyển mạch tích hợp mới tìm
được
t1.append(t2) #Thêm t2 vào tập hợp đường t1
t2=[]#Xóa t2 để phục vụ cho lần tìm tiếp theo
23


Báo cáo Project 1


Optimizer

mtd=[]#Xóa ma trận đường
addlist(mtd,t1)#Copy tất cả các phần tử của t1 vào ma trận đường
t1=[]#Xóa t1 để phục vụ cho việc xét tầng tiếp theo

for i in range( len(mtd)):#Xét ma trận đường. Làm tương tự như trên đến khi tìm
được đường đầy đủ
for j in range(h):
for k in range(1,m/h+1,1):
if a[j][k]==mtd[i][2]:
addlist(t2,mtd[i])
t2.append(a[j][0])
t1.append(t2)
t2=[]
mtd=[]
addlist(mtd,t1)
t1=[]

for i in range( len(mtd)):
for j in range(h):
24


Báo cáo Project 1

Optimizer

if a[j][0]==mtd[i][3]:
for k in range(1,m/h+ 1,1):

t2=[]
addlist(t2,mtd[i])
t2.append (a[j][k])
t1.append(t2)
t2=[]
mtd=[]
addlist(mtd,t1)
t1=[]
for i in range( len(mtd)):
for j in range(m):
if b[j][0]==mtd[i][4]:
for k in range(1,f+ 1,1):
t2=[]
addlist(t2,mtd[i])
t2.append (b[j][k])
t1.append(t2)
t2=[]
25


×