Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 61 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
61
Dung lượng
3,29 MB
Nội dung
ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐINH NGỌC BẢO NGHIÊN CỨU SỬ DỤNG GIẢI THUẬT DI TRUYỀN XÁC ĐỊNH LỜI GIẢI BÀI TOÁN ĐIỀU ĐỘ JOB SHOP: MỘT TRƯỜNG HỢP ĐIỂN HÌNH Chuyên ngành: Kỹ thuật Công nghiệp Mã số chuyên ngành: 8520117 LUẬN VĂN THẠC SĨ TP.HỒ CHÍ MINH, tháng 01 năm 2021 i Cơng trình hồn thành tại: Trường Đại học Bách Khoa – ĐHQG-HCM Cán hướng dẫn khoa học : PGS.TS Đỗ Ngọc Hiền PGS.TS Lê Ngọc Quỳnh Lam Cán chấm nhận xét : TS Đỗ Thành Lưu Cán chấm nhận xét : TS Nguyễn Vạng Phúc Nguyên Luận văn thạc sĩ bảo vệ Trường Đại học Bách Khoa, ĐHQG Tp HCM ngày 31 tháng 01 năm 2021 Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: (Ghi rõ họ, tên, học hàm, học vị Hội đồng chấm bảo vệ luận văn thạc sĩ) TS Đường Võ Hùng - Chủ tịch hội đồng TS Dương Quốc Bửu - Thư ký hội đồng TS Nguyễn Vạng Phúc Nguyên - Ủy viên Phản biện TS Đỗ Thành Lưu - Ủy viên Phản biện PGS.TS Đỗ Ngọc Hiền - Ủy viên hội đồng Xác nhận Chủ tịch Hội đồng đánh giá LV Trưởng Khoa quản lý chuyên ngành sau luận văn sửa chữa (nếu có) CHỦ TỊCH HỘI ĐỒNG TRƯỞNG KHOA CƠ KHÍ ii ĐẠI HỌC QUỐC GIA TPHCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM TRƯỜNG ĐẠI HỌC BÁCH KHOA Độc lập - Tự - Hạnh phúc - - NHIỆM VỤ LUẬN VĂN TỐT NGHIỆP Họ tên học viên: ĐINH NGỌC BẢO MSHV: 1970236 Ngày, tháng, năm sinh: 17/11/1991 Nơi sinh: TP.HCM Chuyên ngành: KỸ THUẬT HỆ THỐNG CÔNG NGHIỆP Mã số: 8520117 I TÊN ĐỀ TÀI: NGHIÊN CỨU SỬ DỤNG GIẢI THUẬT DI TRUYỀN XÁC ĐỊNH LỜI GIẢI BÀI TOÁN ĐIỀU ĐỘ JOB SHOP: MỘT TRƯỜNG HỢP ĐIỂN HÌNH II NHIM V V NI DUNG: ă Tỡm hiu tỡnh hỡnh hoạt động sản xuất thực trạng trình hoạch định sản xuất Nhà máy gia công cụng ty C Khớ i Nam Phỏt ă Xỏc nh mơ hình điều độ cơng ty thu thập s liu ă Xõy dng hm mc tiờu bi toỏn iu job shop ă Lp trỡnh t ỏp dụng bước giải thuật di truyền cho toán iu job shop ă Tỡm hiu ngụn ng lp trình Python, dùng phần mềm Pycharm lập trình giải thuật di truyền để giải hàm mục tiêu cho toán iu trờn ă Phõn tớch, ỏnh giỏ kt qu v kim tra ă Kt lun v kin ngh III NGÀY GIAO NHIỆM VỤ: 21/09/2020 IV NGÀY HOÀN THÀNH NHIỆM VỤ : 15/1/2021 V CÁN BỘ HƯỚNG DẪN: PGS.TS Đỗ Ngọc Hiền PGS.TS Lê Ngọc Quỳnh Lam Tp.HCM, Ngày tháng 02 năm 2021 CÁN BỘ HƯỚNG DẪN CHỦ NHIỆM BỘ MƠN ĐÀO TẠO TRƯỞNG KHOA CƠ KHÍ iii LỜI CẢM ƠN Trong suốt trình thực luận văn tốt nghiệp, hỗ trợ hướng dẫn tích cực từ q Thầy / Cơ Bộ mơn Kỹ Thuật Hệ Cơng Nghiệp – Khoa Cơ Khí, trường Đại Học Bách Khoa Tp.HCM Ban Giám Đốc Công Ty Cơ Khí Đại Nam Phát Tơi xin chân thành cảm n: ă Ban giỏm c v nhng ngi chu trỏch nhiệm liên quan đến phận sản xuất, quản lý sản xuất, phận kỹ thuật nhà máy tạo điều kiện tốt cho tơi tìm hiểu tình hình hoạt động sản xuất cung cấp số liu, thụng tin quý giỏ ti xng gia cụng ă Xin chân thành cảm ơn quý Thầy / Cô Bộ môn Kỹ Thuật Hệ Thống Công Nghiệp – Khoa Cơ Khí – trường Đại Học Bách Khoa Tp.HCM hướng dẫn truyền đạt cho kiến thức, kinh nghiệm quý báu suốt thời gian học tập thực luận văn tốt nghiệp Đặc biệt, chân thành cảm ơn thầy Đỗ Ngọc Hiền cô Lê Ngọc Quỳnh Lam, người trực tiếp hướng dẫn tơi suốt q trình thực luận văn tốt nghip ă V sau cựng, tụi xin cm n gia đình bạn bè động viên giúp đỡ thời gian học tập vừa qua Tp.HCM, tháng 12 năm 2020 Học viên thực Đinh Ngọc Bảo iv TÓM TẮT LUẬN VĂN THẠC SĨ Đặt vấn đề: Công ty TNHH Đại Nam Phát chuyên gia công sản xuất linh kiện lĩnh vực khí ngồi nước Hiện nay, loại đơn hàng nước ngồi nước cơng ty ngày gia tăng nên công tác lập kế hoạch điều độ sản xuất cho công ty trọng nhằm đáp ứng nhu cầu khách hàng đồng thời lường trước tình xảy thay đổi đơn hàng Mục tiêu nghiên cứu: Đưa phương pháp áp dụng giải thuật di truyền cho việc lập kế hoạch điều độ sản xuất công ty, giải thuật viết ngôn ngữ Python phần mềm Pycharm với mục tiêu cực tiểu thời gian hoàn thành cực đại nhóm đơn hàng (Cmax) Nội dung: Dựa vào lý thuyết trình tự thực giải thuật di truyền, thực bước áp dụng giải thuật di truyền cho tốn điều độ mơ hình job shop mục tiêu kết Nội dung luận văn gồm năm chương: Chương 1: Giới thiệu Chương 2: Cơ sở lý thuyết Chương 3: Phân tích trạng Chương 4: Mơ hình hố giải thuật di truyền Chương 5: Kết luận Kết kết luận: Sau giải kết quả, vào kết hỗ trợ cho người quản lý sản xuất định điều độ thứ tự đơn hàng Để chứng minh cho toán hợp lý, mơ hình điều độ nhỏ giải kiểm tra thủ công v ABTRACT Problem: Dai Nam Phat Co., Ltd is an expert in processing and manufacturing mechanical components in the domestic and foreign fields Currently, the types of orders at home and abroad of the company are increasing, so the planning of production for the company is focused to meet the needs of customers and anticipate the circumstances may occur with respect to a change of orders Research objective: Propose a method of applying genetic algorithm for production scheduling in the company, this algorithm is written in Python on Pycharm software with the goal of minimizing the completion time to the maximum of an order group (Cmax) Content: Based on the theory of sequencing of genetic algorithms, step by step applying the genetic algorithm to the moderation problem in the job shop model to target results The thesis content consists of five chapters: Chapter 1: Introduction Chapter 2: Theoretical basis Chapter 3: Situation Analysis Chapter 4: Modeling genetic algorithms Chapter 5: Conclusion Results and conclusions: After solving the results, based on the results, the production manager will assist the production manager to make a decision to regulate the order of orders To prove that the problem is reasonable, a small modulation model is solved and checked manually vi LỜI CAM ĐOAN Tôi xin cam đoan số liệu kết nghiên cứu luận văn trung thực chưa sử dụng để báo vệ học vị Mọi giúp đỡ cho việc thực luận văn cảm ơn thơng tin trích dẫn luận văn rõ nguồn gốc rõ ràng phép cơng bố Tp.Hồ Chí Minh, ngày 15 tháng năm 2021 Học viên thực vii Đinh Ngọc Bảo MỤC LỤC LỜI CẢM ƠN IV TÓM TẮT LUẬN VĂN THẠC SĨ V LỜI CAM ĐOAN VII DANH SÁCH HÌNH VẼ X DANH SÁCH BẢNG BIỂU XI DANH SÁCH CÁC TỪ VIẾT TẮT / THUẬT NGỮ XII CHƯƠNG 1: GIỚI THIỆU 1.1 ĐẶT VẤN ĐỀ 1.2 MỤC TIÊU LUẬN VĂN 1.2.1 Mục tiêu nghiên cứu 1.2.2 Mục tiêu luận văn 1.3 PHẠM VI 1.3.1 Phạm vi quy trình sản phẩm 1.3.2 Phạm vi công cụ 1.3.3 Phạm vi công việc 1.4 NỘI DUNG 1.4.1 Tìm hiểu đối tượng 1.4.2 Tìm hiểu nghiên cứu liên quan 1.4.3 Lập mơ hình, thu thập xử lý số liệu 1.4.4 Sử dụng phần mềm hỗ trợ 1.4.5 Ứng dụng, phân tích, đánh giá phần mềm hỗ trợ 1.4.6 Nghiên cứu mở rộng 1.4.7 Kết luận kiến nghị 1.5 CẤU TRÚC LUẬN VĂN CHƯƠNG 2: CƠ SỞ LÝ THUYẾT VÀ PHƯƠNG PHÁP LUẬN 2.1 CƠ SỞ LÝ THUYẾT 2.1.1 Lý thuyết điều độ viii 2.1.2 Lý thuyết giải thuật di truyền 2.2 NGHIÊN CỨU LIÊN QUAN LĨNH VỰC ĐIỀU ĐỘ TRONG LUẬN VĂN 2.3 PHƯƠNG PHÁP LUẬN CHƯƠNG 3: PHÂN TÍCH HIỆN TRẠNG 12 3.1 THÔNG TIN CƠ BẢN 12 3.2 PHÂN TÍCH HIỆN TRẠNG 16 3.2.1 Đặc điểm khách hàng đơn hàng 16 3.2.2 Tiếp cận vấn đề 17 CHƯƠNG 4: MƠ HÌNH HỐ BÀI TỐN 22 4.1 TỔNG HỢP CÁC THAM SỐ CẦN THIẾT 22 4.2 CÁC BƯỚC MƠ HÌNH HỐ BÀI TỐN ĐIỀU ĐỘ VÀO GIẢI THUẬT DI TRUYỀN (CHI TIẾT ĐẦY ĐỦ ĐOẠN CODE TRONG PHẦN PHỤ LỤC) 29 4.2.1 Chuẩn hoá định dạng liêu 29 4.2.2 Khởi tạo quần thể (initial population) 30 4.2.3 Lai ghép Đột biến (Crossover and mutation) 31 4.2.5 Xác định giá trị hàm Fitness 33 4.2.6 Chọn lọc so sánh 33 4.3 KIỂM TRA MƠ HÌNH 35 CHƯƠNG 5: KẾT LUẬN VÀ KIẾN NGHỊ 37 5.1 KẾT QUẢ 37 5.2 ĐÁNH GIÁ 37 5.3 KIẾN NGHỊ 37 TÀI LIỆU THAM KHẢO 39 PHỤ LỤC A: LỜI GIẢI BAN ĐẦU 40 PHỤ LỤC B: ĐOẠN CODE TRONG PYCHARM 41 PHỤ LỤC C: KẾT QUẢ THỨ TỰ CÔNG VIỆC ĐƯỢC ĐIỀU ĐỘ 45 PHỤ LỤC D: BẢNG ĐIỀU ĐỘ 46 ix DANH SÁCH HÌNH VẼ Hình 2.1: Mơ hình job shop Hình 2.2: Sơ đồ giải thuật di truyền Hình 3.1 Sơ đồ tổ chức công ty 13 Hình 3.2 Quy trình điều độ cơng ty 14 Hình 4.1 Quy trình chạy mơ hình tốn 29 Hình 4.2 Bảng minh hoạ thông số nhập vào Excel mô hình tốn 30 Hình 4.3: Cách thức tạo lời giải ban đầu 31 Hình 4.4: Cách thực chọn parent parent2 32 Hình 4.5: Cách thức chọn điểm crossover point 32 Hình 4.6: Chọn hai điểm để đột biến 33 Hình 4.7: Giao diện kết sau chạy lời giải 34 Hình 4.8: Biểu đồ makespan số lần khởi tạo 34 Hình 4.9 Biểu đồ gant (Biểu đồ đầy đủ phần phụ lục) 35 Hình 4.10 Giao diện kết sau kiểm tra mơ hình 36 Hình 4.11 Biểu đồ Gantt 36 x Dựa vào hình 4.8, ta thấy số lần khởi tạo lớn kết lời giải cải thiện Vì Python tính thêm số vào bảng kết phải cộng đơn hàng thêm số đơn hàng điều độ (ví dụ có nghĩa đơn hàng thứ 1, có nghĩa đơn hàng thứ 4) - Thứ tự điều độ đơn hàng :{22, 15, 1, , 8} (chi tiết phần phụ lục) - Cmax = 54 ngày Dựa vào kết đó, ta có sơ đồ điều độ sau: (bản đầy đủ phần phụ lục) Hình 4.9 Biểu đồ gant (Biểu đồ đầy đủ phần phụ lục) Với tổng đơn hàng có thời gian gia cơng lớn (makespane) 53 ngày 4.3 Kiểm tra mơ hình Để biết chắn mơ hình chạy đúng, ta giải toán nhỏ phần mềm kiểm tra lại tay để kiểm tra độ xác chương trình Mơ hình nhỏ gồm máy, cơng việc có tối đa cơng đoạn Cơng đoạn Công đoạn Công đoạn Công việc Máy Máy Máy Công việc Máy Máy Máy Công việc Máy Máy Máy Bảng 4.7: Công việc tương ứng với công đoạn máy Công việc Công việc Công việc Bảng 4.8: đoạn Công đoạn Công đoạn Công đoạn 4 Thời gian gia công công việc tương ứng vơi công Sau chạy, ta kết sau 35 Hình 4.10 Giao diện kết sau kiểm tra mơ hình Do đặt tính python tính số số, kết phải cộng thêm số công việc Vậy thứ tự công việc sau: {2, 3, 3, 3, 2, 1, 1, 2, 1} Kiểm tra thủ công tay, kết cho thứ tự đơn hàng điều độ tương ứng với Makespan 12 xác hình vẽ Thời gian M1 M2 M3 J3_1 J1_1 J3_2 J1_2 J2_1 J3_3 Hình 4.11 Biểu đồ Gantt 36 10 11 12 CHƯƠNG 5: KẾT LUẬN VÀ KIẾN NGHỊ 5.1 Kết Dựa vào nghiên cứu giải thuật di truyền điều độ job shop, nhờ giải thuật ta giải thời gian hoàn thành (Cmax) 23 đơn hàng 15 máy thứ tự để điều độ đơn hàng 5.2 Đánh giá Trước thực hiện: Việc điều độ đơn hàng bị bị động thời gian, khơng định lượng trước thời gian hồn thành đơn hàng Người điều độ ước lượng thời gian hồn thành cách tính lùi thời gian giao hàng để suy thời gian hoàn thành đơn hàng Điều phụ thuộc vào phần lớn kinh nghiệm họ Sau thực hiện: Chỉ dựa thông số từ phận kỹ thuật số công đoạn, thời gian gia công, số máy gia công Ta ước lượng khoảng thời gian hoàn thành tổng đơn hàng Nhờ vào đó, ta chủ động thương lượng thời gian giao hàng với khách hàng đồng thời đối ứng cạnh tranh nguồn lực đơn hàng khác Luận văn thực được: - Xây dựng tốn điều độ mơi trường job shop - Phát triển chương trình giải thuật di truyền cho điều độ - Ứng dụng vào công ty Đại Nam Phát để tính thời gian hồn thành thứ tự sản xuất đơn hàng Luận văn cịn hạn chế: - Chỉ có hàm mục tiêu thời gian hồn thành - Chỉ gói gọn 23 đơn hàng gần 1000 đơn hàng công ty sản xuất gia công - Vẫn cịn hạn chế khả lập trình để mở rộng thêm tốn - Vẫn cịn giả định nguyên vật liệu sẵn có đơn hàng không bị cố chừng 5.3 Kiến nghị 37 - Cải thiện mơ hình tốn để loại bỏ bớt giả định nguyên vật liệu sẵn có để sát với thực tế - Thêm vào mục tiêu chi phí sản xuất, tồn kho, đơn hàng trễ để có thêm trường hợp cho người định lựa chọn - Mở rộng việc điều độ cho đơn hàng khác công ty giải thuật di truyền 38 TÀI LIỆU THAM KHẢO [1] Hồ Thanh Phong Kỹ thuật điều độ sản xuất dịch vụ Nhà xuất Đại học Quốc gia Thành phố Hồ Chí Minh, 2006 [2] Mattfeld DC Evolutionary search and the job shop: Investigations on genetic algorithm for production scheduling Heidelberg: Springe, 1995 [3] Baker KR Introduction to sequencing and scheduling New York: Wiley, 2013 [4] Franch S Sequencing and scheduling: an introduction to the mathematics of the job-shop New York: Wiley, 1996 [5] Nakano R., Yamada T, “Conventional genetic algorithms for job-shop problems” In: Belew RK, Booker LB (eds) Proceedings of the Fourth International Conference on Genetic Algorithms, 1991 [6] Yamada T., Nakano R., "A genetic algorithm applicable to large-scale job shop problems", Parralle Problem Solving from Nature, pp 281-290, 1992 [7] Fang H., Ross P., Corne D "A promising genetic algorithm approach to job shop scheduling, rescheduling and open shop scheduling", Proceedings of the Fifth International Conference on Genetic Algorithms, S Forrest (ed.), San Mateo: Morgan Kaufmann, 1993, pages 375;382 [8] Morgan K."Genetic Algorithm" Proceedings of the fifth international conference on genetic algorithms, San Mateo, 1993 [9] Yong M W., Hong L Y & Jiang W ''Genetic algorithm with new encoding scheme for job shop scheduling," The International Journal of Advanced Manufacturing Technology, 44(9-10), 977–984 [10] Gen M., Tsujimura J., Kubota E., "Solving job-shop scheduling problem using genetic algorithms" International Journal of Intelligent Information Processing, (2) pp 65-77 ISSN 2093-1964 [11] Pratibha B., Manoj K ''Genetic Algorithm – an Approach to Solve Global Optimization Problems'', Indian Journal of computer science and engineering, Vol 1, No 3, 199-206 39 Phụ lục A: Lời giải ban đầu Lời giải ban đầu: [ 12 22 12 3 15 15 17 19 18 21 22 3 23 21 9 18 23 12 13 13 21 12 15 16 18 23 12 23 19 20 20 18 2 19 10 19 19 17 5 20 15 11 13 15 11 21 14 14 18 16 10 14 19 14 16 16 12 13 16 12 15 11 18 17 17 19 23 14 9 13 10 11 2 21 23 21 14 12 16 14 19 13 10 22 20 15 21 13 4 18 23 19 23 19 20 20 19 20 14 10 22 16 20 10 13 22 22 11 11 14 16 11 13 20 12 19 18 17 11 13 23 21 19 13 20 14 13 11 23 14 17 14 16 15 11 20 12 18 10 10 11 23 21 18 13 11 10 11 13 19 22 18 16 12 22 12 10 14 10 22 10 14 16 20 16 22 17 15 17 15 17 16 11 20 18 19 18 21 22 15 17 9 22 15 15 14 17 6 21 10 21 20 22 22 15 23 12 23 17 20 21 12 17 18 22 12 23 10 21 17 15 21 13 10 17 23 16 18 16 11.] 40 Phụ lục B: Đoạn code pycharm '''==========Luan van dieu job shop=======''' # importing required modules import pandas as pd import numpy as np import time import copy ''' ================= Thiet lap dau tien ======================''' #data = pd.read_excel(r'/Users/dinhbaongoc/Downloads/Genetic-Algorithm-forJob-Shop-Scheduling-and-NSGA-II-master/implementation with python/GAjobshop/JSP_dataset.xlsx') pt_tmp = pd.read_excel(r'/Users/dinhbaongoc/Downloads/Genetic-Algorithmfor-Job-Shop-Scheduling-and-NSGA-II-master-2/implementation with python/NSGA-II/JSP_dataset.xlsx', sheet_name="Processing Time", index_col=[0]) ms_tmp = pd.read_excel(r'/Users/dinhbaongoc/Downloads/Genetic-Algorithmfor-Job-Shop-Scheduling-and-NSGA-II-master-2/implementation with python/NSGA-II/JSP_dataset.xlsx', sheet_name="Machines Sequence", index_col=[0]) dfshape = pt_tmp.shape num_mc = dfshape[1] # So may num_job = dfshape[0] # SO cong viec num_gene = num_mc * num_job # So gen te bao pt = [list(map(int, pt_tmp.iloc[i])) for i in range(num_job)] ms = [list(map(int, ms_tmp.iloc[i])) for i in range(num_job)] # raw_input is used in python population_size = int(input('Nhap kich thuoc cua population: ') or 30) crossover_rate = float(input('NHap ti le cua Crossover : ') or 0.8) mutation_rate = float(input('Nhap ti le cua Mutation : ') or 0.2) mutation_selection_rate = float(input('Nhao ti le cua chon Dot bien: ') or 0.2) num_mutation_jobs = round(num_gene * mutation_selection_rate) num_iteration = int(input('Nhap so lan lap lai: ') or 2000) start_time = time.time() '''==================== main code ===============================''' ''' - tao phan bo dau tien -''' Tbest = 999999999999999 41 best_list, best_obj = [], [] population_list = [] makespan_record = [] for i in range(population_size): nxm_random_num = list(np.random.permutation(num_gene)) # tao hoan vi ngau nhien tu den num_job*num_mc-1 population_list.append(nxm_random_num) # Them vao danh sach population for j in range(num_gene): population_list[i][j] = population_list[i][j] % num_job # chuyen lai cong viec va so lan xuat hien for n in range(num_iteration): Tbest_now = 99999999999 ''' Hai diem giao hoan ''' parent_list = copy.deepcopy(population_list) offspring_list = copy.deepcopy(population_list) S = list(np.random.permutation( population_size)) # tao mot ket qua ngau nhien de chon giao hoan for m in range(int(population_size / 2)): crossover_prob = np.random.rand() if crossover_rate >= crossover_prob: parent_1 = population_list[S[2 * m]][:] parent_2 = population_list[S[2 * m + 1]][:] child_1 = parent_1[:] child_2 = parent_2[:] cutpoint = list(np.random.choice(num_gene, 2, replace=False)) #chon ngau nhien nhung khong co lap lai cutpoint.sort() child_1[cutpoint[0]:cutpoint[1]] = parent_2[cutpoint[0]:cutpoint[1]] child_2[cutpoint[0]:cutpoint[1]] = parent_1[cutpoint[0]:cutpoint[1]] offspring_list[S[2 * m]] = child_1[:] offspring_list[S[2 * m + 1]] = child_2[:] ''' repairment -''' for m in range(population_size): job_count = {} larger, less = [], [] # 'larger' record jobs appear in the chromosome more than m times, and 'less' records less than m times for i in range(num_job): if i in offspring_list[m]: count = offspring_list[m].count(i) #so lan xuat hien 42 pos = offspring_list[m].index(i) #vi tri job_count[i] = [count, pos] # cv gom co so lan xuat hien va vi tri else: count = job_count[i] = [count, 0] if count > num_mc: #neu so dem lon hon so may larger.append(i) #nhap don hang vao tap large elif count < num_mc: less.append(i)#nhap don hang vao tap less for k in range(len(larger)): #Chuyen lai so cv bang voi so may chg_job = larger[k] while job_count[chg_job][0] > num_mc: for d in range(len(less)): if job_count[less[d]][0] < num_mc: offspring_list[m][job_count[chg_job][1]] = less[d] job_count[chg_job][1] = offspring_list[m].index(chg_job) job_count[chg_job][0] = job_count[chg_job][0] - job_count[less[d]][0] = job_count[less[d]][0] + if job_count[chg_job][0] == num_mc: break ''' dot bien ''' for m in range(len(offspring_list)): mutation_prob = np.random.rand() if mutation_rate >= mutation_prob: m_chg = list( np.random.choice(num_gene, num_mutation_jobs, replace=False)) # chon vi tri ngau nhien de dot bien t_value_last = offspring_list[m][m_chg[0]] # Luu tru gia tri vi tri dau tien dot bien for i in range(num_mutation_jobs - 1): offspring_list[m][m_chg[i]] = offspring_list[m][m_chg[i + 1]] # thay the offspring_list[m][m_chg[ num_mutation_jobs - 1]] = t_value_last #di chuyen gia tri dau tien cua dot bien den vi tri cuoi cung ''' gia tri fitness (tinh makespan) -''' total_chromosome = copy.deepcopy(parent_list) + copy.deepcopy( offspring_list) # parent and offspring chromosomes combination chrom_fitness, chrom_fit = [], [] total_fitness = for m in range(population_size * 2): 43 j_keys = [j for j in range(num_job)] key_count = {key: for key in j_keys} j_count = {key: for key in j_keys} m_keys = [j + for j in range(num_mc)] m_count = {key: for key in m_keys} for i in total_chromosome[m]: gen_t = int(pt[i][key_count[i]]) gen_m = int(ms[i][key_count[i]]) j_count[i] = j_count[i] + gen_t m_count[gen_m] = m_count[gen_m] + gen_t if m_count[gen_m] < j_count[i]: m_count[gen_m] = j_count[i] elif m_count[gen_m] > j_count[i]: j_count[i] = m_count[gen_m] key_count[i] = key_count[i] + makespan = max(j_count.values()) chrom_fitness.append(1 / makespan) chrom_fit.append(makespan) total_fitness = total_fitness + chrom_fitness[m] ''' selection(roulette wheel approach) ''' pk, qk = [], [] #nhu cong thuc for i in range(population_size * 2): pk.append(chrom_fitness[i] / total_fitness) for i in range(population_size * 2): cumulative = for j in range(0, i + 1): cumulative = cumulative + pk[j] qk.append(cumulative) selection_rand = [np.random.rand() for i in range(population_size)] # tao vung ngau nhien tuong ung voi kich thuoc pop for i in range(population_size): if selection_rand[i] qk[j] and selection_rand[i]