Ứng dụng của giải thuật di truyền trong bài toán vận tải

74 495 0
Ứng dụng của giải thuật di truyền trong bài toán vận tải

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Mục Lục LỜI CẢM ƠN Error! Bookmark not defined LỜI NÓI ĐẦU PHẦN MỞ ĐẦU Chương 1: GIẢI THUẬT DI TRUYỀN – KHÁI NIỆM CƠ BẢN 1.1 Một số thuật ngữ giải thuật di truyền 1.2 Quan hệ giải thuật di truyền với giải thuật leo đồi thủ tục mô luyện thép .9 1.3 Các thành phần giải thuật di truyền 10 1.4 Các trình giải thuật di truyền .11 1.4.1 Quá trình lai ghép (phép lai) 11 1.4.2 Quá trình đột biến (phép đột biến) 11 1.4.3 Quá trình sinh sản (phép tái sinh) 12 1.4.4 Quá trình chọn lọc (phép chọn) 12 1.5 Cấu trúc giải thuật di truyền .12 1.6 Tối ưu hàm biến giải thuật di truyền 13 1.6.1 Biểu diễn không gian lời giải toán .14 1.6.2 Khởi tạo quần thể 15 1.6.3 Hàm lượng giá .15 1.6.4 Các phép toán di truyền 16 1.6.5 Các tham số di truyền 16 1.6.6 Các kết thử nghiệm 17 1.7 Tính ưu việt giải thuật di truyền 17 1.7.1 Thuật toán Leo đồi .18 1.7.2 Thủ tục mô luyện thép .20 1.7.3 Giải thuật di truyền 21 1.8 Kết luận 22 Chương 2: CƠ CHẾ THỰC HIỆN GIẢI THUẬT DI TRUYỀN 23 Chương 3: NGUYÊN LÝ HOẠT ĐỘNG CỦA GIẢI THUẬT DI TRUYỀN 38 3.1 Phép lai 44 3.2 Đột biến 46 Chương 4: ỨNG DỤNG CỦA GIẢI THUẬT DI TRUYỀN VÀO BÀI TOÁN VẬN TẢI .48 4.1 Bài toán vận tải tuyến tính 48 4.2 Biểu diễn lời giải cho toán vận tải cân 49 4.2.1 Thỏa mãn ràng buộc 50 4.2.2 Hàm lượng giá .50 4.2.3 Thủ tục khởi tạo 50 4.2.4 Các toán tử di truyền 51 4.3 Chương trình tìm lời giải tốt cho toán vận tải với áp dụng giải thuật di truyền 53 4.3.1 Giới thiệu giao diện 53 4.3.2 Hướng dẫn nhập liệu .54 4.3.3 Cách hiển thị kết xem kết 54 4.3.4 Đánh giá chương trình .55 Kết luận 57 PHỤ LỤC .58 LỜI NÓI ĐẦU Cùng với đời phát triển mạnh mẽ máy vi tính, công nghệ thông tin nói chung khoa học máy tính nói riêng, việc nghiên cứu, phát minh thuật toán giải toán khó mà trước giải trực tiếp giấy Nhờ có thuật toán tin học mà ngày dễ dàng nhanh chóng tìm kết toán phức tạp Tuy phát triển máy vi tính nhanh nhiều so với đời thuật toán nói chúng song hành với nhau, bổ sung hỗ trợ cho phát triển đạt nhiều thành công rực rỡ nhiều ứng dụng thực tiễn Song nhiều toán nan giải chưa giải tốc độ xử lý chưa cao, giải chưa triệt để Chính thúc đẩy nhà khoa học và nghiên cứu, tìm tòi thuật toán nhằm đưa giải thuật tối ưu Trong lịch sử phát triển đó, nhiều thuật toán tin học đời, bao gồm thuật toán kinh điển quen thuộc, thuật toán mẻ “Giải thuật di truyền” thuật toán đời khẳng định vị trí trước muôn vàn thuật toán có trước Đây lý thúc em tìm hiểu “giải thuật di truyền” chọn đề tài: “Ứng dụng giải thuật di truyền toán vận tải” đồ án tốt nghiệp Qua em muốn tìm hiểu giải thuật di truyền, nguyên lý hoạt động ứng dụng thực tiễn toán tối ưu Báo cáo em gồm phần chính:  PHẦN MỞ ĐẦU: Trong phần trình bày số nguyên nhân, lý đời giải thuật di truyền, tính đắn, cách thức lập luận quan điểm đắn  Chương 1: GIẢI THUẬT DI TRUYỀN – KHÁI NIỆM CƠ BẢN Trong phần đưa thành phần bản, trình bản, cấu trúc thuật toán tổng quát giải thuật di truyền, so sánh tính ưu việt hai thuật toán tối ưu: Thuật toán leo đồi thủ tục mô luyện thép  Chương 2: CƠ CHẾ THỰC HIỆN GIẢI THUẬT DI TRUYỀN Trong phần trình bày cách thức biểu diễn cấu trúc liệu, bước thực giải thuật di truyền thông qua ví dụ cụ thể: giải toán tối ưu số biến đơn giản  Chương 3: NGUYÊN LÝ HOẠT ĐỘNG CỦA GIẢI THUẬT DI TRUYỀN Phần trình bày cách chi tiết nguyên lý hoạt động, bước thực giải thuật di truyền (đột biến lai tạo) thông qua ví dụ cụ thể: giải toán tối ưu số thực đa biến  Chương 4: ỨNG DỤNG CỦA GIẢI THUẬT DI TRUYỀN VÀO BÀI TOÁN VẬN TẢI Phần trình bày khái niệm toán vận tải, cách thức tiếp cận giải thuật di truyền toán vận tải cân bằng, áp dụng để cài đặt chương trình sử dụng giải thuật di truyền giải toán vận tải cân Trong trình thực đồ án, em không tránh khỏi thiếu sót Vậy kính mong nhận bảo, đóng góp ý kiến thầy giáo, cô giáo bạn để báo cáo hoàn thiện Em xin chân thành cảm ơn! Thái Nguyên, tháng 05 năm 2008 PHẦN MỞ ĐẦU Trong thực tế, có nhiều toán tối ưu quan trọng đòi hỏi giải thuật toán có chất lượng cao Ví dụ: Ta áp dụng phương pháp mô luyện thép để giải toán tìm đường ngắn nhất… Cũng có nhiều toán tối ưu tổ hợp (trong có nhiều toán chứng minh thuộc loại NP – đủ) giải gần máy tính đại kỹ thuật Monte – Carlo Nói tóm lại, toán tối ưu xem toán tìm giải pháp tốt không gian giải pháp Khi không gian giải pháp nhỏ, phương pháp tìm kiếm cổ điển đủ để thích hợp Nhưng không gian giải pháp lớn cần phải áp dụng kỹ thuật đặc biệt Trí tuệ nhân tạo Giải thuật di truyền (Genetic Algorithms - GA) kỹ thuật Giải thuật di truyền (GA – Genetic Algorithms) kỹ thuật khoa học máy tính nhằm tìm kiếm giải pháp thích hợp cho toán tối ưu tổ hợp (combinatorial optimization) Giải thuật di truyền ba phân ngành thuật toán tiến hóa (quy hoạch tiến hóa, chiến lược tiến hóa giải thuật di truyền) Giải thuật di truyền vận dụng nguyên lý tiến hóa lai ghép, đột biến, sinh sản, chọn lọc tự nhiên Giải thuật di truyền loại giải thuật mô tượng tự nhiên: Kế thừa đấu tranh sinh tồn để cải thiện lời giải khảo sát không gian lời giải Khái niệm kế thừa đấu tranh sinh tồn giải thích qua thí dụ tiến hóa quần thể thỏ sau: “Có quần thể thỏ Trong số có số nhanh nhẹn thông minh khác Những thỏ nhanh nhẹn thông minh có xác suất bị chồn cáo ăn thịt nhỏ hơn, chúng tồn để tạo thêm nhiều thỏ tốt nhờ trình sinh sản Dĩ nhiên số thỏ chậm chạp thiếu thông minh tồn nhờ may mắn Quần thể thỏ sống sót bắt đầu sinh sản để trì nòi giống Việc sinh sản tạo hỗn hợp tốt “nguyên liệu di truyền thỏ”: Một số thỏ chậm chạp có với thỏ nhanh nhẹn, số thỏ nhanh nhẹn có với thỏ nhanh nhẹn, số thỏ chậm chạp có với thỏ chậm chạp… Thêm vào đó, thiên nhiên lại ném vào vào số thỏ “hoang dã” cách làm đột biến nguyên liệu di truyền thỏ Những thỏ sinh nhờ kết này, nhanh thông minh thỏ quần thể gốc chúng có nhiều bố mẹ nhanh nhẹn thông minh thoát chết khỏi chồn cáo (Tuy nhiên, chồn, cáo trải qua tiến trình tương tự để tồn tại: Nhanh thông minh để bắt thỏ - tạo nên cân sinh thái)” “Khi tìm kiếm lời giải tối ưu, giải thuật di truyền thực bước tương ứng với câu chuyện đấu tranh sinh tồn loài thỏ” Giải thuật di truyền, thuật toán tiến hóa nói chung, hình thành dựa quan niệm cho rằng: “Quá trình tiến hóa tự nhiên trình hoàn hảo nhất, hợp lý nhất, tự mang tính tối ưu” Quan niệm xem tiên đề đúng, không chứng minh được, phù hợp với thực tế khách quan Quá trình tiến hóa thể tính tối ưu chỗ, hệ sau tốt (phát triển hơn, hoàn thiện hơn) hệ trước Tiến hóa tự nhiên trì nhờ hai trình bản: sinh sản chọn lọc tự nhiên Xuyên suốt trình tiến hóa tự nhiên, hệ sinh để bổ sung thay thế hệ cũ Cá thể phát triển hơn, thích ứng với môi trường tồn Cá thể không thích ứng với môi trường bị đào thải Sự thay đổi môi trường động lực thúc đẩy trình tiến hóa Ngược lại, tiến hóa tác động trở lại góp phần làm thay đổi môi trường Các cá thể sinh trình tiến hóa nhờ lai ghép hệ cha mẹ Một cá thể mang tính trạng cha - mẹ (di truyền), mang tính trạng hoàn toàn (đột biến) Di truyền đột biến hai chế có vai trò quan trọng tiến trình tiến hóa, đột biến xảy với xác suất nhỏ nhiều so với tượng di truyền Trong lập trình tiến hóa nói chung - giải thuật di truyền nói riêng, giải toán đặt ra, ta cần tận dụng tối đa tri thức toán để chương trình tiến hóa đạt hiệu cao Việc tận dụng tri thức toán thể qua:  Việc xây dựng cấu trúc liệu hợp lý cho việc xây dựng phép toán di truyền tự nhiên hiệu  Việc sử dụng phương pháp sử dụng để giải toán kết hợp chúng với giải thuật di truyền  Việc tận dụng hai cách chương trình tiến hóa Đây cách nhiều nhà nghiên cứu ứng dụng lập trình tiến hóa sử dụng Chương 1: GIẢI THUẬT DI TRUYỀN – KHÁI NIỆM CƠ BẢN 1.1 Một số thuật ngữ giải thuật di truyền Giải thuật di truyền sử dụng thuật ngữ di truyền học như: gen, cá thể, quần thể  Gen: gen kiểm soát (số) đặc trưng lời giải toán xét Mỗi gen có vị trí định lời giải nhận giá trị định miền xác định tùy thuộc vào dạng toán: nhị phân, miền số nguyên, hay số thực  Cá thể (kiểu gen, cấu trúc): coi chuỗi hay nhiễm sắc thể (NST) Tuy nhiên cần ý để phân biệt: tế bào chủng loại động - thực vật cho, mang số lượng cố định (ví dụ ruồi giấm NST, người 46 NST); giải thuật di truyền, ta nói cá thể có NST Cấu trúc NST phụ thuộc vào dạng toán xét Các NST hình thành từ đơn vị gen – biểu diễn chuỗi tuyến tính, gen kiểm soát (số) đặc trưng NST  Quần thể: tập hợp lời giải (cá thể) toán (chủng loại hay giống loài) Mỗi kiểu gen (NST) biểu diễn lời giải toán giải (ý nghĩa NST cụ thể người sử dụng xác định trước); tiến trình tiến hóa thực quần thể nhiễm sắc thể tương ứng với trình tìm kiếm lời giải không gian lời giải Tìm kiếm cần cân hai mục tiêu mâu thuẫn nhau: Khai thác lời giải tốt (như giải thuật leo đồi) khảo sát không gian tìm kiếm (như giải thuật tìm kiếm ngẫu nhiên) Giải thuật di truyền thường ứng dụng nhằm sử dụng ngôn ngữ máy tính để mô trình tiến hoá tập hợp đại diện trừu tượng (gọi nhiễm sắc thể - NST) giải pháp (gọi cá thể) cho toán tối ưu hóa vấn đề Tập hợp tiến triển theo hướng chọn lọc giải pháp tốt 1.2 Quan hệ giải thuật di truyền với giải thuật leo đồi thủ tục mô luyện thép Leo đồi thuật toán thí dụ chiến lược cho phép ta khai thác cải thiện lời giải tốt hành; leo đồi lại bỏ qua việc khảo sát không gian tìm kiếm Ngược lại, tìm kiếm ngẫu nhiên thí dụ điển hình chiến lược khảo sát không gian tìm kiếm mà không ý đến việc khai thác vùng đầy hứa hẹn không gian Giải thuật di truyền (GA) phương pháp tìm kiếm (độc lập miền) tạo cân đối đáng kể việc khai thác cải thiện lời giải tốt hành với khảo sát không gian tìm kiếm Thực ra, GA thuộc lớp giải thuật xác suất, lại khác với giải thuật ngẫu nhiên chúng kết hợp phần tử tìm kiếm trực tiếp ngẫu nhiên Khác biệt quan trọng tìm kiếm GA phương pháp tìm kiếm khác GA trì xử lý tập lời giải (quần thể) – tất phương pháp khác xử lý điểm không gian tìm kiếm Chính mà GA mạnh phương pháp tìm kiếm có nhiều Đơn cử, ta so sánh GA với hai phương pháp tìm kiếm sử dụng rộng rãi: Leo đồi mô luyện thép Phương pháp leo đồi dùng kỹ thuật lặp áp dụng cho điểm (điểm hành không gian tìm kiếm) Trong bước lặp, điểm chọn từ lân cận điểm hành (vì leo đồi gọi phương pháp tìm kiếm lân cận hay tìm kiếm cục bộ) Nếu điểm cho giá trị hàm mục tiêu tốt hơn, điểm trở thành điểm hành Nếu không, lân cận khác chọn thử Quá trình lặp không cải thiện thêm cho lời giải hành Rõ ràng phương pháp leo đồi cung cấp giá trị tối ưu cục giá trị phụ thuộc nhiều vào điểm khởi đầu Hơn nữa, thông tin sẵn có sai số tương đối (thỏa tối ưu toàn cục) lời giải tìm Để tăng hội thành công, phương pháp leo đồi thường thực nhiều lần; lần với điểm khởi đầu khác (những điểm không cần chọn ngẫu nhiên – tập hợp điểm khởi đầu lần thực thi phụ thuộc vào kết lần chạy trước đó) Kỹ thuật mô luyện thép kỹ thuật khắc phục bất lợi phương pháp leo đồi: Lời giải không tùy thuộc nhiều vào điểm khởi đầu thường gần với điểm tối ưu Đạt điều nhờ đưa vào xác suất nhận p Xác suất nhận p hàm theo giá trị hàm mục tiêu điểm hành điểm mới, số tham số điều khiển bổ sung gọi tham số “nhiệt độ” T Nói chung nhiệt độ T thấp hội nhận điểm nhỏ Khi thực giải thuật, nhiệt độ T hệ thống hạ thấp dần theo bước Giải thuật dừng T nhỏ ngưỡng cho trước; với ngưỡng gần không thay đổi chấp nhận Như đề cập, GA thực tiến trình tìm kiếm lời giải tối ưu theo nhiều hướng, cách trì quần thể lời giải, thúc đẩy hình thành trao đổi thông tin hướng Quần thể trải qua tiến trình hình thành tiến hóa: hệ lại tái sinh lời giải tương đối “tốt”, lời giải tương đối “xấu” chết Để phân biệt lời giải khác nhau, hàm mục tiêu dùng để đóng vai trò môi trường 1.3 Các thành phần giải thuật di truyền Một giải thuật di truyền áp dụng giải toán gồm năm thành phần sau đây: 1) Một cấu trúc liệu I biểu diễn không gian lời giải toán 2) Phương pháp khởi tạo quần thể ban đầu P(0) 3) Hàm định nghĩa độ thích nghi eval(.) đóng vai trò môi trường 4) Các phép toán di truyền như: đột biến, lai tạo, chọn lọc tự nhiên 5) Và tham số giải thuật di truyền sử dụng (kích thước quần thể, xác suất lai, đột biến ) 10 MsgBox "Bai toan van tai khong can bang, tong Sour() va tong Dest() khong bang nhau" GridSour.Enabled = True OK_Sour.Enabled = True GridSour.SetFocus Exit Sub End If ok_Dest.Enabled = False GridDest.Enabled = False GridCost.Enabled = True GridCost.Cols = k + GridCost.Rows = n + For i = To n GridCost.TextMatrix(i, 0) = "Nguån " & i Next i For i = To k GridCost.TextMatrix(0, i) = "§Ých " & i Next i End Sub Private Function Balance() As Boolean Dim i, ts, td As Integer For i = To n ts = ts + sour(i) Next i For i = To k td = td + dest(i) Next If ts = td Then Balance = True Else 60 Balance = False End If End Function Private Sub ok_k_Click() If Trim(txtTotalDest.Text) = "" Then MsgBox "Chua nhap so dich nhan hang!" txtTotalDest.SetFocus Exit Sub End If k = CInt(Trim(txtTotalDest.Text)) txtTotalDest.Enabled = False ok_k.Enabled = False ReDim dest(k) As Integer GridDest.Cols = k + GridDest.Rows = Dim i As Integer For i = To k GridDest.TextMatrix(0, i) = "Dest(" & i & ")" Next i End Sub Private Sub ok_n_Click() If Trim(txtTotalSour.Text) = "" Then MsgBox "Chua nhap so nguon cung cap hang!" txtTotalSour.SetFocus Exit Sub End If n = CInt(Trim(txtTotalSour.Text)) txtTotalSour.Enabled = False ok_n.Enabled = False ReDim sour(n) As Integer 61 GridSour.Cols = n + GridSour.Rows = Dim i As Integer For i = To n GridSour.TextMatrix(0, i) = "Sour(" & i & ")" Next i End Sub Private Sub ok_pop_gen_Click() If Trim(txtpop_size.Text) = "" Then MsgBox "Chua nhap so ca the " txtpop_size.SetFocus Exit Sub End If If Trim(txtgen_num.Text) = "" Then MsgBox "Chua nhap so the he " txtgen_num.SetFocus Exit Sub End If If Trim(txtPc.Text) = "" Then MsgBox "Chua nhap xac suat lai " txtPc.SetFocus Exit Sub End If If CSng(Trim(txtPc.Text)) = Then MsgBox "Xac suat lai nam khoang tu den (0 1)" txtPc.SetFocus Exit Sub End If If Trim(txtPm.Text) = "" Then MsgBox "Chua nhap xac suat dot bien " 62 txtPm.SetFocus Exit Sub End If If CSng(Trim(txtPm.Text)) = Then MsgBox "Xac suat dot bien nam khoang tu den (0 1)" txtPm.SetFocus Exit Sub End If pop_size = CInt(Trim(txtpop_size.Text)) gen_num = CInt(Trim(txtgen_num.Text)) Pc = CSng(Trim(txtPc.Text)) Pm = CSng(Trim(txtPm.Text)) ok_pop_gen.Enabled = False txtgen_num.Enabled = False txtpop_size.Enabled = False txtPc.Enabled = False txtPm.Enabled = False Call Genetic End Sub Private Sub OK_Sour_Click() Dim i As Integer For i = To n If GridSour.Cell(flexcpText, 1, i) "" Then sour(i - 1) = CInt(GridSour.Cell(flexcpText, 1, i)) Else sour(i - 1) = End If Next i OK_Sour.Enabled = False GridSour.Enabled = False 63 End Sub Private Sub cmd_extra_Click() Dim i, j As Integer i = CInt(CboGen.Text) j = CInt(CboMem.Text) Call ExtraResult(Best(i - 1, j - 1)) End Sub Private Sub Genetic() Dim i, j As Integer ReDim R(pop_size) As Result For i = To pop_size - ReDim R(i).V(n, k) As Integer Next i ReDim Best(gen_num, pop_size) As Result For i = To gen_num - For j = To pop_size - ReDim Best(i, j).V(n, k) As Integer Next j Next i 'Khoi tao quan the Call InitGeneration For i = To pop_size - Call DisplayResult(R(i)) MsgBox "ca the thu: " & i Next i For i = To gen_num - 'Dot bien Call Mutation(R()) For j = To pop_size - R(j).TotalCost = CalculateCost(R(j)) 64 Call DisplayResult(R(j)) MsgBox "The he thu:" & i & " - ca the thu: " & j + Next j Call Sort(R()) For j = To pop_size - Best(i, j) = R(j) Next j ‘Lai tao Call Crossover Next i For i = To gen_num CboGen.AddItem CStr(i) Next i For i = To pop_size CboMem.AddItem CStr(i) Next i End Sub Private Sub Crossover() Dim c, m, i, j As Integer ' Chon ca the bat ky de lai tao Do c = random(T) m = random(T) Loop Until c m ReDim DIV(n, k) As Integer ReDim RM(n, k) As Integer ReDim RM1(n, k) As Integer ReDim RM2(n, k) As Integer For i = To n - For j = To k - 65 DIV(i, j) = Fix((KQ(c - 1).V(i, j) + KQ(m - 1).V(i, j)) / 2) RM(i, j) = (KQ(c - 1).V(i, j) + KQ(m - 1).V(i, j)) Mod Next Next ReDim divsrc(n) As Integer ReDim divdes(k) As Integer ReDim rmsrc(n) As Integer ReDim rmdes(k) As Integer For i = To n - For j = To k - divsrc(i) = divsrc(i) + DIV(i, j) Next Next For j = To k - For i = To n - divdes(j) = divdes(j) + DIV(i, j) Next Next For i = To n - rmsrc(i) = src(i) - divsrc(i) Next For j = To k - rmdes(j) = des(j) - divdes(j) Next Dim val As Integer For i = To n - For j = To k - If (RM(i, j) = 1) And (rmsrc(i) > 0) And (rmdes(j)) Then RM1(i, j) = rmsrc(i) = rmsrc(i) - 66 rmdes(j) = rmdes(j) - Else RM1(i, j) = End If Next Next For i = To n - For j = To k - RM2(i, j) = RM(i, j) - RM1(i, j) Next Next X1.cost = X2.cost = ReDim X1.V(n, k) As Integer ReDim X2.V(n, k) As Integer For i = To n - For j = To k - X1.V(i, j) = DIV(i, j) + RM1(i, j) X1.cost = X1.cost + X1.V(i, j) * cost(i, j) X2.V(i, j) = DIV(i, j) + RM2(i, j) X2.cost = X2.cost + X2.V(i, j) * cost(i, j) Next Next If X1.cost < KQ(T - 1).cost Then KQ(T - 1).cost = X1.cost For i = To n - For j = To k - KQ(T - 1).V(i, j) = X1.V(i, j) Next Next 67 End If Call Sort If X2.cost < KQ(T - 1).cost Then KQ(T - 1).cost = X2.cost For i = To n - For j = To k - KQ(T - 1).V(i, j) = X2.V(i, j) Next Next End If Call Sort End Sub Private Sub Mutation(R() As Result) Dim m_num, p, q, index, i, j, a, db As Integer m_num = Round(pop_size * Pm) + 'm_num: So ca the se bi dot bien ReDim Check(m_num) As Integer Call matrix_num(Check(), m_num, pop_size) For db = To m_num - index = Check(db) 'index: Chi so cua ca the bi dot bien (ca the me) p = RandomNum(n - 1) + 'p: so hang duoc lay q = RandomNum(k - 1) + 'q: so cot duoc lay ReDim W.V(p, q) As Integer ReDim sourW(p) As Integer ReDim destW(q) As Integer ReDim rw(p) As Integer ReDim cl(q) As Integer 'Chon cac hang de dot bien Call matrix_num(rw(), p, n) Call matrix_num(cl(), q, k) For i = To p - 68 sourW(i) = For j = To q - W.V(i, j) = R(index).V(rw(i), cl(j)) sourW(i) = sourW(i) + W.V(i, j) Next j Next i For j = To q - destW(j) = For i = To p - destW(j) = destW(j) + W.V(i, j) Next i Next j W = init(p, q, sourW(), destW()) For i = To p - For j = To q - R(index).V(rw(i), cl(j)) = W.V(i, j) Next j Next i Next db End Sub Private Sub matrix_num(b() As Integer, ByVal s As Integer, ByVal d As Integer) Dim a, i, j As Integer ReDim L(d) As Boolean For j = To d - L(j) = True Next j i=0 Do a = RandomNum(d) - If L(a) Then 69 b(i) = a L(a) = False i=i+1 End If Loop Until i = s For i = To s - For j = i + To s - If b(i) > b(j) Then Call swapt(b(i), b(j)) End If Next j Next i End Sub Private Sub InitGeneration() Dim i As Integer For i = To pop_size - R(i) = init(n, k, sour(), dest()) R(i).TotalCost = CalculateCost(R(i)) Next i Call Sort(R()) For i = To pop_size - Best(0, i) = R(i) Next i End Sub Private Function init(ByVal ntemp As Integer, ByVal ktemp As Integer, sourtemp() As Integer, desttemp() As Integer) As Result Dim RS As Result ReDim RS.V(ntemp, ktemp) As Integer Dim row, col, i, kt, q, val As Integer kt = ntemp * ktemp 70 ReDim L(kt) As Boolean ReDim src(ntemp) As Integer ReDim dst(ktemp) As Integer For i = To ntemp - src(i) = sourtemp(i) Next i For i = To ktemp - dst(i) = desttemp(i) Next i For i = To kt - L(i) = True Next i Do q = RandomNum(kt) If L(q - 1) Then L(q - 1) = False 'L(q-1)danh dau da dc tham col = (q - 1) Mod ktemp + row = (q - col + 1) / ktemp + val = min(src(row - 1), dst(col - 1)) RS.V(row - 1, col - 1) = val src(row - 1) = src(row - 1) - val dst(col - 1) = dst(col - 1) - val init = RS End If Loop While testL(L(), kt - 1) End Function Private Function CalculateCost(Rt As Result) As Integer Dim i, j As Integer CalculateCost = For i = To n - 71 For j = To k - CalculateCost = CalculateCost + Rt.V(i, j) * cost(i, j) Next j Next i End Function Private Sub Sort(Rt() As Result) Dim i, j As Integer Dim temp As Result ReDim temp.V(n, k) As Integer For i = To pop_size - For j = i + To pop_size - If Rt(i).TotalCost > Rt(j).TotalCost Then temp = Rt(i) Rt(i) = Rt(j) Rt(j) = temp End If Next j Next i End Sub Private Sub DisplayResult(Rtemp As Result) Dim i, j As Integer GridResult.Cols = k + GridResult.Rows = n + For i = To k GridResult.TextMatrix(0, i) = dest(i - 1) Next i For i = To n GridResult.TextMatrix(i, 0) = sour(i - 1) Next i For i = To n 72 For j = To k GridResult.TextMatrix(i, j) = Rtemp.V(i - 1, j - 1) Next j Next i txttotalcost.Text = Rtemp.TotalCost End Sub Private Sub ExtraResult(Rtemp As Result) Dim i, j As Integer gridExtra.Cols = k + gridExtra.Rows = n + For i = To k gridExtra.TextMatrix(0, i) = dest(i - 1) Next i For i = To n gridExtra.TextMatrix(i, 0) = sour(i - 1) Next i For i = To n For j = To k gridExtra.TextMatrix(i, j) = Rtemp.V(i - 1, j - 1) Next j Next i 'txtextracost.Text = Rtemp.TotalCost End Sub Module procedures.bas Public Function KeyPress(ByVal KeyAscii As Integer) As Integer Dim StrTemp As String StrTemp = "~`!@#$%^&*()_{}[];:',/?QWERTYUIOPASDFGHJKLZXCVBMqwertyuiopasdfghjklzxcvbnm" If InStr(1, StrTemp, Chr(KeyAscii)) > Then KeyPress = 73 Else KeyPress = KeyAscii End If End Function Public Sub swapt(a As Integer, b As Integer) Dim temp As Integer temp = a a=b b = temp End Sub Public Function RandomNum(ByVal n As Integer) As Integer RandomNum = Int(Rnd(1) * n + 1) End Function Public Function min(ByVal X As Integer, ByVal Y As Integer) As Integer If X > Y Then = Y Else = X End If End Function Public Function testL(k() As Boolean, s As Integer) As Boolean Dim i As Integer For i = To s If k(i) Then testL = True Exit Function End If Next testL = False End Function 74

Ngày đăng: 04/08/2016, 09:01

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan