Giải bài toán TSP sử dụng giải thuật di truyền

14 45 0
Giải bài toán TSP sử dụng giải thuật di truyền

Đ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

Giải bài toán TSP sử dụng giải thuật di truyền. §å ¸n trÝ tuÖ nh©n t¹o – Gi¶i bµi to¸n TSP sö dông gi¶i thuËt di truyÒn Môc lôc 1 Môc lôc 2 Lêi giíi thiÖu 3 I ®Æt vÊn ®Ò 3 1 1 Bài toán Travelling Salesman Problem(TSP) –Bài tãan người du lịch 4 II G.

Đồ án trí tuệ nhân tạo Giải toán TSP sư dơng gi¶i tht di trun Môc lôc Môc lôc - Lêi giíi thiƯu .- I- đặt vÊn ®Ị - 1.1 Bài toán: Travelling Salesman Problem(TSP) –Bài tãan người du lịch - II- Gi¶i qut vÊn ®Ị - 2.1 Giới thiệu thuật giải di truyền [2] - 2.2 Giải toán TSP với giải thuật di truyền - 2.3 ThiÕt kÕ ch¬ng tr×nh .- 12 III- KÕt luËn - 14 3.1 KÕt đạt được: - 14 3.2 Sử dụng chơng trình - 14 3.3 Híng ph¸t triĨn - 16 tài liệu tham khảo - 16 - Lời giới thiệu Ngày máy tính đà thâm nhập vào mặt đời sống xà hội, khoa học máy tính trở nên thân thiện với Máy tính đà công cụ thông minh ngày phục vụ hữu ích cho hầu nh tất lĩnh vực đời sống ngời Khoa học Trí tuệ nhân tạo (TTNT), môn khoa học nghiên cứu kỹ thuật làm cho máy tính suy nghĩ cách thông minh , thân thiện mô trình suy nghĩ ngời Đồ án trí tuệ nhân tạo Giải toán TSP sử dụng giải thuật di truyền TrÝ tuÖ nhân tạo bao gồm số lĩnh vực nghiên cứu Trong lĩnh vực tiếng quan trọng là: Xử lý ngôn ngữ tự nhiên, nhận dạng, ngời máy, Hệ chuyên gia Em xin chân thành cảm ơn thầy giáo TS- Nguyễn Xuân Hoài đẫ tận tình giảng dạy giúp đỡ em trình làm đồ án Do thời gian có hạn nên không khỏi thiếu xót, em mong thầy bạn đóng góp ý kiến Em xin chân thành cảm ơn! Hà nội, 20/04/2007 Học viên Kim Văn Việt I- đặt vấn đề 1.1 Bài toán: Travelling Salesman Problem(TSP) –Bài tãan người du lịch Một du khách phải ghé thăm thành phố vùng anh ta, xác lần, trở điểm khởi hành.Chi phí du lịch cặp thành phố cho trước, phải lập kế hoạch cho hành trình để tổng chi phí cho tồn hành trình tối thiểu? Khơng gian tìm kiếm TSP tập hốn vị n thành phố Bất hoán vị n thành phố lời giải chấp nhận (là tồn hành trình qua thành phố) Lời giải tối ưu hốn vị với chi phí tối thiểu hành trình.Kích thước tìm kiếm khơng gian tìm kiếm n! TSP toán tương đối cổ điển chứng minh thuộc loại NPkhó [2] Nã xuất nhiều ứng dụng số thành phố hoàn toàn có ý nghĩa Trong thập kỷ gần đây, xuất nhiều thuật giải đạt gần đến lời giải tối ưu toán TSP: thuật giải láng ging gn nht, thut gii Đồ án trí tuệ nhân tạo Giải toán TSP sử dụng giải thuËt di truyÒn háu ăn,thuật giải đảo gần nhất, đảo xa nhất, TSP trở thành đích nhắm cộng đồng GA: nhiều thuật giải dựa di truyền báo cáo năm gần đây.Những thuật giải nhằm tạo lời giải gần tối ưu cách trì quần thể lời giải trải qua biến đổi hai ngôi(“đột biến” “lai tạo”) theo kế hoạch chọn lọc nhiều phía cá thể phu hợp II- Gi¶i qut vÊn ®Ị 2.1 Giới thiệu thuật giải di truyền [2] Giải thuật Di truyền ( Genetic Algorithm ) có ứng dụng nhiều việc giải toán tối ưu hoá Tin học Sau chút giới thiệu sơ lược thuật giải Di truyn : Giải thuật di truyền (GA) 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 đợc tái sinh nhân hệ sau Mỗi cá thĨ cã cÊu tróc gen ®ùc trng cho phÈm chÊt thể Trong trình sinh sản, c¸ thĨ cã thĨ thõa hëng c¸c phÈm chÊt cđa c¶ cha mĐ, cÊu tróc gen cđa nã mang phần cấu trúc gen cha mẹ Ngoài trình tiến hóa, xẩy tợng đột biến, cấu trúc gen cá thể chứa gen cha mẹ Trong GA, cá thể đợc mà hóa cấu trúc liệu mô tả cấu trúc gen cá thẻ đó, ta gọi nhiễm sắc thể (Chromosome) Mỗi nhiễm sắc thể đợc tạo thành từ đơn vị đợc gọi gen Chảng hạn, GA cổ điển, nhiễm sắc thể la chuỗi nhị phân, tức cá thể đợc biẻu diễn chuỗi nhị phân GA làm việc quần thể gồm nhiỊu c¸ thĨ Mét qn thĨ øng víi mét giai đoạn phát triển đợc gọi hệ.Từ hệ ban dầu đợc tạo ra,GA bắt chớc chọn lọc tự nhiênvà di truyền để biến đổicác hệ.GA sử dụng toán tử sau để biến đổi hệ Toán tử tái sinh (reproduction) (còn đợc gọi toán tử chọn lọc(select)) Các cá thể tốt dợc chọn lọc để đa vào hệ sau Sự lựa chọn đợc 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 cđa nã lµ hµm thÝch nghi (fitness function)  Toán tử lai ghép (crossover) Hai cá thể cha mẹ trao đổi gen để tạo hai thể Toán tử đột biến (mutation) Một cá thể thay đổi số gen để tạo thành cá thẻ Tất cá toán tử thực mang tính ngẫu nhiên Cấu trúc cña GA nh sau: Procedure Genetic_Algorithm Begin t < 0; Khởi tạo hệ ban đầu P(t); Đánh giá P(t) theo hµm thÝch nghi ; Repeat t < t+1; sinh thÕ hƯ míi P(t) tõ P(t-1) bëi Chọn lọc Lai ghép Đồ án trí tuệ nhân tạo Giải toán TSP sử dụng gi¶i tht di trun Đột biến Đánh giá P(t); Until điều kiện kết thúc đợc thỏa mÃn; End; 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đa c¸c c¸ thĨ tèt nhÊt c¸c hệ khác không đáng kể Khi tht to¸n dõng, c¸c thĨ tèt nhÊt thÕ hệ cuối đợc chọn làm nghiệm cần tìm Bây ta xét chi tiết toán tử chọn lọc toán tử di truyền (lai ghép, đột biến) GA cỏ điển 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ả đợc 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.Quá trình chọn lọc đợc thực theo kỹ thuật quay bánh xe Giả sử thÕ hƯ hiƯn thêi P(t) gåm cã n c¸ thĨ {x 1, ,xn} Số n đợc gọi cỡ quần thể Với cá thể xi, ta tính ®é thÝch nghi cđa nã f(x i) TÝnh tỉng c¸c độ thích nghi tất ca thể quần thể: Mỗi lần chọn lọc, ta thực hai bíc sau: n F  f(xi) i 1 +) sinh số thực ngẫu nhiên q khoảng (0,F) +) xk cá thể đợc chọn, k sè nhá nhÊt cho: ViÖc chän läc theo hai bíc trªn cã thĨ minh häa nh sau: Ta cã mét b¸nh xe k  f ( xi) 4 i đợc 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 đợc chọn Rõ ràng với cách chọn này, cá thể có độ thích nghi cao có khả đợc chọn Các cá thể cã ®é thÝch nghi cao cã thĨ cã mét hay nhiều sao,các cá thể có độ thích nghi thấp mặt hệ sau(nó bị chết đi) Lai ghép: Trên cá thể đợc chọn lọc, ta tiến hành toán tử lai ghép.Đầu tiên ta cần đa xác suất lai ghép p c , xác suất cho ta hy vọng có p c.n cá thể đợc 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 doạn [0,1]; Đồ án trí tuệ nhân tạo Giải toán TSP sử dụng giải thuật di truyền * nÕu r< pc cá thể đợc chọn đẻ lai ghép Từ cá thể đợc 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 nh sau: Với cặp, sinh số ngẫu nhiên p đoạn [0,m-1], p vị trí điểm ghép Cặp gồm hai nhiễm sắc thể a = (a1 , , ap , ap+1 , , am) b = (b1 , , bp , bp+1 , , bm) đợc thay hai 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ó đợc sau trình lai ghép Đột biến thay đổi trạng thái số gen nhiễm sắc thể Mỗi gen chịu đột biến với xác suất pm xác suất đột 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ể: Trong ®ã : a = (a1 , , , , am) a' = (a'1 , , a'i , , a'm) a'i = - nÕu pi  pm nÕu pi < pm Sau trình chọn lọc, lai ghép đột biến,một hệ đợc sinh Công việc lại giải thuật lặp lại bớc 2.2 Giải toán TSP với giải thuật di truyền Gene : số thành phố Biểu diễn nhiễm sắc thể: cách tự nhiên ta đánh số thành phố dùng vecto nguyên để biểu diễn lộ trình Với cách biểu diễn , vecto thành phần nguyên v = biểu diễn lộ trình từ i1 đến i2, , tõ in-1 ®Õn in råi trë vỊ i1 (v hoán vị vecto ) Nhiễm sắc thể gồm nhiều Gene Khởi tạo nhiễm sắc thể: private void Initializer(Nhiem_Sac_The chromose) { bool[] PointSel = new bool[Points.Count]; bool bStop = false; { //tao chi so ngau nhien tu den Points.count int iSel = RndObj.Next(0, Points.Count); if (!PointSel[iSel]) { PointSel[iSel] = true; //them Gene vao Nhiem Sac The Đồ án trí tuệ nhân tạo Giải toán TSP sử dụng giải thuật di truyền chromose.AddGene(new Gene(iSel.ToString())); } for (int i = 0; i < Points.Count; i++) { if (!PointSel[i]) break; if (i == Points.Count - 1) bStop = true; } } while (!bStop); }  §é thÝch nghi : Giả sử giá trị nhiễm sắc thể: 1-2-5-6-7 Vì tổng đờng ngắn độ thích nghi nhiễm sắc thể đợc tính đơn giản cách lấy tổng khoảng cách, ví dụ: D12 = khoảng cách từ City1 đến City2 , D25 = khoảng cách từ City2 đến City5 , ,cho đến ta lấy đợc tổng Vì cần lấy khoảng cách nhỏ độ thích nghi nhiẽm sắc thể tăng lên.Tôi đà tính độ thích nghi nh sau: Nhiem_sac_the.Fitness = 1000/Tổng khoảng cách khoảng cách nhỏ độ thích nghi lớn (tỷ lƯ nghÞch) private void Fitness(Nhiem_Sac_The NST) { double fitness = 0; int CityIndex1 = 0; int CityIndex2 = 1; while (CityIndex2 { string strGene1 = int Pointindex1 = string strGene2 = int PointIndex2 = < NST.GeneLength) ((Gene)NST[CityIndex1]).Value; int.Parse(strGene1); ((Gene)NST[CityIndex2]).Value; int.Parse(strGene2); fitness += Distance((Point)Points[Pointindex1], (Point)Points[PointIndex2]); CityIndex1++; CityIndex2++; } // thich nghi tang len khoang cach giam NST.Fitness = 1000 / fitness; }  VỊ c¸c phÐp to¸n di trun, tríc hÕt lµ phÐp lai:  PhÐp lai(CrossOver): Sư dơng giải thuật háu ăn Định vị Gene nhiễm sắc thể cha Đồ án trí tuệ nhân tạo Giải toán TSP sử dụng giải thuật di truyÒn Định vị vị trí Gene nhiễm s¾c thĨ mĐ Copy gene míi tõ cha sang phÝa tr¸i Copy gene míi tõ mĐ sang phÝa phải Nếu không copy gene từ cha , mẹ mà độ dài nhiễm sác thể cha đủ ta chọn ngẫu nhiên gene lại kiểm tra xem đà có nhiễm sắc thể cha? Nếu cha ta thêm gene vào nhiễm sắc thể // lai ghep su dung giai thuat "hau an" private void CrossOver( Nhiem_Sac_The Dad, Nhiem_Sac_The Mum, ref Nhiem_Sac_The child1, ref Nhiem_Sac_The child2 ) { GreedyCrossOver(Dad, Mum, ref child1); GreedyCrossOver(Mum, Dad, ref child2); } //lai ghep hau an private void GreedyCrossOver ( Nhiem_Sac_The Dad , Nhiem_Sac_The Mum , ref Nhiem_Sac_The child ) { // dai nhiem sac the int length = Dad.GeneLength; int MumIndex = -1; //chon ngau nhien vi tri Gene cua Dad int DadIndex = RndObj.Next(0, length); Gene DadGene = (Gene)Dad[DadIndex]; //tim vi tri Gene ca the me Đồ án trí tuệ nhân tạo Giải toán TSP sử dơng gi¶i tht di trun MumIndex = Mum.HasThisGene(DadGene); if (MumIndex < 0) throw new Exception(" Khong tim thay Gene ca the me"); // them DadGene vao ca the child.Add(new Gene(DadGene.Value)); bool bDadAdded = true; bool bMumAdded = true; { Gene obMumGene = null; Gene obDadGene = null; //them Gene tu cha if (bDadAdded) { if (DadIndex > 0) DadIndex = DadIndex - 1; else DadIndex = length - 1; obDadGene = (Gene)Dad[DadIndex]; } else { bDadAdded = false; } //them gene tu me if (bMumAdded) { if (MumIndex < length - 1) MumIndex = MumIndex + 1; else MumIndex = 0; obMumGene = (Gene)Mum[MumIndex]; } else { bMumAdded = false; } if (bDadAdded && child.HasThisGene(obDadGene) < 0) { //them Gen Nst cha vao dau child.Insert(0, obDadGene); } else bDadAdded = false; Đồ án trí tuệ nhân tạo Giải toán TSP sử dụng giải thuật di truyền if (bMumAdded && child.HasThisGene(obMumGene) < 0) { //Them Gen nst me vao cuoi child.AddGene(obMumGene); } else bMumAdded = false; } while (bDadAdded || bMumAdded); // dung bDadAdded hoac bMumAdded = false // Them nhung Gene lai bang cach chon ngau nhien while (child.GeneLength < length) { bool bDone = false; { //chon ngau nhien Gene int iRandom = this.RndObj.Next(0, length); // Neu Gene khong co NST thi them vao ca the if (child.HasThisGene(new Gene(iRandom.ToString())) < 0) { child.Add(new Gene(iRandom.ToString())); bDone = true; } } while (!bDone); } // exit while (child.GeneLength > TSPApp.exe để chạy chơng trình Cách2: Bạn vào th mục Setup >> Setup.exe cài đặt sau vµo Start >> All Programs >> hvktqs >> >> TSPApp.exe hình Desktop có biểu tợng TSPApp.exe Chú ý: Để chạy đợc chơng trình bạn phải cài môi trờng hỗ trợ , đà đặt cài th mục Support Giao diện chơng trình 12 Đồ án trí tuệ nhân tạo Giải toán TSP sư dơng gi¶i tht di trun - Chia làm phần: Phần1: Map city : có chức hiển thị thành phố đờng Phần 2: Parameter : nhập tham số chơng trình Phần 3: Result: Hiển thị kết đờng Ví dụ: >2 >3 >5 Phần 4: Các nút lệnh thao tác xử lý(Randamize, Clear, Start, Exit) * Bạn hÃy nhập tham số vào hộp text: City (số thành phố): mặc định 20 Geneations (Thế hệ): mặc định 10 Population Size (cỡ quần thể): mặc định 50 Pm ( Xác suất đột biến): mặc định 7% CrossOver (tỷ lệ lai ghép) : Mặc định 75% * Vẽ thành phố lên Map City: Di chuyển chuột lên Map City bạn chọn vị trí thành phố nhấp chuột trái, vẽ thành phố ô tròn có số bên cạnh Hoặc bạn sử dụng button Randamize để vễ ngẫu nhiên thành phố Map City (số thành phố bạn chọn ô text City) * Button Clear : sử dụng để xóa thành phố đồ * Button Start: Thực tìm đờng ngắn Chơng trình vẽ đờng nối thành phố với * Button Exit: Thoát khỏi ứng dụng Ví dụ: 13 Đồ án trí tuệ nhân tạo Giải toán TSP sử dụng giải thuật di truyÒn - 3.3 Hớng phát triển Cải thiện thuật toán giải toán TSP cách tối u tài liệu tham kh¶o [1] Artificial Intelligence A modern Approach Second Edition [2] Thut gii di truyn Đinh mạnh Tờng - ĐHQG Hà Nội [3] Cấu trúc liệu + giải thuật di truyền = chơng trình tiến hóa [4] Website: http://cs.felk.cvut.cz/~xobitko/ga/ [5] Kü tht lËp tr×nh & øng dơng C# - Phạm Hữu Khang 14 ... Giải vấn đề 2.1 Giới thiệu thuật giải di truyền [2] Giải thuật Di truyền ( Genetic Algorithm ) có ứng dụng nhiều việc giải toán tối ưu hoá Tin học Sau chút giới thiệu sơ lược thuật giải Di truyền. .. toán TSP: thuật giải láng giềng gần nhất, thut gii Đồ án trí tuệ nhân tạo Giải toán TSP sử dụng giải thuật di truyền háu ăn ,thuật giải. .. trớc hết phép lai: Phép lai(CrossOver): Sử dụng giải thuật háu ăn Định vị Gene nhiễm sắc thể cha Đồ án trí tuệ nhân tạo Giải toán TSP sử dụng giải thuật di truyền

Ngày đăng: 13/11/2022, 22:08

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

Tài liệu liên quan