Báo cáo đồ án trí tuệ nhân tạo: Sử dụng thuật toán Gene với phương pháp chọn bánh xe Roulette cho bài toán ba lô 2

17 1.1K 0
Báo cáo đồ án trí tuệ nhân tạo: Sử dụng thuật toán Gene với phương pháp chọn bánh xe Roulette cho bài toán ba lô 2

Đ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

I. Thuật toán di truyền. Thuật toán di truyền (TTDT) là thuật toán bắt chước sự chọn lọc tự nhiên và di truyền. Trong tự nhiên, các cá thể khỏe, có khả năng thích nghi tốt với môi trường sẽ được tái sinh và nhân bản ở các thế hệ sau. Mỗi cá thể có cấu trúc gien đặc trưng cho phẩm chất của cá thể đó. Trong quá trình sinh sản, các cá thể con có thể thừa hưởng các phẩm chất của cả cha và mẹ, cấu trúc gien của nó mang một phần cấu trúc gien của cha và mẹ. Ngoài ra, trong quá trình tiến hóa, có thể xảy ra hiện tượng đột biến, cấu trúc gien của cá thể con có thể chứa các gien mà cả cha và mẹ đều không có. Trong TTDT, mỗi cá thể được mã hóa bởi một cấu trúc dữ liệu mô tả cấu trúc gien của cá thể đó, ta sẽ gọi nó là nhiễm sắc thể (chroniosome). Mỗi nhiễm sắc thể được tạo thành từ các đơn vị được gọi là gien. Chẳng hạn, trong các TTDT cổ điển, các nhiễm sắc thể là các chuỗi nhị phân, tức là mỗi cá thể được biểu diễn bởi một chuỗi nhị phân. TTDT sẽ làm việc trên các quần thể gồm nhiều cá thể. Một quần thể ứng với một giai đoạn phát triển sẽ được gọi là một thế hệ. Từ thế hệ ban đầu được tạo ra, TTDT bắt chước chọn lọc tự nhiên và di truyền để biến đổi các thế hệ. TTDT sử dụng các toán tử cơ bản sau đây để biến đổi các thế hệ. • Toán tử tái sinh (reproduction) (còn được gọi là toán tử chọn lọc (selection)). Các cá thể tốt được chọn lọc để đưa vào thế hệ sau. Sự lựa chọn này được thực hiện dựa vào độ thích nghi với môi trường của mỗi cá thể. Ta sẽ gọi hàm ứng mỗi cá thể với độ thích nghi của nó là hàm thích nghi (fitness function). • Toán tử lai ghép (crossover). Hai cá thể cha và mẹ trao đổi các gien để tạo ra hai cá thể con. • Toán tử đột biến (mutation). Một cá thể thay đổi một số gien để tạo thành cá thể mới. Tất cả các toán tử trên khi thực hiện đều mang tính ngẫu nhiên. **Các bước cơ bản của giải thuật di truyền: 1. Khởi tạo 1 quần thể ban đầu gồm các chuỗi nhiễm sắc thể. 2. Xác định giá trị mục tiêu cho từng nhiễm sắc thể tương ứng. 3. Tạo các nhiễm sắc thể mới dựa trên các toán tử di truyền. 4. Loại bớt các nhiễm sắc thể có độ thích nghi thấp. 5. Xác định hàm mục tiêu cho các nhiễm sắc thể mới và đưa vào quần thể. 6. Kiểm tra thỏa mãn điều kiện dừng.Nếu điều kiện đúng, lấy ra nhiễm sắc thể tốt nhất, giải thuật dừng lại; ngược lại, quay về bước 3.

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 I Thuật toán di truyền Thuật toán di truyền (TTDT) thuật toán bắt chước chọn lọc tự nhiên di truyền Trong tự nhiên, cá thể khỏe, có khả thích nghi tốt với mơi trường tái sinh nhân hệ sau Mỗi cá thể có cấu trúc gien đặc trưng cho phẩm chất cá thể Trong q trình sinh sản, cá thể thừa hưởng phẩm chất cha mẹ, cấu trúc gien mang phần cấu trúc gien cha mẹ Ngồi ra, q trình tiến hóa, xảy tượng đột biến, cấu trúc gien cá thể chứa gien mà cha mẹ khơng có Trong TTDT, cá thể mã hóa cấu trúc liệu mơ tả cấu trúc gien cá thể đó, ta gọi nhiễm sắc thể (chroniosome) Mỗi nhiễm sắc thể tạo thành từ đơn vị gọi gien Chẳng hạn, TTDT cổ điển, nhiễm sắc thể chuỗi nhị phân, tức cá thể biểu diễn chuỗi nhị phân TTDT làm việc quần thể gồm nhiều cá thể Một quần thể ứng với giai đoạn phát triển gọi hệ Từ hệ ban đầu tạo ra, TTDT bắt chước chọn lọc tự nhiên di truyền để biến đổi hệ TTDT sử dụng toán tử sau để biến đổi hệ • Tốn tử tái sinh (reproduction) (cịn gọi toán tử chọn lọc (selection)) Các cá thể tốt chọn lọc để đưa vào hệ sau Sự lựa chọn thực dựa vào độ thích nghi với mơi trường cá thể Ta gọi hàm ứng cá thể với độ thích nghi hàm thích nghi (fitness function) • Toán tử lai ghép (crossover) Hai cá thể cha mẹ trao đổi gien để tạo hai cá thể • Tốn tử đột biến (mutation) Một cá thể thay đổi số gien để tạo thành cá thể Tất toán tử thực mang tính ngẫu nhiên **Các bước giải thuật di truyền: Khởi tạo quần thể ban đầu gồm chuỗi nhiễm sắc thể Xác định giá trị mục tiêu cho nhiễm sắc thể tương ứng Tạo nhiễm sắc thể dựa toán tử di truyền Loại bớt nhiễm sắc thể có độ thích nghi thấp Xác định hàm mục tiêu cho nhiễm sắc thể đưa vào quần thể Kiểm tra thỏa mãn điều kiện dừng.Nếu điều kiện đúng, lấy nhiễm sắc thể tốt nhất, giải thuật dừng lại; ngược lại, quay bước **Cấu trúc TTDT sau: Simple Genetic Algorithm{} { Initialize the Population; Calculate Fitness Function; While (Fitness != Optimal Value) { Selection Crossover Mutation Calculate Fitness Function } } Trong thủ tục trên, điều kiện kết thúc vịng lặp số hệ đủ lớn đó, độ thích nghi cá thể tốt hệ khác không đáng kể Khi thuật toán dừng, cá thể tốt hệ cuối chọn làm nghiệm cần tìm Ta xét chi tiết cách mã hóa,tốn tử chọn lọc toán tử di truyền (lai ghép, đột biến) TTDT: 1.Mã hóa:  Mã hóa nhị phân Là dạng mã hóa phổ biến cách mã hóa chuỗi bit thay đổi tùy theo vấn đề Làm việc với integer tốt floating point *Ưu điểm: Dễ giao phối (mating) Biểu diễn nhiễm sắc thể với số gen *Khuyết điểm: Không thể giới hạn thay đổi dễ dàng Tiến hành hiệu chỉnh sau mate VD: A: 0101101100010011 B: 1011010110110101  Mã hóa hốn vị Nhiễm sắc thể chuỗi số thực, biểu diễn theo thứ tự *Ưu điểm: hữu dụng cho vấn đề thứ tự *Khuyết điểm: phải hiệu chỉnh sau mate VD: A:8549102367 B: 9102438576  Mã hóa giá trị Mỗi nhiễm sắc thể chuỗi giá trị Giá trị thứ liên quan đến vấn đề như: số, ký tự, đối tượng… VD: A: [red], [black], [blue], [yellow], [red], [green] B: 1.8765, 3.9821, 9.1283, 6.8344, 4.116, 2.192 C: ABCKDEIFGHNWLSWWEKPOIKNGVCI  Mã hóa Được dùng chủ yếu để rút biểu thức chương trình *Ưu điểm: biểu diễn khơng gian tìm kiếm không giới hạn (open-ended) *Khuyết điểm: xảy lỗi tiềm tàng,phát triển theo hướng khơng thể kiểm sốt, phát triển lớn khó hiểu khơng để đơn giản hóa Chọn lọc: Việc chọn lọc cá thể từ quần thể dựa độ thích nghi cá thể Các cá thể có độ thích nghi cao có nhiều khả chọn Cần nhấn mạnh rằng, hàm thích nghi cần hàm thực dương, khơng tuyến tính, khơng liên tục, khơng khả vi Q trình chọn lọc thực theo kỹ thuật quay bánh xe Giả sử hệ thời P(t) gồm có n cá thể {x1, ,xn} Số n gọi cỡ quần thể Với cá thể xi, ta tính độ thích nghi f(xi) Tính tổng độ thích nghi tất cá thể quần thể: n F = ∑ f(xi) i =1 Mỗi lần chọn lọc, ta thực hai bước sau: • Sinh số thực ngẫu nhiên q khoảng (0, F); • xk cá thể chọn, k số nhỏ cho k ∑ f ( xi) ≥ i =1 Việc chọn lọc theo hai bước minh họa sau: Ta có bánh xe chia thành n phần, phần ứng với độ thích nghi cá thể (hình 3.5) Một mũi tên vào bánh xe Quay bánh xe, bánh xe dừng, mũi tên vào phần nào, cá thể ứng với phần chọn Rõ ràng với cách chọn này, cá thể có độ thích nghi cao có khả chọn Các cá thể có độ thích nghi cao có hay nhiều sao, cá thể có độ thích nghi thấp khơng có mặt hệ sau Lai ghép: Trên cá thể chọn lọc, ta tíến hành tốn tử lai ghép Đầu tiên ta cần đưa xác suất lai ghép pc xác suất cho ta hy vọng có pc.n cá thể lai ghép (n cỡ quần thể) Với cá thể ta thực hai bước sau: • Sinh số thực ngẫu nhiên r đoạn [0, 1]; • Nếu r < pc cá thể chọn để lai ghép Từ cá thể chọn để lai ghép, người ta cặp đôi chúng cách ngẫu nhiên.Trong trường hợp nhiễm sắc thể chuỗi nhị phân có độ dài cố định m, ta thực lai ghép sau: với cặp,sinh số nguyên ngẫu nhiên p đoạn [0,m-1], p vị trí điểm ghép Cặp gồm nhiễm sắc thể: a = (a1, , ap, ap+1, , am) a = (b1, , bp, bp+1, , bm) thay là: a' = (a1, , ap, bp+1, , bm) b' = (b1, , bp, ap+1, , am) Đột biến: Ta thực toán tử đột biến cá thể có sau trình lai ghép Đột biến thay đổi trạng thái số gien nhiễm sắc thể Mỗi gien chịu đột biến với xác suất pm Xác suất đột biến pm ta xác định xác suất thấp Sau toán tử đột biến nhiễm sắc thể chuỗi nhị phân Với vị trí i nhiễm sắc thể: a = (a1, , ai, , am) Ta sinh số thực nghiệm ngẫu nhiên pi [0,1] Qua đột biến a biến thành a’ sau: a' = (a'1, , a'i, , a'm) Trong đó: a'i = pi ≥ pm - pi < pm Sau trình chọn lọc, lai ghép, đột biến, hệ sinh Cơng việc cịn lại thuật toán di truyền lặp lại bước *** Đặc điểm hội tụ thuật toán Khi áp dụng thuật toán di truyền cho vấn đề thực tế thường khó khăn.Nguyên nhân: + Cách biểu diễn gene tạo khơng gian tìm kiếm khác với khơng gian thực tốn + Số bước lặp cài đặt thường không xác định trước + Kích thước quần thể thường có giới hạn Trong số trường hợp, thuật tốn khơng thể tìm lời giải tối ưu hội tụ sớm lời giải tối ưu cục Hội tụ sớm vấn đề thuật toán di truyền giải thuật tối ưu khác Nếu hội tụ xảy q nhanh thơng tin đáng tin cậy phát triển quần thể thường bị bỏ qua Nguyên nhân hội tụ sớm liên quan tới vấn đề: + Quy mô loại sai số chế tạo mẫu + Bản chất hàm mục tiêu **Điều kiện dừng giải thuật: Có hai loại điều kiện dừng Các điều kiện dùng đặc trưng tìm kiếm để định ngừng trình tìm kiếm Dựa cấu trúc nhiễm sắc thể: hội tụ quần thể cách kiểm soát số alen hội tụ, alen coi hội tụ số phần trăm quần thể định trước có (hoặc tương đương biểu diễn không nhị phân) giá trị alen này.Nếu số alen hội tụ vượt số phần trăm tổng số alen, việc tìm kiếm kết thúc Dựa ý nghĩa đặc biệt nhiễm sắc thể: đo tiến giải thuật số hệ cho trước.Nếu tiến nhỏ số ɛ xác định,kết thúc tìm kiếm II Chương trình 1 Class Knapsack *Properties: + knapsackMaxWeight: khối lượng tối đa balô + knapsackCurrentWeight: khối lượng thời balô + knapsackValue: giá trị balô + fitness: số Fitness *Method: + Overload: để kiểm tra xem khối lượng túi vượt khối lượng max chưa + ShowItem: in số lượng đồ vật túi dạng gene public class Knapsack { private int knapsackMaxWeight, knapsackCurrentWeight = 0, knapsackValue = 0, fitness; private Item[] listItem = null; public int[] listItemAmount; public string strItems = ""; public int Fitness { get { return fitness; } } public int KnapsackCurrentWeight { get { return knapsackCurrentWeight; } } public int KnapsackValue { get { return knapsackValue; } } public Item[] ListItem { get { return listItem; } set { listItem = value; } } public Knapsack(int knapsackMaxWeight) { this.knapsackMaxWeight = knapsackMaxWeight; } public Knapsack(int knapsackMaxWeight, Item[] listItem) { this.knapsackMaxWeight = knapsackMaxWeight; this.listItem = listItem; listItemAmount = new int[ListItem.Length]; int i = 0; foreach (Item item in listItem) { knapsackCurrentWeight += (item.ItemWeight * item.ItemAmount); knapsackValue += (item.ItemValue * item.ItemAmount); listItemAmount[i] = item.ItemAmount; i++; } if (!overload()) fitness = knapsackValue; else { fitness = knapsackValue - knapsackCurrentWeight; } } public Boolean overload() { if (knapsackCurrentWeight > knapsackMaxWeight) return true; else return false; } public string showItem() { string s = ""; int i; for (i = 0; i < listItemAmount.Length - 1; i++) s += listItemAmount[i] + ", "; s += listItemAmount[i].ToString(); return s; } } 2.Class Item *Properties itemValue: giá trị đồ vật itemWeight: khối lượng đồ vật itemAmount: số lượng đồ vật public class Item { private int itemValue, itemWeight, itemAmount; public int ItemWeight { get { return itemWeight; } set { itemWeight = value; } } public int ItemValue { get { return itemValue; } set { itemValue = value; } } public int ItemAmount { get { return itemAmount; } set { itemAmount = value; } } public Item(int itemValue, int itemWeight) { this.itemValue = itemValue; this.itemWeight = itemWeight; } } 3.Class Gas public class GAs { // Knapsack ListKnapsack quần thể riêng biệt (trong hệ)***// //properties private Random rand; public int knapsackWeight,knapsackAmount; private int maxValue = 0; private int mutationProp; private Item[] listItem; public Knapsack[] listKnapsack; public Knapsack ksBestCurrent; //constructor public GAs(int knapsackWeight, int knapsackAmount, Item[] listItem, int mutationProp, int TotalGeneration) { this.knapsackWeight = knapsackWeight; this.knapsackAmount = knapsackAmount; this.mutationProp = mutationProp; this.listItem = listItem; rand = new Random(); initialize(); selectionForNewGeneration(listKnapsack); } //method private void initialize() { // Thế hệ đầu tiên: tất gene chấp nhận int i = 0; listKnapsack = new Knapsack[knapsackAmount]; Knapsack knapsack; while (i < knapsackAmount) { Item[] newList = listItem; foreach (Item item in newList) { item.ItemAmount = rand.Next(0, Convert.ToInt32(knapsackWeight / (item.ItemWeight))); } knapsack = new Knapsack(knapsackWeight, newList); if ((!knapsack.overload()) && (knapsack.KnapsackValue > 0)) { listKnapsack[i] = knapsack; if (knapsack.KnapsackValue > maxValue) { maxValue = knapsack.KnapsackValue; ksBestCurrent = knapsack; } i++; } } for (i = 0; i < listKnapsack.Length; i++) { System.Windows.Forms.MessageBox.Show(listKnapsack[i].showItem()); } } public void selectionForNewGeneration(Knapsack[] oldListKnapsack) { for (int i = 0; i < oldListKnapsack.Length; i++) { if (oldListKnapsack[i] == null) break; for (int j = i; j < oldListKnapsack.Length; j++) { if (oldListKnapsack[j] == null) break; Knapsack ksTemp; if (oldListKnapsack[i].Fitness > oldListKnapsack[j].Fitness) { ksTemp = oldListKnapsack[i]; oldListKnapsack[i] = oldListKnapsack[j]; oldListKnapsack[j] = ksTemp; } } } int count = 0; while (count < knapsackAmount) { listKnapsack[count++] = oldListKnapsack[oldListKnapsack.Length - knapsackAmount + count]; } } public Knapsack[] selectionForRecombination() { int fitnessTotal = 0, i = 0, times; foreach (Knapsack knapsack in listKnapsack) { if (knapsack != null) fitnessTotal += knapsack.Fitness; } times = rand.Next(knapsackAmount - 10, knapsackAmount + 10); if (times < 0) times = knapsackAmount; if (times % != 0) times += 1; Knapsack[] selectedKnapsacks = new Knapsack[times]; while (i < times) { int randNumber = rand.Next(1, fitnessTotal); int currentTotal = 0, pos = 0; while (currentTotal maxValue) { maxValue = knapsack.KnapsackValue; ksBestCurrent = knapsack; } } } j = 0; while (i < encodedListKnapsack.GetLength(0) + knapsackAmount) { newListKnapsack[i++] = listKnapsack[j++]; } return newListKnapsack; } public void gene(Knapsack[] oldListKnapsack, int times) { while (times > 0) { selectionForNewGeneration(oldListKnapsack); times ; gene(evaluation(mutation(crossover(encoding(selectionForRecombination())))), times); } } III.Kết thu từ chương trình Đồ án giới hạn việc minh họa cho thuật toán Gene với phương pháp chọn bánh xe Roulette cho toán balo2, chưa hướng tới việc áp dụng thực tế Để áp dụng cho thực tế cần nhiều thời gian trình tìm hiểu sâu hơn, sau kết thúc môn học này, em mong thầy giúp đỡ em để hồn thành chương trình cách hồn thiện Em xin cám ơn ! IV.Tài liệu tham khảo: Slide giảng thầy Ngô Hữu Phúc ... thu từ chương trình Đồ án giới hạn việc minh họa cho thuật toán Gene với phương pháp chọn bánh xe Roulette cho toán balo2, chưa hướng tới việc áp dụng thực tế Để áp dụng cho thực tế cần nhiều... thành n phần, phần ứng với độ thích nghi cá thể (hình 3.5) Một mũi tên vào bánh xe Quay bánh xe, bánh xe dừng, mũi tên vào phần nào, cá thể ứng với phần chọn Rõ ràng với cách chọn này, cá thể có... pi < pm Sau trình chọn lọc, lai ghép, đột biến, hệ sinh Cơng việc cịn lại thuật toán di truyền lặp lại bước *** Đặc điểm hội tụ thuật toán Khi áp dụng thuật toán di truyền cho vấn đề thực tế

Ngày đăng: 25/03/2014, 22:19

Từ khóa liên quan

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

Tài liệu liên quan