BÁO CÁO BÀI TẬP LỚN Đề Tài:Không gian trạng thái được mô tả là bài toán chiếc ba lô loại 1,xây dựng chương trình giải quyết bài toán theo giải thuật gen và phương pháp chọn là bánh xe roulette. I)Mô tả bài toán: Bạn có một số các vật mà bạn có thể cầm theo trong chuyến du lịch Mỗi vật có một trọng lượng và một giá trị. Có một cái túi giới hạn trọng lượng bạn có thế cầm theo. Mỗi vật chỉ được chọn tối đa 1 lần. Bạn muốn cầm các vật mang theo với max giá trị. Đồ vật: 1 2 3 4 5 6 7 Giá trị: 5 8 3 2 7 9 4 T.lượng: 7 8 4 10 4 6 4 Khối lượng tối đa có thể mang là 22 đơn vị. Xếp đồ vật để có giá trị lớn nhất? Phương pháp giải quyết vấn đề:dùng giải thuật gen và phương pháp chọn roulette. II. Xây dựng B1:Mã Hóa Mã hóa nhị phân (Binary encoding) là kiểu thông dụng nhất: nghiên cứu đầu tiên về thuật toán Gen sử dụng kiểu mã hóa này và bởi vì nó đơn giản Trong mã hóa nhị phân, mọi nhiễm sắc thể là chuỗi bits - 0 hoặc 1. Cá thể (Chromosome) A: 101100101100101011100101 Cá thể (Chromosome) B: 111111100000110000011111 Mã hóa nhị phân đưa ra nhiều khả năng của nhiễm sắc thể với một số lượng nhỏ các gen đẳng vị. Các mã hóa này thường không tự nhiên cho nhiều bài toán và thỉnh thoảng sai sau khi thực hiện các phép toán crossover and/or mutation Encoding: 0 = not exist, 1 = exist in the Knapsack Chromosome: 1010110 Generate random population of n chromosomes: a) 0101010 b) 1100100 c) 0100011 B2:xây dựng hàm thích nghi Lựa chọn kết quả tối ưu đc cho là gần với kết
HỌC VIỆN KỸ THUẬT QUÂN SỰ KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO MƠN HỌC TRÍ TUỆ NHÂN TẠO Giáo viên hướng dẫn: Ngô Hữu Phúc HÀ NỘI 3/2010 BÁO CÁO BÀI TẬP LỚN Đề Tài:Không gian trạng thái được mơ tả là bài tốn chiếc ba lơ loại 1,xây dựng chương trình giải quyết bài toán theo giải thuật gen và phương pháp chọn là bánh xe roulette I)Mô tả bài tốn: Bạn có số vật mà bạn cầm theo chuyến du lịch Mỗi vật có trọng lượng và giá trị Có túi giới hạn trọng lượng bạn có thế cầm theo Mỗi vật được chọn tối đa lần Bạn muốn cầm vật mang theo với max giá trị Đồ vật: Giá trị: T.lượng: 10 Khối lượng tối đa mang là 22 đơn vị Xếp đồ vật để có giá trị lớn nhất? Phương pháp giải quyết vấn đề:dùng giải thuật gen và phương pháp chọn roulette II Xây dựng B1:Mã Hóa Mã hóa nhị phân (Binary encoding) là kiểu thông dụng nhất: nghiên cứu về thuật toán Gen sử dụng kiểu mã hóa này và vì đơn giản Trong mã hóa nhị phân, mọi nhiễm sắc thể là chuỗi bits - Cá thể (Chromosome) A: 101100101100101011100101 Cá thể (Chromosome) B: 111111100000110000011111 Mã hóa nhị phân đưa nhiều khả nhiễm sắc thể với số lượng nhỏ gen đẳng vị Các mã hóa này thường khơng tự nhiên cho nhiều bài toán và thỉnh thoảng sai sau thực phép toán crossover and/or mutation Encoding: = not exist, = exist in the Knapsack Chromosome: 1010110 Generate random population of n chromosomes: a) 0101010 b) 1100100 c) 0100011 B2:xây dựng hàm thích nghi Lựa chọn kết quả tối ưu đc cho là gần với kết quả mà ta cần tìm a) 0101010: Benefit= 19, Weight= 24 b)1100100: Benefit= 20, Weight= 19 c)0100011: Benefit= 21, Weight= 18 Ta chọn phương án b,c! B3:xây dựng phương pháp chọn cho sự kết hợp Các nhiễm sắc thể được chọn từ quần thể là cha cho lai ghép (crossover) Với phương pháp chọn bánh xe roulette Cha được chọn qua độ thích nghi chúng Nhiễm sắc thể tốt hơn, nhiều ngẫu nhiên phải được chọn Tưởng tượng roulette wheel nơi tất cả NST quần thể được đặt lên Kích thước đoạn roulete wheel tương ứng với giá trị hàm thích nghi Một bi được lăn roulette wheel và NST nơi dừng lại được lựa chọn NST với giá trị thích nghi lớn được chọn nhiều B4:sau chọn được cá thể tốt cho lai ghép,thực thao tác Crossover và mutation là hai phép toán bản thuật tốn gen nhằm tạo nên quần thể có giá trị tốt và đạt được kết quả mà ta tìm kiếm Trong chương trình này,ta sử dụng phương pháp single_point crossover,two_point và Arithmetic_crossover để lai ghép cá thể cha III)Xây dựng chương trình: Giao diện: Xây dựng mảng để lưu giá trị,khối lượng vật public int[,] knapsack = }, { 7, }, { 9, }, { private string[] private string[] private string[] new int[7, 2] { { 5, }, { 8, }, { 3, }, { 2, 10 4,4} }; str_dt = new string[30]; str_p = new string[30]; str_f = new string[30]; Khi khởi tạo giá trị quần thể ban đầu: Mã lệnh thực thi private void button1_Click(object sender, EventArgs e) { //int dem = 0; lb.Items.Clear(); for (int i = 0; i < 30; i++) { gen_str: string str_ = Random_ks(); if (i==0) str_dt[i] = str_; else for (int j = 0; j < i; j++) { if (str_dt[j] == str_) goto gen_str; else str_dt[i] = str_; } } C# hỗ trợ và giúp tạo nên chuổi tùy ý với giá trị và khối lượng vật đã gắn cứng chương trình Giá trị và khối lượng cá thể tương ứng Botton “value” là hàm thích nghi,lựa chọn cá thẻ cha tốt cho lai ghép tạo quần thể Xây dựng hàm Elitism private string Elitism(string[] str_) { int max = 0,sum1=0; int index = 0,sum2=0; for (int i = 0; i < 30; i++) { string tmp = str_[i]; for (int j = 0; j < 7; j++) { if (Convert.ToInt16(tmp[j]) == 49) { sum1 += knapsack[j, 0]; sum2 += knapsack[j, 1]; } } if (sum2 max) { max = sum1; index = i; } sum1 = sum2 = 0; } return str_[index]; Khi tạo quần thể bằng crossover mutation, làm cá thể tốt Phương pháp Elitism cho phép copy cá thể tốt (hoặc vài cá thể tốt) sang quần thể Thành phần lại quần thể được tạo từ cách khác Phương pháp Elitism tăng tốc cho bài tốn, vì ngăn khơng làm cá thể tốt Xây dựng hàm Mutation tạo đột biến cá thể để tiếp tục lai ghép private void Mutation(string[] str) { Random rnd = new Random(); int index_str = rnd.Next(0,30); string tmp = str[index_str]; int num = rnd.Next(1, 3); for (int i = 0; i < num; i++) { int index = rnd.Next(0,6); if (tmp[index].Equals("0")) { tmp.Remove(index, 1); tmp.Insert(index, "1"); } else { tmp.Remove(index, 1); tmp.Insert(index, "0"); } } str_p[index_str] = tmp; } Xây dựng hàm chọn bánh xe roulette private int roulette(string[] str_p_) { int sum1 =0,sum2=0; string tmp = ""; for (int i=0;i r) { ret = i; goto end; } end: } return ret; Tiến hành lai ghép và kết quả quần thể thu được sau lai ghép: Kết quả ta tìm đc lời giải tốt không hẳn là tối ưu bài toán vì phương pháp chọn chưa thực sự tốt diễn biến thực tế IV)Các tài liệu tham khảo: a Slide bài giảng môn AI thầy b Trang web google.com.vn và trang khác Em cảm ơn thầy dạy em mơn Trí tuệ nhân tạo ...BÁO CÁO BÀI TẬP LỚN Đề Tài:Không gian trạng thái được mơ tả là ba? ?i tốn chiếc ba lơ loại 1 ,xây dựng chương trình giải quyết ba? ?i toán theo giải thuật gen và phương pháp chọn. .. Gen sử dụng kiểu mã hóa này và vì đơn giản Trong mã hóa nhị phân, mọi nhiễm sắc thể là chuỗi bits - Cá thể (Chromosome) A: 10 110 010 110 010 1 011 10 010 1 Cá thể (Chromosome) B: 11 111 110 000 011 0000 011 111 ... chọn kết quả tối ưu đc cho là gần với kết quả mà ta cần tìm a) 010 1 010 : Benefit= 19 , Weight= 24 b )11 0 010 0: Benefit= 20, Weight= 19 c) 010 0 011 : Benefit= 21, Weight= 18 Ta chọn phương án