1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Luận án tiến sĩ thuật toán và các bài toán lịch biểu luận án TS công nghệ thông tin 62 48 01 01

156 4 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 156
Dung lượng 2,21 MB

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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ĐẠ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 TỐN LỊCH BIỂU Chun 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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ả trình hoà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 hoà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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com LỜI CAM ĐOAN Tôi xin cam đoan cơng trình nghiên cứu riêng tơi 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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Ẽ 10 MỞ ĐẦU 12 CHƢƠNG TỔNG QUAN VỀ THUẬT TOÁN DI TRUYỀN VÀ BÀI TOÁN LẬP LỊCH JOB SHOP 19 1.1 Thuật toán di truyền cổ điển 19 1.1.1 Cấu trúc thuật toán di truyền cổ điển 20 1.1.2 Một thủ tục đơn giản cho thuật toán di truyền cổ điển 24 1.2 Các lớp toán P, NP, NPC NP-hard 25 1.2.1 Các lớp toán P NP 25 1.2.2 Các lớp toán NPC NP-hard 25 1.3 Tổng quan toán lập lịch job shop 26 1.3.1 Bài toán lập lịch job shop 26 1.3.2 Các tiếp cận xác 29 1.3.3 Các tiếp cận gần 32 1.3.4 Tổng kết đánh giá chung tiếp cận cho JSP 50 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 1.3.5 Một số tồn đề xuất 52 CHƢƠNG HAI BÀI TOÁN CON CỦA BÀI TOÁN LẬP LỊCH JOB SHOP 55 2.1 Bài toán lập lịch flow shop hoán vị 55 2.1.1 Mơ tả tốn 55 2.1.2 Cách tính thời gian hồn thành lịch biểu hốn vị 57 2.1.3 Thuật toán Johnson cho PFSP máy PFSP máy 60 2.1.4 Một thuật toán di truyền mã hóa tự nhiên cho tốn lập lịch flow shop hoán vị tổng quát 67 2.1.5 Các kết thử nghiệm 73 2.2 Bài toán lập lịch flow shop 74 2.2.1 Mơ tả tốn 74 2.2.2 Một thuật toán di truyền mã hóa tự nhiên cho tốn lập lịch flow shop tổng quát 75 2.2.3 Các kết thử nghiệm 80 2.3 Kết luận 81 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 82 3.1 Các lịch biểu tích cực bán tích cực 82 3.2 Thuật toán GT 85 3.3 Một thuật toán di truyền lai cho toán lập lịch job shop 88 3.3.1 Mã hoá lời giải 89 3.3.2 Khởi tạo tập lời giải cho hệ ban đầu 90 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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 toá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 tố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 TOÁ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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com DANH MỤC CÁC KÝ HIỆU VÀ TỪ VIẾT TẮT ACO Ant Colony Optimization AI Artificial Intelligence AS Ant System BB Branch and Bound CPU Central Processing Unit FSP Flow shop Scheduling Problem GA Genetic Algorithms GLS Genetic Local Search GT Giffler and Thompson 10 HTT Hyper Threading Technology 11 IM Iterative Improvement 12 JSP Job shop Scheduling Problem 13 MIP Mixed Integer linear Programming 14 MPP Massively Parallel Processor 15 PFSP Permutation Flow shop Scheduling Problem 16 RISC Reduced Instructions Set Computer 17 SA Simulated Annealing 18 SB Shifting Bottleneck 19 TA Threshold Acceptance 20 TS Tabu Search LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com PHỤ LỤC Các hàm thuật tốn di truyền lai mà luận án đề xuất đƣợc cài đặt ngôn ngữ C++ nhƣ dƣới đây:  Hàm GT() dùng cho khởi tạo quần thể void Gene :: InitGT(Operation ***arrope, int numMachine, int numJob, int numOpe) { Random rd; Operation ***S; S = new Operation **[numMachine + 1]; for(int i = 0; i < numMachine + 1; i++) S[i] = new Operation*[numJob + 1]; List G; List C; List **PM= new List *[numMachine + 1]; for (int i = 0; i < numMachine + 1; i++) PM[i] = new List; for (int i = 1; i Clone(); ope->ES = 0; ope->EC = ope->getPt(); G.Add(ope); } for (int k = 0; k < numOpe ; k++) 141 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com { Operation *opeMinEc = findOpeMinEC(G); int machineIndex = opeMinEc->getMachine(); 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]); int idOpeChooser = rd.Next(CM.Count); Operation *opeChooser = CM[idOpeChooser]; 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++) 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) 142 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com { 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com  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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com } 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com { 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com { 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com { 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com 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 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com { Gene *max = NULL; float GiaTri = 0; for (int i=0; iFitness) { max = ptu[i]; GiaTri = max->Fitness; } TheBestGene = max->Clone(); } 155 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... ĐẠ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ũ... THUẬT TOÁN DI TRUYỀN LAI 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. .. đƣợc toán P thuộc lớp NPC cho P  Q Các toán lập lịch toán tối ƣu Ngƣời ta chứng minh đƣợc đa số toán lập lịch 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 JSP tiếng

Ngày đăng: 05/12/2022, 09:12

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w