Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 169 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
169
Dung lượng
501 KB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ NGUYỄN HỮU MÙI THUẬT TOÁN VÀ CÁC BÀI TOÁN LỊCH BIỂU LUẬN ÁN TIẾN SĨ CÔNG NGHỆ THÔNG TIN Hà Nội – 2013 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CƠNG NGHỆ NGUYỄN HỮU MÙI THUẬT TỐN VÀ CÁC BÀI TOÁN LỊCH BIỂU Chuyên ngành: Khoa học máy tính Mã số: 62 48 01 01 LUẬN ÁN TIẾN SĨ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TSKH Vũ Đình Hịa PGS.TS Hồng Xn Huấn Hà Nội - 2013 LỜI CẢM ƠN Về phía cá nhân, tác giả xin bày tỏ lịng biết ơn chân thành tới PGS TSKH Vũ Đình Hồ, PGS TS Hồng Xn Huấn tận tình hƣớng dẫn tác giả q trình hồn thành luận án Tác giả chân thành cảm ơn TS Phạm Thọ Hoàn, Giám đốc Trung tâm khoa học tính tốn Trƣờng Đại học Sƣ phạm Hà Nội giúp đỡ tác giả nhiều trình thử nghiệm Trung tâm Về phía tập thể, tác giả xin chân thành cảm ơn Bộ mơn Khoa học máy tính, Khoa Cơng nghệ thơng tin, Trƣờng Đại học Công nghệ; Bộ môn Khoa học máy tính, Khoa Cơng nghệ thơng tin, Trƣờng Đại học Sƣ phạm Hà Nội hết lòng ủng hộ tạo điều kiện thuận lợi cho tác giả thời gian hồn thành luận án Cuối cùng, tác giả vơ biết ơn bàn bè ngƣời thân gia đình cổ vũ to lớn họ suốt thời gian hoàn thành luận án Hà Nội, tháng 09 năm 2013 Nguyễn Hữu Mùi LỜI CAM ĐOAN Tơi xin cam đoan cơng trình nghiên cứu riêng Các kết đƣợc viết chung với tác giả khác đƣợc đồng ý đồng tác giả trƣớc đƣa vào luận án Các kết nêu luận án trung thực chƣa đƣợc công bố cơng trình khác Tác giả Nguyễn Hữu Mùi MỤC LỤC LỜI CẢM ƠN LỜI CAM ĐOAN MỤC LỤC DANH MỤC CÁC KÝ HIỆU VÀ TỪ VIẾT TẮT DANH MỤC CÁC BẢNG DANH MỤC CÁC HÌNH VẼ MỞ ĐẦU CHƢƠNG TỔNG QUAN VỀ THUẬT TOÁN DI TRUYỀN VÀ BÀI TOÁN LẬP LỊCH JOB SHOP 1.1 Thuật toán di truyền cổ điển 1.1.1 Cấu trúc thuật toán di truyền cổ điển 1.1.2 Một thủ tục đơn giản cho thuật toán di truyền cổ điển 1.2 Các lớp toán P, NP, NPC NP-hard 1.2.1 Các lớp toán P NP 1.2.2 Các lớp toán NPC NP-hard 1.3 Tổng quan toán lập lịch job shop 1.3.1 Bài toán lập lịch job shop 1.3.2 Các tiếp cận xác 1.3.3 Các tiếp cận gần 1.3.4 Tổng kết đánh giá chung tiếp cận cho JSP 1.3.5 Một số tồn đề xuất CHƢƠNG HAI BÀI TOÁN CON CỦA BÀI TOÁN LẬP LỊCH JOB SHOP 2.1.Bài toán lập lịch flow shop hốn vị 2.1.1 Mơ tả tốn 2.1.2 Cách tính thời gian hồn thành lịch biểu hoán vị 2.1.3 Thuật toán Johnson cho PFSP máy PFSP máy 2.1.4 Một thuật tốn di truyền mã hóa tự nhiên cho toán lập lịch flow shop hoán vị tổng quát 2.1.5 Các kết thử nghiệm 2.2.Bài toán lập lịch flow shop 2.2.1 Mơ tả tốn 2.2.2 Một thuật tốn di truyền mã hóa tự nhiên cho tốn lập lịch flow shop tổng quát 2.2.3 Các kết thử nghiệm 2.3.Kết luận CHƢƠNG MỘT THUẬT TOÁN DI TRUYỀN LAI MỚI CHO BÀI TOÁN LẬP LỊCH JOB SHOP 3.1.Các lịch biểu tích cực bán tích cực 3.2.Thuật tốn GT 3.3.Một thuật toán di truyền lai cho t 3.3.1 Mã hoá lời giải 3.3.2 Khởi tạo tập lời giải cho hệ ban đầu 3.3.3 Xây dựng hàm thích nghi 90 3.3.4 Các toán tử di truyền 91 3.3.5 Thuật tốn tiến hóa 95 3.3.6 Tính đắn thuật tốn đƣợc đề nghị 96 3.4 Song song hóa thuật tốn di truyền lai cho toán lập lịch job shop 97 3.4.1 Mơ tả thuật tốn 97 3.4.2 Thủ tục di truyền song song cho JSP 99 3.4.3 Cài đặt thuật toán 100 3.5 Kết thử nghiệm 101 3.5.1 Kết thử nghiệm thuật toán 101 3.5.2 Kết thử nghiệm thuật toán song song 104 3.6 Kết luận 107 CHƢƠNG PHÂN TÍCH TÍNH HỘI TỤ CỦA THUẬT TỐN DI TRUYỀN LAI MỚI CHO BÀI TOÁN LẬP LỊCH JOB SHOP 109 4.1 Lý thuyết Xích Markov 109 4.1.1 Khái niệm xích Markov 110 4.1.2 Các tính chất Xích Markov 112 4.2 Xích Markov Ergodic .113 4.3 Phân tích tính hội tụ thuật toán di truyền lai cho toán lập lịch job shop 114 4.3.1 Phân tích tính hội tụ thuật tốn di truyền truyền thống 114 4.3.2 Phân tích tính hội tụ thuật toán di truyền với cá thể tinh hoa toán tử chép 122 4.4 Kết luận 126 KẾT LUẬN 127 HƢỚNG NGHIÊN CỨU TIẾP THEO .128 DANH MỤC CÔNG TRÌNH KHOA HỌC CỦA TÁC GIẢ LIÊN QUAN ĐẾN LUẬN ÁN 129 TÀI LIỆU THAM KHẢO 131 PHỤ LỤC 141 DANH MỤC CÁC KÝ HIỆU VÀ TỪ VIẾT TẮT 10 11 12 13 14 15 16 17 18 19 20 DANH MỤC CÁC BẢNG Bảng 1.1 - JSP công việc, máy 28 Bảng 2.1 - PFSP công việc máy 56 Bảng 2.2 - PFSP công việc máy 62 Bảng 2.3 - Các công việc chƣa đƣợc lập lịch 63 Bảng 2.4 - Các công việc chƣa đƣợc lập lịch 63 Bảng 2.5 - Các công việc chƣa đƣợc lập lịch 64 Bảng 2.6 - PFSP công việc máy 66 Bảng 2.7 - Thời gian xử lý công việc máy G H .66 Bảng 2.8 - Mã hóa lời giải theo số tự nhiên 67 Bảng 2.9 - Kết chạy thử nghiệm .73 Bảng 2.10 - FSP máy công việc 75 Bảng 2.11 - Mã hóa lời giải theo số tự nhiên 76 Bảng 2.12 - Kết chạy thử nghiệm 80 Bảng 3.1 - JSP công việc, máy 83 Bảng 3.2 - Mã hoá thao tác số tự nhiên JSP × 89 Bảng 3.3 - Nhiệm vụ Master Slave 98 Bảng 3.4 - Kết chạy thử nghiệm toán test Lawrence 101 Bảng 3.5 - So sánh kết chạy thử nghiệm 104 Bảng 3.6 - Kết chạy thử nghiệm NHGA PHGA toán test Muth & Thompson đề nghị 105 Bảng 3.7 - So sánh thời gian chạy thử nghiệm NHGA PHGA 105 { G.Add(opeNext); Operation *opeResult = findOpeBothMachine(PM, opeNext); opeNext->ES = Max(opeChooser->EC, opeResult->EC); opeNext->EC = opeNext->ES + opeNext->getPt(); } G.Remove(opeChooser); } for (int i = 1; i InitGT(arrope, numMachine, numJob, numOpe); gene->makespan(); Add(gene); } tinhM(); tinhFitness(); } 143 Hàm tính tham số M void Population :: tinhM() { M=0; float _M = 0.0; for (int i = 0; i < Count; i++) { ptu[i]->makespan(); _M+ = 2.0*((float)ptu[i]->MakeSpan/nPopulation); } M = (int)_M; } Hàm tính độ thích nghi cá thể void Population :: tinhFitness() { for (int i = 0; i < Count; i++) ptu[i]->fitness(M); } Hàm chọn cá thể tham gia đột biến void Population :: selectMutation() { List temp = Select(); List listMutation; for (int i = 0; i < nPopulation; i++) if (rd.Next() < pMutation) { listMutation.Add(temp[i]); 144 } if (listMutation.Count > 0) for (int i = 0; i < listMutation.Count ; i ++) { for(int ii = 0;ii < 5; ii++) { Gene *ge = listMutation[i]->Clone(); ge->Mutation(); if (ge->updateGene() == true && kiemtratrunggene(ge)==false) { ge->Eval(M); if(ge->MakeSpan MakeSpan) { Add(ge->Clone()); break; } } } } } Hàm đột biến void Gene :: Mutation() { Random rd; int p1, p2; 145 { p1 = rd.Next(Count); p2 = rd.Next(Count); if ((ptu[p1]->getMachine() == ptu[p2]->getMachine()) && (p1 != p2)) { Operation *temp; temp = ptu[p2]; ptu[p2] = ptu[p1]; ptu[p1] = temp; } } while (ptu[p1]->getMachine() != ptu[p2]->getMachine() || (p1 == p2)) ; } Hàm chọn cá thể tham gia trao đổi chéo void Population :: selectCrossOver3() { List temp = Select(); List listcross; for (int i = 0; i < nPopulation; i++) if (rd.Next() < pCrossover) { listcross.Add(temp[i]); } while (listcross.Count % != 0) listcross.RemoveAt(listcross.Count – 1); 146 if (listcross.Count > 0) for (int i = 0; i < listcross.Count - 2; i += 3) { Gene *g= new Gene; { g->InitCrossOver3 (arrope, numMachine, numJob, numOpe, *listcross[i], *listcross[i + 1], *listcross[i + 2]); } while (g->updateGene() == false); if (kiemtratrunggene(g) == false) { g->Eval(M); Add(g->Clone()); } } } Hàm trao đổi chéo void Gene :: InitCrossOver3(Operation ***arrope,int numMachine, int numJob, int numOpe, Gene g1, Gene g2, Gene g3) { Operation ***S1; S1= new Operation **[numMachine + 1]; for(int i =0; i < numMachine + 1; i++) S1[i] = new Operation*[numJob + 1]; Operation ***S2; S2 = new Operation **[numMachine + 1]; for(int i = 0; i < numMachine + 1; i++) S2[i] = new Operation*[numJob + 1]; 147 Operation ***S3; S3= new Operation **[numMachine + 1]; for(int i = 0; i < numMachine + 1; i++) S3[i] = new Operation*[numJob + 1]; { int k = 0; for (int i = 1; i getPt(); G.Add(ope); } for (int k = 0; k < numOpe ; k++) { Operation *opeMinEc = findOpeMinEC(G); int machineIndex = opeMinEc>getMachine(); 149 List GM; for (int i = 0; i < G.Count; i++) if (G[i]->getMachine() == machineIndex) GM.Add(G[i]); List CM; for (int i = 0; i < GM.Count; i++) if (GM[i]->ES < opeMinEc->EC) CM.Add(GM[i]); Operation *opeChooser = NULL; int num = rd.Next(3); int Lmin = 30000; if (num == 0) { for (int kk = 0; kk < CM.Count; kk++) { int i = CM[kk]->getJob(); int l = 30000; for (int j = 1; j getJob() == i) { l = j; break; } if (l < Lmin) Lmin = l; } int r = S1[machineIndex][Lmin]>getJob(); for (int i = 0; i < CM.Count; i+ +) 150 { Operation *x = CM[i]; if (x->getJob() == r) opeChooser = x; } } else if (num == 1) { for (int kk = 0; kk < CM.Count; kk++) { int i = CM[kk]->getJob(); int l = 30000; for (int j = 1; j getJob() == i) { l = j; break; } if (l < Lmin) Lmin = l; } int r = S2[machineIndex][Lmin]>getJob(); for (int i = 0; i < CM.Count; i+ +) { Operation *x = CM[i]; if (x->getJob() == r) opeChooser = x; } } else 151 { for (int kk = 0; kk < CM.Count; kk++) { int i = CM[kk]->getJob(); int l = 30000; for (int j = 1; j getJob() == i) { l = j; break; } if (l < Lmin) Lmin = l; } int r = S3[machineIndex][Lmin]>getJob(); for (int i = 0; i < CM.Count; i+ +) { Operation *x = CM[i]; if (x->getJob() == r) opeChooser = x; } } int J = machineIndex; int I = PM[machineIndex]->Count + 1; opeChooser->s = opeChooser->ES; opeChooser->c = opeChooser->EC; S[J][I] = opeChooser->Clone(); PM[J]->Add(S[J][I]); for (int i = 0; i < GM.Count; i++) 152 if (GM[i] != opeChooser) { GM[i]->ES = Max(GM[i]->ES, opeChooser->EC); GM[i]->EC = GM[i]->ES + GM[i]->getPt(); } Operation *opeNext = opeChooser->findOpeNext(arrope, numMachine); if (opeNext != NULL) { G.Add(opeNext); Operation *opeResult = findOpeBothMachine(PM, opeNext); opeNext->ES = Max(opeChooser->EC, opeResult->EC); opeNext->EC = opeNext->ES + opeNext->getPt(); } G.Remove(opeChooser); } for (int i = 1; i Clone(); if(max->MakeSpan MakeSpan) { newPopulation.Add(max); Copy(); } else newPopulation.Add(TheBestGene); tinhFtotal(); tinhP(); tinhQ(); for(int i=0;iq >= rd1) newPopulation.Add(ptu[0]>Clone()); else for(int j=1;jq < rd1 && rd1 q) { newPopulation.Add(ptu[j]->Clone()); break; } } return newPopulation; } Hàm chép void Population:: Copy() 154 { Gene *max = NULL; float GiaTri = 0; for (int i=0; iFitness) { max = ptu[i]; GiaTri = max->Fitness; } TheBestGene = max->Clone(); } 155 ... ĐẠI HỌC CÔNG NGHỆ NGUYỄN HỮU MÙI THUẬT TOÁN VÀ CÁC BÀI TOÁN LỊCH BIỂU Chuyên ngành: Khoa học máy tính Mã số: 62 48 01 01 LUẬN ÁN TIẾN SĨ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TSKH Vũ... MỚI CHO BÀI TOÁN LẬP LỊCH JOB SHOP Bài toán lập lịch job shop tốn lập lịch tổng qt khó giải Trong chƣơng này, luận án đề xuất thuật toán di truyền lai cho JSP Thuật toán kết hợp thuật toán di truyền... 2.3.Kết luận CHƢƠNG MỘT THUẬT TOÁN DI TRUYỀN LAI MỚI CHO BÀI TOÁN LẬP LỊCH JOB SHOP 3.1 .Các lịch biểu tích cực bán tích cực 3.2 .Thuật toán GT 3.3.Một thuật toán di truyền