Trong luận văn này tôi đặt trọng tâm tìm hiểu giải thuật di truyền và áp dụng vào lập lịch thực hiện các công việc trong dự án phần mềm với sự giới hạn về tài nguyên thực hiện các công v
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN HỮU HUY
GIẢI THUẬT DI TRUYỀN VÀ ỨNG DỤNG TRONG
QUẢN LÝ DỰ ÁN PHẦN MỀM
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Hà Nội-2014
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN HỮU HUY
GIẢI THUẬT DI TRUYỀN VÀ ỨNG DỤNG TRONG
QUẢN LÝ DỰ ÁN PHẦN MỀM
Ngành: CÔNG NGHỆ THÔNG TIN
Chuyên ngành: KỸ THUẬT PHẦN MỀM
Mã số:60480103
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS BÙI THU LÂM
Hà Nội-2014
Trang 3LỜI CAM ĐOAN
Tôi xin cam đoan, toàn bộ nội dung liên quan tới đề tài được trình bày trong luận văn
là bản thân tôi tự tìm hiểu và nghiên cứu, dưới sự hướng dẫn của PGS, TS.Bùi Thu Lâm
Các tài liệu, số liệu tham khảo được trích dẫn đầy đủ nguồn gốc Tôi xin chịu trách nhiệm trước pháp luật lời cam đoan của mình
Học viên thực hiện
Nguyễn Hữu Huy
Trang 4LỜI CẢM ƠN
Tôi xin chân thành cám ơn tới Khoa Công nghệ thông tinTrường Đại học Công nghệ Đại học Quốc gia Hà Nội, các thầy, cô đã giúp đỡ và tận tình truyền đạt các kiến thức cho tôi trong suốt quá trình học tập và nghiên cứu Tôi xin cảm ơn ban chủ nhiệm khoa
-và các cán bộ đã tạo điều kiện tốt nhất cho chúng tôi trong quá trình học tập -và hoàn thành luận văn của mình
Đặc biệt, tôi xin gửi tới PGS, TS Bùi Thu Lâm, thầy đã tận tình chỉ bảo tôi trong suốt quá trình làm luận văn lời cám ơn và biết ơn sâu sắc nhất Bên cạnh những kiến thức tôi còn học hỏi được ở thầy tinh thần làm việc khoa học và nghiêm túc
Tôi xin cảm ơn tới học viên Phạm Minh Hải vàNguyễn Thanh Hưng đã đóng góp những ý kiến và động viên tôi trong quá trình học tập và làm luận văn
Tôi xin bày tỏ lòng biết ơn tới gia đình, bạn bè, và các đồng nghiệp ngân hàng Dầu khí toàn cầu GP.Bank, các chị em trong nhóm Ngân hàng điện tử và nhất là trưởng phòng Ngân hàng điện tử Trần Trung Kiên đã động viên khích lệ tinh thần và giúp đỡ tôi hoàn thành luận văn này
Trang 5MỤC LỤC
Trang phụ bìa Trang 2
Lời cam đoan 3
Lời cảm ơn 4
Mục lục 5
Danh mục các ký hiệu và chữ viết tắt 7
Danh mục các hình vẽ, đồ thị 9
Danh mục các bảng 11
MỞ ĐẦU 12
Chương 1.Tổng quan về quản lý dự án phần mềm 14
1.1 Định nghĩa dự án, quản lý dự án phần mềm 14
1.1.1 Dự án là gì 14
1.1.2 Thế nào là quản trị dự án 17
1.2 Vấn đề lập kế hoạch, lập lịch trong quản trị dự án phần mềm 21
1.2.1 Khái niệm về lập kế hoạch 21
1.2.2 Tự động hóa việc lập lịch 21
Chương 2.Giải thuật di truyền và các ứng dụng 24
2.1 Tổng quan về giải thuật di truyền 24
2.2 Lịch sử phát triển 25
2.3 Các bước áp dụng giải thuật di truyền 26
2.3.1 Mã hóa dữ liệu 26
2.3.2 Khởi tạo quần thể 27
2.3.3 Xác định hàm thích nghi 27
2.3.4 Quá trình lai ghép 28
2.3.5 Quá trình đột biến 29
2.3.6 Quá trình chọn lọc 30
2.4 Các tham số của giải thuật di truyền 31
2.5 Thuật toán giải thuật di truyền 32
Chương 3.Ứng dụng giải thuật di truyền để giải quyết bài toán lập lịch trong quản lý dự án phần mềm 34
3.1 Phát biểu bài toán 34
3.2 Thuật toán 38
3.2.1 Thuật toán khởi tạo cá thể 38
3.2.2 Thuật toán đột biến cá thể 40
3.2.3 Thuật toán lai tạo giữa hai cá thể 41
3.2.4 Thuật toán xác định chuỗi thực hiện công việc có phù hợp với sơ đồ phân rã công việc hay không 45
3.2.5 Thuật toán gán tài nguyên thực hiện công việc theo thứ tự 46
Trang 63.2.6 Xây dựng hàm fitness 48
Chương 4.Xây dựng ứng dụng 49
4.1 Mô hình ứng dụng 49
4.2 Tìm hiểu về nền tảng AForge.NET và ứng dụng vào chương trình demo 54
4.3 Viết Add-in cho Microsoft Project 58
4.3.1 Tạo button trong menu Add-ins 59
4.3.2 Các bước cơ bản tạo Add-in trên Visual studio 2010 59
4.3.3 Viết code chức năng ExportData 61
4.3.4 Chức năng import dữ liệu task từ database 61
4.3.5 Chức năng xem biểu đồ gantt chart 62
4.4 Dữ liệu demo 62
4.4.1 Bảng công việc 62
4.4.2 Bảng loại tài nguyên 66
4.4.3 Bảng tài nguyên 66
4.5 Chương trình demo 67
4.5.1 Tạo mới database lưu trữ dữ liệu 67
4.5.2 Mở database có sẵn 68
4.5.3 Quản lý dự án 69
4.5.4 Quản lý loại tài nguyên dự án 70
4.5.5 Quản lý tài nguyên dự án 71
4.5.6 Quản lý công việc 71
4.5.7 Thực hiện việc estimate các công việc dự án 74
4.5.8 Chức năng lập lịch dự án bằng giải thuật di truyền: 75
4.5.9 Các chức năng bổ trợ khác 77
4.6 Kết quả chạy chương trình 82
KẾT LUẬN 90
TÀI LIỆU THAM KHẢO 91
PHỤ LỤC 92
Trang 74 WBS Work breakdown structure
5 AForge.NET Nền tảng thư viện phục vụ cho lĩnh vực thị
giác máy tính và trí tuệ nhân tạo
Trang 8Ý NGHĨA CÁC KÝ HIỆU
1 Pred j Tập hợp các công việc trực tiếp phía
trước của công việc j Công việc j là một công việc trong tập các công việc được định nghĩa trong bảng phân rã công việc
2 C pr Bảng phân rã công việc Ở bảng này đã
chỉ định rõ công việc nào là công việc trực tiếp phía trước, công việc nào là công việc sau
3 TaskLine Đường biểu diễn chuỗi công việc Đây
là tập hợp các công việc đã chỉ định rõ thứ tự thực hiện Giả sử công việc e có công việc trực tiếp phía trước là d, trước công việc d có công việc trực tiếp phía trước c Công việc e lại có công việc trực tiếp phía sau là f, công việc f lại có công việc trực tiếp phía sau là g Thì ta
có đường biểu diễn công việc e là tập hợp các công việc theo thứ tự như sau:
c, d, e, f, g
4 DoingTask Danh sách các task đang làm việc
5 NeedToDo Danh sách các task cần phải làm, các
công việc này được đươc vào hàng đọi, đang đợi đủ tài nguyên để thực hiện
6 WorkingResource Các tài nguyên đang làm việc, các tài
nguyên này đang bận thực hiện một task nào đấy
Trang 9DANH MỤC HÌNH VẼ
Hình 1.1 Vòng đời chuẩn của quản lý dự án 18
Hình 2.1 Ví dụ về mã hóa nhiễm sắc thể 26
Hình 2.2 Ví dụ về mã hóa nhị phân 26
Hình 2.3 Ví dụ về mã hóa hoán vị 27
Hình 2.4 Ví dụ về mã hóa giá trị 27
Hình 2.5 Ví dụ về mã hóa cây 27
Hình 2.6 Lai ghép giữa hai cá thể 28
Hình 2.7 Lai ghép giữa hai cá thể 28
Hình 2.8 Đột biến một nhiễm sắc thể 29
Hình 2.9 Đột biến một nhiễm sắc thể tại một điểm và hai điểm 30
Hình 2.10 Sơ đồ quá trình tính toán của thuật toán di truyền 32
Hình 3.1 Ví dụ bảng phân rã gồm 8 công việc được đánh chỉ số từ 0 tới 7 36
Hình 3.2 Biểu diễn thứ tự công việc bằng mảng một chiều nguyên không âm 37
Hình 4.1 Mô hình các thành phần trong chương trình demo luận văn 49
Hình 4.2 Mô hình quan hệ cơ sở dữ liệu 51
Hình 4.3 Mô hình thực thể liên kết 52
Hình 4.4 Màn hình các chức năng Add-in 59
Hình 4.5 Tạo project từ trình đơn Visual studio 59
Hình 4.6 Chọn loại dự án là Project 2010 Add-in 60
Hình 4.7 Solution explorer của dự án 60
Hình 4.8 class ThisAddIn 61
Hình 4.9 Đồ thị thứ tự công việc được vẽ lại bằng phần mềm demo luận văn 66
Hình 4.10 Truy cập tính năng tạo mới database từ menu 67
Hình 4.11 Chọn tên database và lưu lại 68
Hình 4.12 Chọn mở database từ menu 68
Hình 4.13 Mở danh sách dự án từ menu 69
Hình 4.14 Danh sách dự án 69
Hình 4.15 Màn hình edit dự án 70
Hình 4.16 Màn hình tạo mới dự án 70
Hình 4.17 Vào chức năng quản trị Resource type từ menu 70
Hình 4.18 Vào chức năng quản trị Resource từ menu 71
Hình 4.19 Màn hình quản trị tài nguyên 71
Hình 4.20 Truy xuất màn hình đồ họa quản lý task từ menu 72
Hình 4.21 Màn hình quản lý task 73
Hình 4.22 Xem danh sách tasks 73
Hình 4.23 Danh sách tasks trong dự án 74
Hình 4.24 Màn hình estimate task 75
Hình 4.25 Combobox công việc 75
Trang 10Hình 4.26 Màn hình tùy chọn các tham số giải thuật di truyền 76
Hình 4.27 Đồ thị hàm fitness qua các thế hệ 76
Hình 4.28 Xem giá cá thể tốt nhất của thế hệ 77
Hình 4.29 Xem chi tiết cách chỉ định tài nguyên thực hiện công việc 77
Hình 4.30 Thực hiện chức năng lưu dữ liệu từ menu 78
Hình 4.31 Thực hiện chức năng nạp dữ liệu từ menu 78
Hình 4.32 Chỉ định vị trí file dữ liệu cần lưu 79
Hình 4.33 Các chức năng dùng lập kế hoạch bằng giải thuật di truyền 79
Hình 4.34 Lựa chọn Line mode trên màn hình đồ họa công việc 80
Hình 4.35 Show tooltip – hiển thị thông tin chi tiết về một task 80
Hình 4.36 Màn hình đồ họa công việc được vẽ thêm lưới mờ 81
Hình 4.37 Hiển thị điểm bắt đầu đồ thị công việc 81
Hình 4.38 Hiển thị điểm kết thúc công việc 82
Hình 4.39 Hiển thị tên và chỉ mục công việc trên màn hình đồ họa 82
Hình 4.40 Đồ thị finess kiểu chọn lọc Elite 83
Hình 4.41 Đồ thị finess kiểu chọn lọc Elite và giữ lại cá thể tốt nhất 83
Hình 4.42 Đồ thị finess kiểu chọn lọc Elite và local search 84
Hình 4.43 Đồ thị finess kiểu chọn lọc Elite và thực hiện đồng thời lưu lại phần tử tốt nhất của thế hệ trước và thực hiện local seach 85
Hình 4.44 Biểu đồ gantt chart 88
Hình 4.45 Biểu đồ sử dụng tài nguyên trong công việc 89
Trang 11DANH MỤC BẢNG BIỂU
Bảng 1.1 Các hoạt động của quản lý dự án 19
Bảng 1.2 Các kế hoạch của dự án 22
Bảng 4.1 Bảng phân rã công việc dự án và kế hoạch tài nguyên 62
Bảng 4.2 Bảng loại tài nguyên 66
Bảng 4.3 Bảng tài nguyên phân loại theo loại tài nguyên 66
Bảng 4.4 Bảng kết quả chạy thuật toán 85
Bảng 4.5 Bảng lập lịch thực hiện công việc 85
Trang 12MỞ ĐẦU
Hiện nay quản trị dự án ngày càng được ứng dụng rộng rãi trong các ngành nghề xã hội, trong đó có hoạt động quản lý dự án phần mềm Cùng với sự phức tạp và đa dạng của phần mềm, hoạt động quản lý dự án phần mềm ngày càng tinh vi và phức tạp hơn Trong đó nổi bật lên là vấn đề lập kế hoạch và phân bổ nguồn lực trong dự án Với những dự án ít đầu việc và ít người tham gia thì vấn đề lập kế hoạch và lập lịch dự án một cách thủ công sẽ không đáng ngại Nhưng với những dự án lớn, có nhiều đầu việc phức tạp, số lượng nhân công (nguồn lực, tài nguyên) tham gia vào dự án lớn và cónhiều biến động,khi đó vấn đề lập kế hoạch, lập lịch dự án sẽ gặp khó khăn Người làm kế hoạch sẽ phải tốn nhiều thời gian để tiến hành sửa đổi kế hoạch, lập lịch lại mỗi khi có sự biến động về nhân sự (hay rộng hơn là thay đổi về nguồn lực thực hiện dự án) Như vậy, vấn đề cấp thiết phải làm sao tự động được khâu này, để giảm thiểu sức người cũng như nâng cao chất lượng khâu này
Trong trí tuệ nhân tạo “Giải thuật di truyền” đã được ứng dụng rộng rãi đề giải quyết nhiều bài toán phức tạp Trong đó có các bài toán về lập lịch, lập kế hoạch.Việc áp dụng giải thuật di truyền nhằm làm tối ưu hóa vấn đề lập kế hoạch và phân bổ nguồn lực trong dự án phần mềm đã và đang được nghiên cứu cải tiến rất nhiều trên thế giới Trong luận văn này tôi đặt trọng tâm tìm hiểu giải thuật di truyền và áp dụng vào lập lịch thực hiện các công việc trong dự án phần mềm với sự giới hạn về tài nguyên thực hiện các công việc trong dự án
Các kiến thức về lập lịch trong quản lý dự án phần mềm, kiến thức về giải thuật di truyền, cách áp dụng giải thuật di truyền để tự động lập lịch dự án cũng như các kỹ năng lập trình xây dựng ứng dụng hoàn chỉnh bước đầu có thể quản lý dự án và tự động chọn lựa phương án tối ưu để lập lịch dự án được học viên trình bày chi tiết trong luận văn vàđược chia thành 4 chương sau đây:
Chương 1 TỔNG QUAN VỀ QUẢN LÝ DỰ ÁN PHẦN MỀM
Chương này giới thiệu về dự án phần mềm và quản lý dự án phần mềm Qua chương này ta thấy được phần mềm cũng như các tiến trình, công cụ quản lý phần mềm ngày càng phức tạp Do vậy cần phải tìm cách tự động hóa càng nhiều khâu trong quản lý
dự án càng tốt Trong chương này cũng chỉ ra là có thể áp dụng giải thuật di truyền vào quản lý dự án phần mềm ở bước lập lịch biểu, gán nguồn lực thực hiện dự án
Chương 2 GIẢI THUẬT DI TRUYỀN VÀ CÁC ỨNG DỤNG
Chương này sẽ cho người đọc một cái nhìn tổng quan về giải thuật di truyền và các ứng dụng của nó trong thực tế, qua đó người đọc có thêm hiểu biết về các vấn đề mã hóa giải thuật di truyền Giúp người đọc có thể vận dụng những kiến thức ở chương này để giải quyết các vấn đề của mình
Trang 13Chương 3 ỨNG DỤNG GIẢI THUẬT DI TRUYỀN ĐỂ GIẢI QUYẾT BÀI
TOÁN LẬP LỊCH TRONG QUẢN LÝ DỰ ÁN PHẦN MỀM
Chương này đưa ra các bước cụ thể cách dùng giải thuật đi truyền vào bài toán lập lịch trong quản trị dự án phần mềm và phát triển các thuật toán di truyền: mã hóa, lai tạo,
độ biến, chọn lọc để vận dụng giải quyết bài toán lập lịch với ràng buộc hạn chế về nguồn lực thực hiện dự án
Chương 4 XÂY DỰNG ỨNG DỤNG
Dựa vào các kiến thức tìm hiểu ở các chương trên, chương này giới thiệu về cách tạo ứng dụng demo, hướng dẫn sử dụng ứng dụng này trong việc lâp lịch tự động Giới thiệu tới người đọc framework giải thuật di truyền AForge.NET, cách sử dụng framework này trong việc viết chương trình demo Giới thiệu sơ lược về cách lập trình Add-ins cho phần mềm Microsoft Project và kết hợp giữa công cụ lập lịch tự động với phần mềm này
Trang 14Chương 1 TổNG QUAN Về QUảN LÝ Dự ÁN PHầN MềM
1.1 Định nghĩa dự án,quản lý dự án phần mềm
1.1.1 Dự án là gì
Có rất nhiều cách định nghĩa một dự án, chung quy lại dự án là quá trình tạo ra sản phẩm hay dịch vụ Do vậy các định nghĩa dự án như sau đều được chấp nhận:Dự án là một quá trình gồm các công việc, nhiệm vụ có liên quan với nhau, được thực hiện nhằm đạt được mục tiêu đã đề ra trong điều kiện ràng buộc về thời gian, nguồn lực và ngân sách Hoặc định nghĩa dự án là một nhiệm vụ cần hoàn thành để có được một sản phẩm, dịch vụ duy nhất trong một thời hạn đã cho với kinh phí dự kiến Hoặc dự án là một sự cố gắng nhất thời để tạo sản phẩm dịch vụ[5]
Cũng giống như các dự án thông thường, dự án phần mềmmang những đặc điểm cơ bản như sau:
- Mỗi dự ánphải có một hoặc một số mục tiêu rõ ràng do dự ánlà một quá trình tạo ra kết quả cụ thể
- Mỗi dự án đều có một thời hạn nhất định, toàn bộ thời gian của dự án được chia thành các giai đoạn: Giai đoạnkhởi đầu, giai đoạn triển khai và giai đoạn kết thúc Thời gian thực hiện dự án được chỉ định không được vượt quá một khoảng thời gian nhất định (ví dụ không quá một tháng, một năm, hai năm…) Thời gian thự hiện dự án được ước lượng thông qua các tính năng của sản phẩm (kết quả của dự án) mà khách hàng yêu cầu và được sự đồng ý của khách hàng
Để đảm bảo dự án hoàn thành theo đúng thời gian cho phép, bộ phận quản trị
dự án cần áp dụng các công cụ, phương pháp quản lý dự án phù hợp cho từng loại hình dự án nhằm đảm bảo dự án hoàn thành đúng tiến độ đã đề ra
- Mỗi dự án đều có sử dụng nguồn lực và nguồnlực này bị hạn chế Các nguồn lực đó bao gồm nhân lực, nguyên vậtliệu, ngân sách Do các nguồn lực này là hạn chế nên phải có phương pháp quản trị và sử dụng các nguồn lực này trong
Trang 15phẩm thông thường ví dụ như chiếc tivi, nếu khách muốn đổi các thông số trên chiếc tivi này, muốn có một số tính năng mới thì rất khó có thể làm được điều này
- Các pha của vòng đời dự án rõ ràng Vòng đời chuẩn của quản lý dự án gồm 4 pha : Xác định dự án, Lập kế hoạch, Thực hiện và cuối cùng là Đóng dự án
- Có thể có nhiều giải pháp cho một yêu cầu Ví dụ cùng một yêu cầu xây dựng phần mềm kế toán có thể có hai giải pháp thực hiện vấn đề này, giải pháp thứ nhất là xây dựng phần mềm sử dụng online qua internet, giải pháp thứ hai là xây dựng phần mềm offline, không nhất thiết phải làm sao để có nhiều người dùng truy xuất một lúc với giải pháp offline.Tùy vào giải pháp cụ thể mà đội phát triển dự án sẽ có những phương án nguồn lực cụ thể để hoàn thành dự án, như với giải pháp xây dựng phần mêm có thể sử dụng online qua internet thì cần phải chọn nhân lực có các kỹ năng về lập trình web, ngược lại giải pháp offline thì cần các nhân lực có kỹ năng về lập trình ứng dụng window
- Định hình sản phẩm của dự án phần mềm không cứng nhắc miễn là đáp ứng được yêu cầu Như ở ví dụ trên đã đưa ra về việc xây dựng phần mềm kế toán, đội phát triển có thể định hình sản phẩm theo hai hướng là phần mềm được sử dụng qua internet hoặc không cần kết nối qua internet miễn là phần mềm sao đáp ứng được các tính năng cần có của một phần mềm kế toán mà khách hàng yêu cầu
- Có nhiều công cụ trợ giúp và các công cụ này ngày càng tốt hơn mạnh hơn Đối với các dự án phần mềm các công cụ trợ giúp ngày càng mạnh, có thể kế đến các công cụ quản lý mã nguồn, công cụ hỗ trợ quản lý yêu cầu, công cụ quản lý lỗi, các công cụ hỗ trợ lập trình như Microsoft visual studio 2001, các công cụ quản lý cơ sở dữ liệu…Nhờ có các công cụ này mà các dự án phần mềm ngày càng được rút ngắn thời gian phát triển mà vẫn đảm bảo chất lượng phần mềm
- Sản phẩm phần mềm là vô hình, không cầm nắm được như các sản phẩm thông thường Sản phẩm phần mềm được lưu trữ trên máy tính bao gồm chương trình,
cơ sở dữ liệu và các tài liệu hướng dẫn sử dụng Khi sử dụng sản phẩm phần mềm cần phải có máy tính, người sử dụng sản phẩm phần mềm cũng cần phải
có một số kiến thức nhất định về công nghệ thông tin, cần phải biết cách sử dụng máy tính
Trang 16- Cùng một yêu cầu nhưng không xác định duy nhất sản phẩm đầu ra Khi mà khách hàng yêu cầu xây dựng phần mềm thì mỗi đội phát triển sẽ cho ra một sản phẩm khác nhau, có thể có những khác nhau về giao diện, quy trình nghiệp
vụ, tính năng sản phẩm Những sự khác nhau này vẫn cần phải đảm bảo sản phẩm làm ra phải thỏa mãn yêu cầu và làm hài lòng khách hàng
- Các nguyên tắc kỹ nghệ để làm ra phần mềm hoàn toán khác với các nguyên tắc tạo ra sản phẩm thông thường(như cơ, điện )
- Sản phẩm phần mềm chịu nhiều yếu tố biến động hơn các sản phẩm khác, các yếu tố biến động như công nghệ, môi trường, nghiệp vụ và nguồn lực ảnh hưởng trực tiếp tới chất lượng phần mềm
- Nguyên liệu đầu vào để sản xuất phần mềm cũng rất đặc trưng, nguyên liệu đầu vào có thể là các sản phẩm phần mềm khác, các gói thư viện phần mềm, còn một nguyên liệu rất trừu tượng đó là chất sám
Dự án phần mềm cũng giống như các loại dự án khác về các nguyên nhân gây nên sự thất bại của dự án Các nguyên nhân thất bại như:
- Dự án không có tính thực tế và sản phẩm không khớp với yêu cầu khách hàng
- Dự án không hoàn thành đúng hạn dẫn đến sự không hài lòng của khách hàng làm cho khách hàng có thể kết thúc dự án
- Chi phí dự án bị vượt quá dự toán
- Khi lập kế hoạch người có thẩm quyền đã ước tính không chính xác nguồn lực cần thiết cho dự án
- Xác định yêu cầu hệ thống không đúng
- Báo cáo tình trạng dự án sơ sài
- Dự án không thực hiện quản lý độ rủi ro
- Việc giao tiếp khách hàng, người sử dụng và người phát triển dự án không tốt dẫn tới hiểu sai yêu cầu khách hàng
- Dự án sử dụng công nghệ lạc hậu
- Không có khả năng xử lý độ phức tạp của dự án
- Phát triển thực hành không có hệ thống
- Thiếu kinh nghiệm trong việc quản lý dự án
- Các bên liên quan mang tính chính trị
- Các áp lực mang tính thương mại
Nhìn lại lịch sử về các dự án phần mềm, trong giai đoạn từ những năm 1970 và những năm 1980 ngành công nghiệp phần mềm phát triển như vũ bão,do sản xuất phần mềm giai đoạn này dễ hơn và giá thành rẻ hơn so với sản xuất phần cứng vì vậy ngành công nghiệp sản xuất phần mềm nhanh chóng phát triển trong giai đoạn từ thập niên 1970 đến thập niên 1980 Các công ty cũng đã ứng dụng các phương thức quản lý phần mềm, trong giai đoạn này các phương pháp quản lý phần mềm được đưa ra sử dụng luôn, chưa qua quá trình kiểm thử thực tế nên hiệu quả không được tốt, đặc biệt là sự không khớp giữa đặc tả người dùng và phần mềm được chuyển giao cho khách hàng,
Trang 17dẫn đến một loạt các nguyên nhân thất bại của dự án phần mêm kể trên Để tránh các vấn đề trên, các phương thức quản lý dự án phần mềm tập trung vào làm rõ các yêu cầu người dùng theo mô hình hình thác nước
Hiện này phần mềm máy tính đã được ứng dụng rộng khắp vào hầu như tất cả các hoạt động sản xuất, trong mọi ngành kinh tế, xã hội Do vậy các phần mềm hiện đại ngày nay nảy sinh nhiều vấn đề mới mà các nhà quản lý cần phải quan tâm, hoạch định để giải quyết các vấn đề này Các vấn đề của phần mềm bao gồm:
- Chi phí liên quan đến phần mềm ngày càng tăng.Do phần mềm ngày càng phức tạp và khó, với những phần mềm phức tạp và khó đòi hỏi người quản trị phải có
kỹ năng nhất định để đảm bảo dự án phần mềm, và những người trong đội phát triển cũng phải có kỹ năng ở mức độ cho phép để tham gia dự án Đó là một trong những nguyên nhân dẫn đến chi phí liên quan ngày càng tăng
- Các yêu cầu của khách hàng thì càng ngày càng nhiều Do phần mềm càng ngày càng phức tạp, dẫn đến tính năng phần mềm nhiều và phức tạp
- Quy mô, độ phức tạp ngày càng lớn
- Yêu cầu hiệu năng phần mềm ngày càng tăng theo sự tăng trưởng của phần cứng và nhu cầu người dùng
- Phần mềm ngày càng lớn, nhiều người tham gia thực hiện, vấn đề truyền thông, quản lý ngày càng quan trọng (một ví dụ là hệ điều hành Window2000 cần đến 5.000 người tham gia)
Với những vấn đề nổi cộm ở trên ta thấy việc cấp thiết phải có những phương pháp để quản lý các dự án phần mềm hiệu quả Ngày nay trên thế giới các nhà hoạch định chiến lược, các công ty lớn, các nhà nghiên cứu trong các viện, các trường đại học đã tập chung nghiên cứu tìm tòi, cải tiến các phương pháp, quy trình, cải tiến công cụ quản lý dự án phần mềm Nhờ áp dùng các kết quả nghiên cứu, công cụ mới mà đã từng bước giải quyết được các vấn đề khó khăn trên của dự án phần mềm
1.1.2 Thế nào là quản trị dự án
Quản lý dự án là việc áp dụng kiến thức, phương pháp, kỹ thuật, công cụ và tổ chức các hoạt động nhằm tạo ra sản phẩm đáp ứng yêu cầu đã cho Hoạt động quản lý dự án phần mềm bao gồm: lập kế hoạch, triển khai, theo dõi, giám sát, đánh giá và điều chỉnh Vòng đời chuẩn của quản lý dự án gồm 4 pha sau:
Khởi tạo dự án
Xác định
dự án
Lập kế hoạch
Đóng
dự án Thực
hiện
Trang 18Hình 1.1 Vòng đời chuẩn của quản lý dự án
- Giai đoạn xác định dự án: Giai đoạn này bắt đầu với công bố dự án cho đến
khi các tài liệu dự án được các bên tham gia thông qua Kết quả của giai đoạn này là một hoặc nhiều dự án được chọn, các tài liệu thông tin dự án được hoàn thành và làm cơ sở để triển khai hoặc mời thầu dự án (với các dự án lớn)
- Lập kế hoạch: Tạo các kế hoạch dự án, trong giai đoạn này có thể thay đổi tài
liệu dự án ở bước xác định dự án nếu như phù hợp và được các bên thông qua
- Thực hiện: Triển khai các kế hoạch dự án đã thông qua Giai đoạn này dựa vào
kết quả ở bước Lập kế hoạch, bộ phận quản trị tiến hành lập lịch biểu chi tiết
các kế hoạch và tiến hành thực hiện các công việc, giám sát các công việc thực hiện đúng tiến độ đã đề ra Việc lập lịch biểu có thể làm tự động bằng chương trình máy tính, có thể dùng giải thuật di truyền để tìm ra phương án lập lịch tối
ưu
- Đóng dự án: Công việc tiến hành bao gồm: chuyển dự án sang khâu bảo trì,
tiến hành các thủ tục kết thúc với khách hàng, đánh giá, rút kinh nghiệm về dự
án, tiền hành lưu trữ tài liệu phục vụ cho dự án tiếp theo
Quản lý dự án tập chung vào các nội dung: Quản lý công việc, quản lý tiến độ, quản lý tài chính, quản lý nhân lực, quản lý nguồn lực, quản lý chất lượng Việc quản lý dự án
sẽ gặp phải nhiều thách thức như thách thức nhân lực, công việc, ước lượng, tổ chức, quản lý và kiểm soát
- Nhân lực:Thách thức từ khâutuyển chọn(từ đâu? kỹ năng cần có là gì?), đến
khâu sử dụng (vào đâu? công việc gì?) Vàkhi dự án kết thúc, không cần dùng tới thì phải sắp xếp nhân lực hợp lý
- Công việc và ước lượng: Khi ước lượng công việc người quản trị cần phải xác
định đủ việc, ước lượng đúng khối lượng, chi phí nguồn lực, thời gian cần thiết
để hoàn thành công việc
- Tổ chức và quản lý: Tùy theo tổ chức hiện có và mục tiêu cần đạt được của dự
án phần mềm mà tiến hành tổ chức bộ phận quản lý dự án phần mềm hợp lý Các cách tổ chức này là tạm thời, tồn tại cho đến khi dự án kết thúc Ứng với một dự án mà thành viên tham gia sẽ được xác lập một thẩm quyền nhất định,
và mối quan hệ giữa các thành viên cũng thay đổi theo từng dự án
- Kiểm soát: Do công việc có nhiều thay đổi, ví dụ như thay đổi về nhân lực, thay
đổi do yêu cầu khách hàng,nên kế hoạch công việc và việc thực hiện kế hoạch này không ổn định, luôn thay đổi Người quản trị cần nắm thông tin kịp thời và điều chỉnh cho phù hợp với yêu cầu thực tế, cần phải ra quyết định chính xác, phù hợp và đạt đồng thuận cao trong nhóm
Trang 19- Việc quản lý qua các thể hiện, không nhìn thấy trực tiếp:Các thể hiện ở đây là
tài liệu và chương trình, chúng rất đa dạng và thiếu thước đo, các dự án phần mềm khác nhau lại dùng các chuẩn khác nhau, việc áp dụng chuẩn tài liệu rất vất vả và mất nhiều công sức
- Thách thức chất lượng: Chất lượng phần mềm phụ thuộc vào rất nhiều yếu tố
như: quy trình có phù hợp với thực tế hay không và có mang lại hiệu quả không Công nghệ và công cụ có phù hợp với sản phẩm và môi trường hay không Kiểm soát thay đổi, các thay đổi có được kiểm soát thường xuyên hay không và phải đảm bảo rằng các thay đổi phải được thực thi nghiêm túc tránh việc bỏ sót
- Khống chế rủi ro:Rủi ro là các sự kiện khiến dự án thất bại, ví dụ: chi phí quá
cao, thời gian quá dài, tính năng quá kém Rủi ro trong phần mềm có rất nhiều
và hay xảy ra, do vậy việc khống chế rủi ro phải được quan tâm, đảm bảo được rằng phải biết được các rủi ro và lập kế hoạch phòng chống cụ thể Nhiệm vụ của người quản lý dự án trong việc khống chế rủi ro bao gồm: phải xác định, dự đoán được rủi ro, phân tích rủi ro (khả năng và thiệt hại), đưa ra giải pháp để khống chế rủi ro (quản lý rủi ro), giám sát (theo dõi sự xuất hiện, tác động của rủi ro) và thực hiện các biện pháp quản lý
Quản lý dự án phần mềm là việc quản lý toàn diện các mặt của hoạt động trên dự án phần mềm để đảm bảo sản xuất ra phần mềm đúng chất lượng và yêu cầu của khách hàng Các hoạt động quản lý gồm mục tiêu thực hiện và chi tiết nội dung được liệt kê trong bảng dưới đây:
Bảng 1.1 Các hoạt động của quản lý dự án
STT Hoạt động Mục tiêu Nội dung
- Kiểm soát thay đổi
2 Quản lý thời gian Đảm bảo hoàn thành hạng mục
công việc trong thời hạn dự kiến
-Xác định thời gian hoàn thành công việc
- Xác định trình tự thực hiện
- Lập lịch thực hiện -Kiểm soát thực hiện theo lịch
3 Quản lý chi phí Đảm bảo huy động, sử dụng
ngân sách đáp ứng yêu cầu
- Lập kế hoạch huy động ngân sách
-Ước tính chi phí
- Phân phối ngân sách
- Kiểm soát chi tiêu
Trang 20- Kiểm định chuẩn cho mỗi sản phẩm
- Quản lý thay đổi chất lượng
5 Quản lý nhân lực Tìm và sử dụng người tham gia
- Xác định nhu cầu trợ giúp
- Lập kế hoạch mua sắm, trang
bị -Tìm nhà cung cấp và đặt hàng
- Quản lý hợp đồng mua sắm
- Tổ chức việc cung cấp trợ giúp
7 Quản lý thông tin
8 Quản lý rủi ro Đảm bảo ngăn ngừa và hạn chế
thiệt hại do sự cố xảy ra
- Xây dựng triển khai quy trình
- Giám sát thực hiện quy trình
và lưu trữ cấu hình, phiên bản
Ngoài các hoạt động từng mặt người quản trị dự án cần quản lý chung để phối hợp các quản lý cụ thể để đảm bảo dự án được thực hiện tốt nhất Trong các hoạt động trên thì hai hoạt động: Quản lý rủi ro và quản lý cấu hình là đặc thù riêng biệt của quản lý dự
án phần mềm Cònquản lý thời gian, quản lý chi phí, quản lý chất lượng là đặc biệt quan trọng của quản lý dự án phần mềm
Trong phạm vi đề tài này học viên quan tâm tìm hiểu kỹ về hoạt động Quản lý thời gian của dự án để tìm cách áp dụng kiến thức về giải thuật di truyền áp dụng vào các bước lập lịch dự án đảm bảo thời gian thực hiện toàn bộ dự án là tối ưu nhất Hoạt động quản lý thời gian nhằm mục đích đảm bảo hoàn thành các hạng mục công việc
Trang 21của dự án đúng tiên độ đã đề ra Để quản lý thời gian tốt người quản trị cần phải xác định thời gian hoàn thành từng công việc, sau đó tiến hành xác định trình tự thực hiện các công việc sao cho tối ưu nhất, tiếp theo người quản trị lập lịch biểu thực hiện các công việc này, sau khi có lịch biểu thực hiện công việc thì tiến hành kiểm soát thực hiện sát sao theo đúng kế hoạch lịch biểu đã đề ra để đảm bảo toàn bộ dự án được thực hiện theo đúng thời gian đã định
1.2 Vấn đề lập kế hoạch, lập lịch trong quản trị dự án phần mềm
Trong quản lý dự án vấn đề lập kế hoạch và lập lịch dự án là rất quan trọng.Kế hoạch tốt giúp các khâu tiếp theo làthực hiện và đóng dự án dễ dàng hơn Việc lập lịch có thể
sẽ phải chỉnh sửa lại nhiều lần tại các thời điểm khác nhau của dự án, việc điều chỉnh này do sự thay đổi các nhân tố như thay đổi về nguồn lực thực hiện dự án (nhân viên
ốm, nhân viên nghỉ việc…), do các thay đổi từ phía khách hàng như khách hàng yêu cầu thay đổi tính năng sản phẩm Nếu như áp dụng đươc các thuât toán vào khâu lập
kế hoạch, lập lịch nhằm tự động hóa được việc lập kế hoạch sẽ giảm bớt được sự sai sót và tăng hiệu quả của việc lập kế hoạch
1.2.1 Khái niệm về lập kế hoạch
Kế hoạch là bản dự kiến công việc cần làm (cái gì?), thứ tự thực hiện(tiến trình?), thời gian(khi nào? bao lâu?), phương tiện dùng (cái gì? bao nhiêu?), người làm (ai?), sản phẩm ra (cái gì?) và tiêu chí đánh giá (chất lượng?)
Kế hoạch là công việc lặp đi lặp lại suốt quá trình dự án.Có rất nhiều kế hoạch cần lập
để quản trị dự án Kế hoạch là công cụ chính để quản trị dự án
1.2.2 Tự động hóa việc lập lịch
Khi lập kế hoạch bộ phận chịu trách nhiệm lập kế hoạch cần phải quan tâm đến các nguồn lực phục vụ cho dự án để lập kế hoạch được chi tiết và bám sát thực tế Các nguồn lực phục vụ dự án bao gồm:
- Con người: Lànhân tố hàng đầu quan trọng nhất quyết định đến kế hoạch cũng như chất lượng của dự án Với mỗi loại dự án khác nhau con người tham gia dự
án cần phải có năng lực phù hợp
- Các phần mềm dùng lại được: Thành phần đóng gói dùng được ngay vào công việc làm dự án, các thành phần đã kiểm nghiệm tốt, có thể sửa và dùng lại được
- Phần cứng, công cụ phần mềm chia sẻ
Khi lập kế hoạch người quản trị dự án phải đưa ra được các kế hoạch phục vụ cho dự
án, đó là kế hoạch công việc, kế hoạch quản lý rủi ro, kế hoạch chất lượng, kế hoạch quản lý cấu hình, kế hoạch ngân sách, kế hoạch nguồn lực Trong các kế hoạch này kế hoạch công việc là khá quan trọng Trong phạm vi luận văn này học viên quan tâm tìm
Trang 22hiểu kỹ về kế hoạch công việc và tiến hành áp dụng giải thuật di truyền trên kế hoạch công việc để ra được kết quả lập lịch thực hiện công việc
Bảng 1.2 Các kế hoạch của dự án
Kế hoạch công việc Mô tả công việc và lịch biểu thực hiện
cho sản phẩm dự án
Kế hoạch quản lý rủi ro Xác định các rủi ro và các giải pháp
Kế hoạch chất lượng Mô tả thủ tục và các chuẩn chất lượng
được áp dụng
Kế hoạch quản lý cấu hình Mô tả cấu hình, thủ tục và tiến trình quản
lý cấu hình và sự thay đổi
Kế hoạch ngân sách Chỉ ra lượng ngân sách cần theo thời gian
- Bước 1: Phải xây dựng được bảng phân rã công việc (work breakdown
structure) Đây là công việc mà đội dự án và người quản trị phải xác định nhiệm
vụ (gói công việc) cần thực hiện để tạo ra các sản phẩm
- Bước 2: Phải xác định được các mối quan hệ giữa các công việc: đặt các gói
công việc theo tiến trình có trình tự trước-sau, công việc nào là công việc trực tiếp phía trước, công việc nào trực tiếp phía sau
- Bước 3: Ước lượng các gói công việc: mỗi gói công việc cần ước lượng ngày
công lao động (tốn bao nhiêu thời gian để làm) số lượng nhân lực và vật lực(theo từng loại) cần tham gia để hoàn thành các gói công việc này
- Bước 4: Xây dựng lịch biểu ban đầu: tính toán thời gian thực hiện dự án, thời
gian bắt đầu sớm nhất và thời gian kết thúc muộn nhất của từng công việc
- Bước 5: Gán nguồn lực thực hiện, điều chỉnh lịch Sau khi gán nguồn lực, cần
chính xác hóa lịch biểu khi tính đến các ràng buộc nguồn lực Các nhiệm vụ được lập lịch sao cho tối ưu hóa việc sử dụng lao động và các nguồn lực khác Trong phạm vi nghiên cứu áp dụng giải thuật di truyền vào quản lý dự án phần mềm, học viên thấy tại bước 4 và 5 của quá trình lập lịch, lập kế hoạch công việc có thể tiến hành tự động Việc áp dụng lập lịch tự động từ các dữ liệu đầu vào bao gồm: bảng dữ liệu phân rã công việc, bảng dữ liệu ước lượng các gói công việc trong bảng phân rã
Trang 23công việc, bảng dữ liệu nguồn lực hiện có trong dự án, tiến hành áp dụng giải thuật di truyền để tự động lập lịch biểu dựa trên các dự liệu đâu vào, tự động gán nguồn lực thực hiện công việc và tìm ra một kết quả tối ưu nhất hoặc kết quả chấp nhận được Việc áp dụng giải thuật này được học viên trình bày kỹ lưỡng trong các trang tiếp theo của luận văn, các kết quả dữ liệu test trên bộ dữ liệu tự sinh cũng được học viên trình bày để thấy được việc áp dụng giải thuật khiến khâu lập lịch này là hợp lý và là một hướng nghiên cứu đúng đắn
Trang 24Chương 2 GIảI THUậT DI TRUYềN VÀ CÁC ứNG DụNG
2.1 Tổng quanvề giải thuật di truyền
Giải thuật di truyền là một kỹ thuật của khoa học máy tính nhằm tìm kiếm giải pháp thích hợp cho các bài toán tối ưu tổ hợp (combinatorial optimization) Giải thuật di truyền là một phân ngành của giải thuật tiến hóa vận dụng các nguyên lý của tiến hóa như di truyền, đột biến, chọn lọc tự nhiênvà trao đổi chéo[11].Ngày nay, giải thuật di truyền được dùng phổ biến trong một số ngành như tin sinh học, khoa học máy tính, trí tuệ nhân tạo, tài chính và một số ngành khác
Giải thuật di truyền được lấy cảm hứng từ thuyết tiến hóa của giới tự nhiên do nhà bác học Darwin xây dựng.Nguyên lý sinh học khởi nguồn của tư tưởng lập trình tiến hóa như sau:Trong tất cả cá thể sống đều chứa các tế bào Mỗi mội tế bào đều chứa cùng tập hợp bộ nhiễm sắc thể giống nhau Nhiễm sắc thể chứa các chuỗi DNA Các chuỗi DNA được nhóm lại thành các khối (block) hay còn gọi là gen, mỗi một gen này là một Protein Hay có thể nói mỗi một gen này biểu diễn một đặc điểm của sinh vật, ví
dụ như đặc điểm của màu mắt (nâu, đen, xanh, vàng), đặc điểm của màu tóc(đen, bạch kim, nâu, vàng), kiểu tóc (thẳng, xoăn…) Các Gen tương ứng là các Gen có cùng một đặc tính với giá trị khác nhau, hoặc giống nhau Ví dụ Gen quy định màu tóc vàng ở cá thể A tương ứng với Gen quy định tóc đen ở cá thể B.Tập hợp toàn bộcác nguyên liệu
di truyền học (tất cả các nhiễm sắc thể) được gọi là bộ di truyền Kiểu Gen là tập hợp con các gen trong bộ các nguyên liệu di truyền Kiểu gen này sẽ quy định đặc tính cơ thể (thể xác) và tinh thần của cá thể sống như màu mắt, mức độ thông minh
Sự sinh sản: Trong quá trình sinh sản sự tổ hợp (trao đổi chéo) Gen từ các cá thể cha
mẹ sẽ được chuyển cho thế hệ sau Quá trình tạo mới cá thể con cháu có thể là đột biến Đột biến xảy ra khi các thành phần DNA có một chút thay đổi, nguyên nhân chính của quá trình đột biến thường là lỗi trong quá trình sao chép các Gen từ các cá thể cha-mẹ Sự phù hợp của một cá thể (fitness) được đánh giá bằng sự thành công của
cá thể đó trong môi trường sống
Giải thuật di truyền được ứng dụng để giải quyết các bài toán NP-Problem NP-hard: Non-deterministic polynomial time hard Các bài toán dạng này bao gồm:
Trang 25- Planning: Lập kế hoạch
- Rosters or schedules
- Tutoring systems: Hệ thống giám sát
- Decision support: Hỗ trợ quyết định
cá thể nào không thích nghi với môi trường sẽ bị đào thải Sự thay đổi của môi trường
sẽ tác động đến quá trình tiến hóa và bản thân quá trình tiến hóa cũng có tác động và làm thay đổi môi trường Cá thể mới sinh ra trong quá trình tiến hóa nhờ vào sự lai ghép ở thế hệ cha-mẹ Một cá thể mới có thể mang những đặc tính của cha-mẹ ở thế hệ trước (di truyền) hoặc mang những đặc tính mới hoàn toàn (đột biến) Di truyền và đột biến là hai cơ chế quan trọng như nhau trong quá trình tiến hóa mặc dù xác suất để xảy
ra hiện tượng đột biến nhỏ nhiều so với hiện tượng di truyền” [1] Mặc dù cơ chế là ngẫu nhiên nhưng thuật toán di truyền không phải là một thuật toán ngẫu nhiên Thuật toán khai thác và tận dụng được một cách hiệu quả thông tin quá khứ để có được những kết quả mới đạt kết quả như mong muốn Các cải tiến trong việc sử dụng thuật toán di truyền đã làm tăng thêm hiệu quả của việc sử dụng thuật toán trong các bài toán phức tạp Điều này thể hiện ở việc giảm thời gian tính toán ngày càng hiệu quả
mà ta sẽ tìm hiểu cụ thể hơn ở dưới đây
"Evolution strategies" (Evolutionsstrategie in original) Sau đó các nhà nghiên cứu khác tiếp tục phát triển ý tưởng này của ông Năm 1971 ông làm luận án tiến sỹ về evolution strategies và năm 1973 ông xuất bản thành sách
Trong những năm 1970 Jonh Holland có những ảnh hưởng rất lớn trong quá trình phát triển của giải thuật di truyền Giải thuật di truyền (GA) được Holland phát minh và sau
Trang 26đó ông cùng các sinh viên và cộng sự của mình phát triển tiếp Các kết quả này được giới thiệu trong cuốn sách "Adaption in Natural and Artificial Systems" xuất bản vào năm 1975 của ông
Vào năm 1992, John Koza đã sử dụng giải thuật di truyền để thực hiện một vài nhiệm
vụ trong chương trình tiến hóa Ông đã gọi phương pháp này là Lập trình tiến hóa ("genetic programming" (GP))[7]
2.3 Các bước áp dụng giải thuật di truyền
2.3.1 Mã hóa dữ liệu
Hay còn gọi là biểu diễn di truyền cho lời giải của bài toán: Đây là bước đầu tiên và rất quan trọng đối với việc tìm ra lời giải của bài toán Mỗi lời giải của bài toán được biểu diễn dưới dạng một chuỗi ký tự hữu hạn hay còn được gọi là một nhiễm sắc thể Các
ký tự có thể là số nhị phân, số thập phân, … tùy vào từng bài toán cụ thể Trong quá trình này, việc mã hóa cái gì, mã hóa như thế nào, trật tự các thành phần trong nhiễm sắc thể ra sao,… luôn là những thách thức cho những người giải bài toán
Nhiễm sắc thể 1 1101100100110110 Nhiễm sắc thể 2 1101111000011110
Hình 2.1 Ví dụ về mã hóa nhiễm sắc thể
Có các dạng mã hóa dữ liệu như sau:
- Mã hóa nhị phân (Binary encoding): Mã hóa này là dạng mã hóa thông dụng nhất Các chương trình GA đầu tiên sử dụng kiểu mã hóa này.Các nhiễm sắc thể được biểu diễn bằng chuỗi các bit dữ liệu bao gồm 0 và 1
Nhiễm sắc thể A 101100101100101011100101 Nhiễm sắc thể B 111111100000110000011111
Hình 2.2Ví dụ về mã hóa nhị phân
Mã hóa nhị phân được dùng trong bài toán xếp ba lô.Bài toán xếp ba lô (một số sách ghi là bài toán cái túi) là một bài toán tối ưu hóa tổ hợp Bài toán được đặt tên từ vấn đề chọn những gì quan trọng có thể nhét vừa vào trong một cái túi (với giới hạn khối lượng) để mang theo trong một chuyến đi Các bài toán tương tự thường xuất hiện trong kinh doanh, toán tổ hợp, lý thuyết độ phức tạp tính toán, mật mã học và toán ứng dụng
- Mã hóa hoán vị (Permutation encoding): Mã hóa này được sử dụng trong các bài toán xắp xếp, ví dụ các bài toán người giao hàng (travelling salesman), bài toán xắp xếp các nhiệm vụ Ở mã hóa này các nhiễm sắc thể là chuỗi các số liên tiếp nhau Kiểu mã hóa này được học viên quan tâm và nghiên cứu kỹ lưỡng vì
nó phù hợp với bài toán lập lịch Ở bài toàn lập lịch ta sẽ hoán đổi vị trí thực
Trang 27hiện các công việc để tìm ra được cách hoán đổi tối ưu nhất, tức là cách hoán đổi làm cho thời gian thực hiện công việc ít nhất
Nhiễm sắc thể A 1 5 3 2 6 4 7 9 8 Nhiễm sắc thể B 8 5 6 7 2 3 1 4 9
Hình 2.3Ví dụ về mã hóa hoán vị
- Mã hóa giá trị (value encoding):
Nhiễm sắc thể A 1.2324 5.3243 0.4556 2.3293 2.4545 Nhiễm sắc thể B ABDJEIFJDHDIERJFDLDFLFEGT Nhiễm sắc thể C (back), (back), (right), (forward), (left)
2.3.2 Khởi tạo quần thể
Xây dựng tập hợp nghiệm ban đầu (tập hợp các cá thể) có thể ngẫu nhiên hoặc không ngẫu nhiên Có nhiều cách để khởi tạo giá trị quần thể nghiệm ban đầu, tùy từng bài toán mà ta lựa chọn phương pháp phù hợp Thông thường, hệ nghiệm ban đầu được chọn ngẫu nhiên trong không gian tìm kiếm Tuy vậy, việc chọn này cũng cần phải xem xét về tương quan giữa độ thích nghi của các nhiễm sắc thể để tránh tình trạng nghiệm tìm ra là nghiệm tối ưu cục bộ hay còn gọi là cực trị địa phương Còn vấn đề
số lượng nghiệm của tập nghiệm hay qui mô của quần thể cũng cần được xem xét kỹ dựa vào độ phức tạp của bài toán, độ chính xác yêu cầu (cao hay thấp) và thời gian tính toán yêu cầu (nhanh hay chậm)
2.3.3 Xác định hàm thích nghi
Hay hàm lượng giá cho mỗi nhiễm sắc thể hay chính là cho các phương án nghiệm trong tập nghiệm Hàm này dùng để đánh giá độ thích nghi của các nhiễm sắc thể Hàm thích nghi cần phải đánh giá được mức độ thích nghi cho tất cả các nghiệm khả
Trang 28thi và luôn được giả định là không âm để hiện độ thích nghi của các cá thể Công thức biểu diễn hàm cần phải thể hiện được tất cả các đặc tính mong muốn của nhiễm sắc thể, thông qua đó có thể chọn lọc được các quần thể nghiệm tốt nhất cho bài toán
2.3.4 Quá trình lai ghép
Đây là quá trình nhiễm sắc thể mới được hình thành dựa trên nhiễm sắc thể cha-mẹ bằng cách lai ghép một hay nhiều đoạn nhiễm sắc thể cha mẹ với nhau.Lai ghép có xét tới các đặc tính trội và lặn trong tự nhiên Các đặc tính này được quy định trước trong khi biểu diễn cấu trúc nhiễm sắc thể Bằng việc xem xét tới các đặc tính trội-lặn, quá trình sản sinh ra các "quần thể chất lượng tốt" sẽ nhanh hơn và do đó thời gian tính toán cũng được rút ngắn Phép lai ghép xảy ra với xác suất là p1 có thể được mô phỏng như sau:
- Chọn hai (hay nhiều) cá thể bất kỳ trong quần thể Quần thể ở đây bao gồm các nhiễm sắc thể (cha-mẹ) có độ dài bằng nhau
- Chọn điểm lai là một điểm có vị trí bất kỳ (như nhau) trên nhiễm sắc thể
cha-mẹ và thực hiện hoán đổi các đoạn gen của nhiễm sắc thể cha-cha-mẹ tại điểm lai này
- Đưa hai cá thể này vào quần thể để thực hiện vào các quá trình tiến hóa tiếp theo
Hình 2.7Lai ghép giữa hai cá thể
Trang 29Trong quá trình tồn tại và phát triển, thuật toán di truyền đã được bổ sung rất nhiều các phương pháp lai ghép để nhằm thích ứng với nhiều kiểu bài toán và cũng là để tăng hiệu quả của thuật toán Có thể kể một số phép lai cải tiến như sau:
- Lai ghép từng phần: Việc giữ lại những đoạn mã đã "tối ưu" trong nhiễm sắc thể cũng là một cách để quá trình lai ghép trở nên hiệu quả hơn
- Lai ghép có trật tự
- Lai ghép dựa trên vị trí
- Lai ghép chu trình
- Lai ghép thứ tự tuyến tính
- Lai ghép đa điểm: Với phương pháp này, chúng ta có thể cho 2 cá thể lai ghép ở
2 hay nhiều điểm lai ghép Phương thức này làm cho thuật toán trở nên linh hoạt hơn, nhờ đó các thế hệ cá thể con cũng sẽ có chất lượng tốt hơn
2.3.5 Quá trình đột biến
Là quá trình cá thể con mang một hay một số tính trạng không có trong mã di truyền của cha-mẹ Quá trình này xảy ra với xác suất p2 (nhỏ hơn nhiều so với p1) có thể được
mô tả như sau:
- Chọn ngẫu nhiên một cá thể bất kỳ trong quần thể
- Chọn một gen bất kỳ của cá thể vừa chọn
- Thay đổi giá trị gen đó (đối với cách mã hóa gen theo số nhị phân thì quá trình thay đổi giá trị là đổi giá trị từ 0 thành 1 hoặc từ 1 thành 0) rồi trả về quần thể
để thực hiện các quá trình tiếp theo
Nhiễm sắc thể trước đột biến:
0 1 1 1 0 1 0 0 0 1 1 0 0
Điểm tạo đột biến
Nhiễm sắc thể sau đột biến:
0 1 1 0 0 1 0 0 0 1 1 0 0
Hình 2.8Đột biến một nhiễm sắc thể
Trang 30Nhiễm sắc thể gốc 1 1101111000011110
Nhiễm sắc thể gốc 2 1101100100110110 Đột biến nhiễm sắc thể 1 1100111000011110 Đột biến nhiễm sắc thể 2 1101101100110110
Hình 2.9Đột biến một nhiễm sắc thể tại một điểm và hai điểm
Tương tự như quá trình lai ghép, trong quá trình phát triển của thuật toán di truyền cũng đã được bổ sung rất nhiều cách thức để thực hiện quá trình gây đột biến ngày càng hiệu quả hơn:
- Đột biến đảo ngược (Inversion Mutation)
- Đột biến chèn (Insertion Mutation)
- Đột biến thay thế (Raplacement Mutation)
- Đột biến tương hỗ (Reciprocal Exchange Mutation)
- Đột biến dịch chuyển (Shift Mutation)
2.3.6 Quá trình chọn lọc
Quá trình mà các cá thể mới sinh ra được giữ lại hay bị loại bỏ khỏi quần thể dựa vào
độ thích nghi của chúng Độ thích nghi ở đây thường là một hàm gán một giá trị thực cho các cá thể trong quần thể Đối với quá trình này có rất nhiều cách để xác định trình
tự tính toán và thực hiện tùy vào cách lựa chọn độ thích nghi của cá thể nói riêng và của cả quần thể nói chung Có các kiểu chọn lọc sau:
- Roulette wheel selection: Thế hệ cha mẹ được chọn lựa sang thế hệ tiếp theo dựa vào giá trị fitness của chúng.Với kiểu chọn này nhiễm sắc thể nào có giá trị finess lớn sẽ được chọn nhiều lần Thuật toán như sau:
o Bước 1: Tính tổng S các giá trị fitness của toán bộ cá thể trong quần thể
o Bước 2: Chọn một số ngẫu nhiên từ 0 đến s, giả sử là số r
o Bước 3: Duyệt quần thể từ cá thể số 0 đến s, tính tổng fitness từ 0 đến s, khi mà s >= r thì dừng lại và chọn cá thể s
o Lặp lại quá trình trên cho đến khi chọn xong quần thể mới
- Rank selection: Với kiểu lựa chọn Roulette wheel selection thì có một vấn đề xảy ra lànếu như giá trị fitness giữa các cá thể quá khác biệt nhau, số lượng cá thể yếu sẽ ít được chọn, cá thể fitness lớn có thể sẽ chiếm gần như toàn bộ quần thể ở thế hệ tiếp theo, ảnh hưởng đến tính đa dạng cá thể trong quần thể Kiểu chọn Rank selection sẽ khắc phục được điểm yếu của kiểu lựa chọn trên Đầu tiên sẽ đánh giá quần thể và mọi cá thể sẽ nhận được giá trị fitness từ sự đánh giá này Cá thể tồi nhất có fitness là 1, rồi là 2,… tốt nhất là N (số lượng cá thể trong quần thể) Tất cả các cá thể sẽ được chọn ngẫu nhiên sang thế hệ tiếp
Trang 31theo Nhưng kiểu lựa chọn này gần như có độ hội tụ kém nhất bởi vì cá thể tốt nhất khá khác biệt với cá cá thể khác
- Elitism: Khi tạo quần thể mới bằng phương pháp lai tạo và đột biến, có thể chúng ta sẽ làm mất đi cá thể tốt nhất, để giải quyết vấn đề này phương pháp chọn lọc Elitism được sinh ra, Phương pháp này đâu tiên sẽ sao chép cá thể tốt nhất ( hay một vài cá thể tốt nhất) sang thế hệ tiếp theo Áp dụng phương pháp này sẽ nhanh chóng tìm ra nghiệm (tăng tốc độ của thuật toán)
2.4 Các tham số của giải thuật di truyền
Các tham số của giải thuật di truyền như sau:
- Kích cỡ hệ nghiệm (pop-size): Số lượng cá thể phù hợp trong mỗi thế hệ
- Xác suất lai tạo (pc): Xác suất để mỗi cá thể trong quần thể được tham gia quá trình lai ghép
- Xác suất đột biến (pm): Xác suất để mỗi bit trong nhiễm sắc thể bị đột biến
- Xác suất sinh ngẫu nhiên một số cá thể mới và truyền vào thế hệ kế tiếp
Thông thường, kích cỡ của quần thể phụ thuộc vào độ phức tạp của bài toán Bài toán càng phức tạp, nhiều ràng buộc-đơn hoặc đa mục tiêu- thì số lượng cá thể trong mỗi thế hệ càng phải lớn Hai thông số xác suất trong quá trình di truyền có khoảng giá trị rất khác nhau Đối với xác suất lai tạo, giá trị thường rơi trong khoảng 0,5-0,95 nhưng giá trị thông thường của xác suất đột biến thấp hơn nhiều, chỉ ở khoảng 0,001-0,05 Điều này cũng phản ánh đúng xác suất xảy ra hai quá trình trong thực tế
Từ một ví dụ trên đây có thể tính được một số ưu điểm của thuật toán di truyền như phương pháp này tìm từ một quần thể các điểm chứ không phải một điểm Điều này làm cho việc giải các bài toán đa mục tiêu hay việc tìm một tập hợp các phương án lân cận nghiệm trở nên dễ dàng Thêm vào đó, việc đánh giá thông tin bằng hàm mục tiêu chứ không dùng đạo hàm hay các tri thức bổ sung cũng là một ưu điểm của thuật toán
Trang 322.5 Thuật toán giải thuật di truyền
Giải thuật di truyền được mô hình hóa theo các bước giống như lưu đồ dưới đây
Hình 2.10Sơ đồ quá trình tính toán của thuật toán di truyền Trong lưu đồ trên các bước được thực hiện lần lượt như sau:
Bước 1: Khởi tạo/lựa chọn các thông số cho quá trình tính toán Bước này người lập
trình tính toán phải lựa chọn các thông số như: Số lượng cá thể trong quần thể, cách thức hóa bài toán cần tính toán dưới dạng các nhiễm sắc thể (độ dài của nhiễm sắc thể, kiểu số biểu diễn dữ liệu,…), số thế hệ tính toán, xác suất lai ghép, xác suất đột biến, hàm thích nghi,…
Khởi tạo, lựa chọn các thông số giải thuật di truyền
Khởi tạo ngẫu nhiên các cá thể cho quần thể ban đầu
Đánh giá các cá thể bằng hàm thích nghi
Thực hiện các phép toán di truyền: đột biến, lai tạo
chéo trên các cá thể để tạo ra các cá thể mới
Tạo quần thể kế tiếp bằng quá trình chọn lọc
Đánh giá quấn thểmới
Kết thúc lưu kết quả tính toán
Thỏa mãn
Không thỏa mãn
Trang 33Bước 2: Khởi tạo quần thể ban đầu: xác định bằng phương pháp tạo số ngẫu nhiên để
tạo giá trị cho các nhiễm sắc thể cho quần thể ban đầu Tùy vào cách biểu diễn của các nhiễm sắc thể mà ta chọn phương pháp tạo số ngẫu nhiên phù hợp
Bước 3: Đánh giá các nhiễm sắc thể bằng hàm thích nghi đã xác định ở bước 1 Trong
bước này, ngoài việc đánh giá các nhiễm sắc thể riêng rẽ, chúng ta còn có thể đánh giá
độ thích nghi của một nhiễm sắc thể hay cả quần thể Nếu một nhóm hay cả quần thể
có độ thích nghi "trung bình" (theo tiêu chí của từng trường hợp của người lập trình) thấp thì có thể loại nhóm nhiễm sắc thể hay quần thể đó ra khỏi quá trình di truyền
Bước 4: Thực hiện quá trình di truyền thông qua các cơ chế lai ghép và đột biến Có
thể thực hiện lần lượt hai quá trình này hoặc thực hiện đồng thời theo các phương pháp
đã đề cập bên trên Trong quá trình thực hiện thuật toán di truyền, giai đoạn này là giai đoạn mà mỗi người có thể thực hiện theo những phương pháp rất khác nhau Giai đoạn này cũng là giai đoạn quyết định tới sự thành công của thuật toán Người thực hiện cũng có thể đưa ra những phương thức tiến hành lai ghép hay đột biến mới trong giai đoạn này Trong quá trình thực hiện, để có được một bộ các thông số lai ghép hay đột biến hiệu quả, người lập trình thường phải trải qua nhiều bước tính toán thử Khâu này phụ thuộc nhiều vào kinh nghiệm và kỹ năng tính toán của người lập trình
Bước 5: Tạo quần thể mới bằng quá trình chọn lọc Quá trình này cũng dựa vào đánh
giá các nhiễm sắc thể thông qua hàm thích nghi Cá thể nào có độ thích nghi cao sẽ được giữ lại cho thế hệ kế tiếp Cũng giống như ở bước 3, chúng ta có thể sử dụng những hàm thích nghi phù hợp để đánh giá từng cá thể đơn lẻ hoặc cả một nhóm các
cá thể Sau quá trình này, nhóm cá thể nào thỏa mã tiêu chuẩn đánh giá với mức độ từ cao xuống thấp sẽ được đưa vào quần thể mới
Bước 6: Đánh giá quần thể vừa có được trong bước 5 Thông thường có hai tiêu chí để
dừng quá trình di truyền tại bước này Thứ nhất, độ thích nghi của từng cá thể và cả quần thể thỏa mãn một điều kiện hội tụ đã được đặt ra ban đầu Các điều kiện hội tụ thể hiện mức độ chấp nhận được của kết quả tìm được Thứ hai, quần thể mới tạo thành là quần thể ở thế hệ thứ (N+1) với N là số thế hệ dự định tính toán đã giả thiết ban đầu Trong khi thực hiện các quá trình di truyền, những người tính toán có thể đưa
ra những tiêu chí riêng để dừng quá trình di truyền Các tiêu chí đưa ra góp phần quyết định tới thành công của thuật toán
Trang 34Chương 3 ỨNG DụNG GIảI THUậT DI TRUYềN Để GIảI QUYếT
BÀI TOÁN LậP LịCH TRONG QUảN LÝ Dự ÁN PHầN MềM
3.1 Phát biểu bài toán
Bài toán lập lịch với các điều kiện ràng buộc tài nguyên được phát biểu như sau: Dữ liệu đầu vào bài toán là tập hợp các công việc, tập hợp tài nguyên và bảng đánh giá hiệu suất thực hiện công việc với các tài nguyên tương ứng (con người, máy móc, ).Giả sử số lượng tài nguyên thực hiện dự án là có hạn Các công việc có quan hệ với nhau theo thứ tự thực hiện công việc, công việc nào cần thực hiện trước, công việc nào thực hiện sau (thứ tự này được chỉ định trong bảng phân rã công việc) Cần tìm ra một cách để gán các tài nguyên thực hiện các công việc sao cho tổng thời gian thực hiện dự
án là ngắn nhất
Dự án được lập kế hoạch, được phân tích chi tiết các đầu việc trong bảng phân rã công
việc Dự án được phân chia thành một tập hợp các công việc 1,end) Tập hợp công việc T chứa các công việc i với i thỏa mãn 0 <= i <= n-1 (n là số lượng công việc trong dự án) và hai công việc start và end.Hai công việc startvà
T=(start,0,1,2, ,n-endlà hai công việc giả dùng để biểu hiện công việc bắt đầu và công việc kết thúc, hai
công việc này không chiếm dụng tài nguyên và thời gian hoàn thành là 0.n là số lượng công việc trong dự án Các công việc trong tập T được đánh chỉ số từ 0 tới n-1
Các công việc có sự ràng buộc với nhau, khi kết thúc công việc i thì mớicó thể bắt đầu công việc j, loại ràng buộc này ký hiệu là FS (finish-start) Ngoài loại ràng buộc FS các công việc còn có các quan hệ ràng buộc FF (finish-finish) tức là công việc i và j kết thúc khi cả hai cùng kết thúc, ràng buộc SS(start-start) tức là công việc i và j cùng bắt đầu tại một thời điểm, ràng buộc SF(start-finish) tức là công việc i bắt đầu thì công việc j có thể kết thúc Để bài toán trở nên đơn giản ta giả định các công việc trong dự
án chỉ có một loại ràng buộc là FS(finish-start), việc giả định này không hề làm mất đi tính tổng quát của bài toán, nếu áp dụng cả 4 loại ràng buộc thì chỉ làm tăng độ phức tạp tính toán khi gán tài nguyên vào thực hiện công việc mà bản chất việc tính toán
này là giống nhau.Với mỗi một công việc jcó một tập hợp Predj mà các phần tử của nó
là các công việc phải kết thúc trước khi công việc j bắt đầu Các phần tử thuộc tập hợp
Predj được gọi là các công việc trực tiếp phải hoàn thành khi bắt đầu công việc j, phía trước công việc j này còn có thể có nhiều công việc cần hoàn thành khác Để bắt đầu
công việc j thì cần phải kết thúc các công việc trong tập Predj Với mọi j sao cho 0<= j
<=n thì tập Predjluôn khác rỗng Công việc i là công việc trước j nếu như tồn tại [6]
i0,i1,…,ik,ik+1 với i0=i, ik+1 = j,
Trang 35ib 𝑃𝑟𝑒𝑑𝑖
𝑏 +1 , b=0,1,…k
Với mỗi một công việc sẽ có sự ràng buộc với các loại nguồn lực thực hiện công việc
đó Ứng với mỗi một công việc sẽ chiếm dụng một số loại tài nguyên, để hoàn thành công việc này thì các tài nguyên cần một thời gian t Trong bài toán này các tài nguyên thực hiện công việc trong dự án bị hạn chế về số lượng do vậy công việc i có thể đã tiến hành tại thời điểm t nhưng do tại thời điểm này không tập hợp đủ nguồn lực nên công việc i phải tiến hành muộn hơn thời điểm t
Khi tiến hành quản trị dự án, bộ phận quản trị sẽ phải đưa ra được bảng phân rã các công việc, thứ tự trước, sau của các công việc, công việc nào thực hiện trước, công việc nào thực hiện sau Và để thực hiện một công việc thì cần những loại nguồn lực nào, số lượng nguồn lực theo loại nguồn lực tương ứng là bao nhiêu Và chỉ định rõ để hoàn thành công việc này cần mất thời gian là bao lâu Tiếp theo cần xác định tổng các loại nguồn lực hiện có phục vụ cho dự án, phải xác định chi tiết số lượng nguồn lực ứng với loại nguồn lực là bao nhiêu Để vấn đề đơn giản ta giả sử trong cùng loại nguồn lực thì các nguồn lực đồng nhất với nhau về khả năng đáp ứng công việc
Sau khi có kết quả phân tích các công việc, nguồn lực thực hiện có thể tiến hành áp dụng giải thuật di truyền để tìm ra cách thức sắp xếp nguồn lực thực hiện các công việc trong dự án làm sao cho thời gian thực hiện dự án là thấp nhất Các bước áp dụng giải thuật di truyền như sau,ta định nghĩa Gene là số thứ tự của một công việc Gene
có giá trị từ 0 đến n-1 Số nguyên n là số lượng các công việc tương ứng trong bảng
phân rã công việc Dùng mã hóa tổ hợp để mã hóa dữ liệu một cá thể Mỗi cá thể có
nhiễm sắc thể là một mảng các số nguyên từ 0 đến n-1, các phần tử của mảng này có
giá trị khác nhau, không được trùng nhau Mỗi nhiễm sắc thể là mã hóa sự xắp xếp thứ
tự thực hiện các công việc trong dự án Thứ tự sắp xếp công việc này phải thỏa mãn trình tự thực hiện công việc trong bảng phân rã công việc
Khi lập kế hoạch cần xác định thời gian bắt đầu và kết thúc dự án Và chỉ định thời gian làm việc của dự án, trong bài nghiên cứu này ta chỉ định công việc làm theo giờ hành chính với tổng số thời gian là 8 tiếng một ngày Ngày làm việc từ thứ 2 đến thứ 6 hàng tuần Các ngày nghỉ cuối tuần: thứ 7, chủ nhật.Khi có các dữ liệu này ta sẽ xác định được tổng thời gian để hoàn thành từng công việc trong dự án, qua đó xác định
được tổng thời gian hoàn thành dự án Muốn hoàn thành công việc i cần phải tập hợp
đủ tài nguyên để thực hiện công việc i Nguồn lực thực hiện dự án là hạn chế nên thời gian bắt đầu làm công việc i có thể phải tiến hành chậm lại vì phải tập hợp đủ nguồn lực mới có thể bắt đầu công việc i,có thể các nguồn lực này vẫn đang thực hiện các công việc phía trước công việc i Ứng với một trình tự thực hiện các công việc ta sẽ có
tổng thời gian là khác nhau.Gọi T là tổng số giờ thực hiện dự án ta có giá trị hàm thích nghi là 1/T Giá trị hàm thích nghi càng lớn khi tổng thời gian thực hiện dự án càng
Trang 36nhỏ Khi trình tự thực hiện công việc không thỏa mãn với thứ tự trước sau của công việc theo bảng phân rã công việc thì ta gán giá trị hàm thích nghi trong trường hợp này
là 0 Những cá thể có giá trị hàm thích nghi bằng 0 là cá thể tồi nhất sẽ được loại bỏ trong thế hệ tiếp theo
Để nhanh chóng tìm ra cá thể tốt nhất ta áp dụng thêm kỹ thuật tìm kiếm địa phương (local search) và giữ lại cá thể tốt sang thế hệ tiếp theo.Sau khi áp dụng các toán tử đột biến, lai tạo và chọn lọc ta sẽ được quần thể mới, tiếp tục áp dụng tìm kiếm địa phương trên quần thể này bằng cách chọn ra một cá thể ngẫu nhiên trong quần thể, sau
đó tiến hành đột biến cá thể này, quá trình đột biến sẽ dừng khi tìm được một cá thể mới có giá trị hàm thích nghi tốt hơn cá thể cũ hoặc số lần đột biến vượt quá n (n là nguyên dương cho trước), sau khi tìm được cá thể mới tốt hơn tiến hành thay thế cá thể cũ bằng cá thể mới này Việc áp dụng kỹ thuật tìm kiếm cục bộ tương ứng với việc tìm kiếm xung quanh cá thể được lựa chọn cá thể có độ thích nghi tốt hơn Còn kỹ thuật giữ lại phần tử tốt nhất của thế hệ trước sang thế hệ sau sẽ đảm bảo cá thể tốt nhất sẽ không bị mất đi Áp dụng hai kỹ thuật này sẽ giúp tìm ra cá thể tốt nhất nhanh hơn
Để hiểu rõ hơn bài toán có thể xem qua ví dụ đơn giản sau đây Xét tập hợp các công
việc gồm 8 công việc có mỗi quan hệ công việc trước sau như hình vẽHình 3.1 Ví dụ bảng phân rã gồm 8 công việc được đánh chỉ số từ 0 tới 7 trang 36
Hình 3.1 Ví dụ bảng phân rã gồm 8 công việc được đánh chỉ số từ 0 tới 7
Các công việc giả startvà endlà công việc giả, thời gian hoàn thành hai công việc này
là 0 Những công việc không có công việc trực tiếp phía trước thì sẽ có nối với công
việc giả startở sơ đồ trên chỉ có công việc có chỉ số 0 là không có công việc trực tiếp phía trước, công việc 0 được nối với công việc giả start bằng một mũi tên từ start tới
0 Những công việc không có công việc trực tiếp phía sau được nối với endở đây có
một công việc với chỉ số là 7 thỏa mãn Với đồ thị quan hệ công việc như trên thì có
Trang 37rất nhiều cách thực hiện công việc theo thứ tự nhất định mà vẫn đảm bảo mối quan hệ trước sau của các công việc, ví dụ có thể thực hiện công việc theo thứ tự như sau mà vẫn đảm bảo thứ tự công việc trước sau của các công việc:
Cách 1:0 1 2 3 4 5 6 7 Cách 2:0 1 4 2 3 6 5 7 Cách 3:0 2 1 5 4 3 6 7 Cách 4:0 2 3 6 1 4 5 7 Cách 5:0 3 6 2 1 5 4 7
Bên cạnh đó có những thứ tự thực hiện công việc mà không thỏa mãn thứ tự công việc
trước, công việc sau, ví dụ thực hiện công việc theo thứ tự: 0 5 7 1 2 3 4 6, thứ tự này không thỏa mãn thứ tự công việc trong bảng phân rã công việc do công việc 5 thực hiện trước công việc 1 và 2, công việc 7 thực hiện trước công việc 4 và 6
Định nghĩa đường TaskLinecủa công việc ilà đường đi qua công việc theo đồ thị bắt đầu từ điểm start qua công việc i và đi qua điểm kết thúcend, tập hợp các công việc
mà đường này đi qua và thỏa mãn thứ tự công việc trước, công việc sau là các điểm
của đường TaskLine Xác định đường TaskLinecủa công việc i sẽ giúp ích cho thuật toán đột biến cá thể Ví dụ khi i là 5 thì đường TaskLine của 5 là tập hợp gồm các
điểm:0 2157 Khi tiến hành đột biến cá thể 0 2 1 5 4 3 6 7tại vị trí số 3 (tương ứng giá trị là 5), cá thể này là một mảng số nguyên không âm như sau:
Giá trị thể hiện chỉ số công việc 0 2 1 5 4 3 6 7
Vị trí công việc trong mảng 0 1 2 3 4 5 6 7 Hình 3.2 Biểu diễn thứ tự công việc bằng mảng một chiều nguyên không âm
Giả sử điểm đột biến xẩy ra tại vị trí số 3 có giá trị là 5 Đột biến là đổi chỗ giá trị 5 với giá trị khác trong mảng Như vậy từ vị trí có giá trị là 5lùi về phía trước gặp ngay
1thuộc đường TaskLine của 5do vậy 5không thể đổi chỗ cho 1 và các phần tử trước
1vì nếu đổi chỗ sẽ vi phạm thứ tự thực hiện công việc Từ đâyxác định được điểm giới
hạn phía trước của 5 là vị trí số 3 Tiếp tục từ vị trí số 3 tiền về phía sau đến vị trí số 7
có giá trị là 7, giá trị này thuộc đường TaskLine của 5nên không thể đổi chỗ 5với các
vị trí từ vị trí 7 trở đi, từ đây xác định được điểm giới hạn phía sau là vị trí số 6.Như
vậy nếu chọn vị trí đột biến là vị trí số 3 (tương ừng với giá trị là 5) thì chỉ có thể đổi
chỗ vị trí 3 này với các vị trí từ 3 tới 6 để sinh ra nhiễm sắc thể mới mà không vi phạm
thứ tự thực hiện công việc trước, công việc sau thể hiện trong Hình 3.1
Định nghĩa preTask, preTaskcủa điểm i(viết tắt là preTask i)là tập hợp các chỉ số
công việc thuộc các vị trí trong mảng, các vị trí này nhỏ hơn i thuộc trong khoảng từ 0
tới i-1với i > 0 Với vị trí 0 thì hiển nhiên tập preTasklà rỗng Như vậy tại vị trí số 3
biểu diễn bởi Hình 3.2 tập preTask3 = {0,2,1} Tập preTaskcủa vị trí i được dùng để
xác định tập hợp các công việc có thể đưa vào vị trí isao cho thứ tự các công việc biểu
diễn bởi mảng không vi phạm thứ tự công việc trước, công việc sau của bảng phân rã
Trang 38công việc, tập các công việc này gọi là compatibleTasktại vị trí i viết tắt là
compatibleTaski
Định nghĩa compatibleTask, compatibleTasktại vị trí i (viết tắt là
compatibleTaski )là tập hợp các công việc có thể đưa vào vị trí i sao cho mảng thể
hiện thứ tự công việc không vi phạm ràng buộc công việc trước, công việc sau trong bảng phân rã công việc
Như vậy tập compatibleTaskigồm các công việc không thuộc preTaski và các công
việc này phải có tập các công việc trực tiếp trước nó là tập con của preTaskihoặc các
công việc không có công việc trực tiếp trước nó Tại vị trí i = 0 thì hiển nhiên tập này
bao gồm toàn bộ các công việcmà nó không có công việc trực tiếp phía trước Ví dụ
trong Hình 3.2 trang 37, tại vị trí i = 3 ta có preTask 3 = {0,2,1} và compatibleTask3
= {3,4,5}, phân tích cụ thể như sau: 3 có công việc phía trước là 0 thuộc preTask3, 4
có công việc trực tiếp phía trước là 1 thuộc preTask3, 5 có 2 công việc trực tiếp phía
trước là 1 và 2 đều thuộc preTask3, còn 6 và 7 không có công việc trực tiếp phía trước
thuôc preTask3nên không được chọn
Giải thuật di truyền được áp dụng trong bài toán là tìm ra một hoán vị tổ hợp thể hiện thứ tự thực hiện công việc sao cho tổng thời gian hoàn thành dự án là nhỏ nhất
3.2 Thuật toán
Một yếu tố quan trọng nhất của các thuật toán khởi tạo cá thể, đột biến, lai tạo chéo là các nhiễm sắc thể( một thứ tự thực hiện công việc) sinh ra bởi các thuận toán này phải thỏa mãn thứ tự thực hiện công việc trong bảng phân rã công việc
3.2.1 Thuật toán khởi tạo cá thể
Thuật toán dùng để khởi tạo ngẫu nhiên một cá thể Cá thể ở đây chính là mảng số nguyên không âm, giá trị các phần tử trong mảng là chỉ số các công việc trong dự án
Đầu vào:
- Bảng phân rã công việc thể hiện quan hệ công việc trước, công việc sau Các
công việc được đánh số từ 0 tới n-1 nlà tổngsố lượng công việc
Đầu ra:
- Mảng một chiều gồm n phần tử thể hiện thứ tự thực hiện công việc.Giá trị của phần tử của mảng chính là mã số công việc
Các bước thực hiện:
Khởi tạo mảng kiểu ushort (nguyên dương) có số phần tử là n gọi là
chromosome, mảng này biểu hiện một cá thể trong quần thể
Trang 39Lập tập hợp compatibleTaskcác phần tử có các công việc hoàn thành phía trước nằm trong preTask
Chọn ngẫu nhiên phần tử trong preTaskvà gán vào phần tử thứ i của mảng chromosome
Tăng i lên 1 và tiếp tục vòng lặp For
End For
Ví dụ áp dụng giải thuật để tạo các cá thể: Áp dụng giải thật khởi tạo cá thể với tập
hợp các công việc có thứ tự công việc trước, công việc sau thể hiện trong hình Hình
3.1 trang36, có tất cả 8 công việc tập hợp thực hiện công việc theo thứ tự được thể
hiện bằng mảng không âm một chiều có 8 phần tử, các giá trị của mảng nằm trong khoảng từ 0 tới 7 và là duy nhất trong mảng
Bước 1: với i = 0preTask0 = và compatibleTask0 = {0}, chọn một phần tử ngẫu
nhiên trong compatibleTask0 , chỉ có một phần tử do vậy 0 được chọn, mảng thể hiện thứ tự công việc như sau
Giá trị thể hiện chỉ số công việc 0
Vị trí công việc trong mảng 0 1 2 3 4 5 6 7
Bước 2: với i = 1preTask1 = {0} và compatibleTask1= {1,2,3}, chọn một phần tử
ngẫu nhiên trong compatibleTask1, giả sử 1 được chọn thì mảng thể hiện thứ tự công việc như sau
Giá trị thể hiện chỉ số công việc 0 1
Vị trí công việc trong mảng 0 1 2 3 4 5 6 7
Bước 3: với i = 2preTask2 = {0,1} và compatibleTask2= {2,3,4}, chọn một phần tử
ngẫu nhiên trong compatibleTask2, giả sử 2 được chọn thì mảng thể hiện thứ tự công việc như sau
Giá trị thể hiện chỉ số công việc 0 1 2
Vị trí công việc trong mảng 0 1 2 3 4 5 6 7
Bước 4: với i = 3preTask3 = {0,1,2} và compatibleTask3= {3,4,5}, chọn một phần tử
ngẫu nhiên trong compatibleTask3, giả sử 4 được chọn thì mảng thể hiện thứ tự công việc như sau
Giá trị thể hiện chỉ số công việc 0 1 2 4
Vị trí công việc trong mảng 0 1 2 3 4 5 6 7
Bước 5: với i = 4preTask4 = {0,1,2,4} và compatibleTask4= {3,5}, chọn một phần tử
ngẫu nhiên trong compatibleTask4, giả sử 3 được chọn thì mảng thể hiện thứ tự công việc như sau
Trang 40Giá trị thể hiện chỉ số công việc 0 1 2 4 3
Vị trí công việc trong mảng 0 1 2 3 4 5 6 7
Bước 6: với i = 5preTask5 = {0,1,2,4,3} và compatibleTask5= {5,6}, chọn một phần
tử ngẫu nhiên trong compatibleTask5, giả sử 6 được chọn thì mảng thể hiện thứ tự công việc như sau
Giá trị thể hiện chỉ số công việc 0 1 2 4 3 6
Vị trí công việc trong mảng 0 1 2 3 4 5 6 7
Bước 7: với i = 6preTask6 = {0,1,2,4,3,6} và compatibleTask6= {5}, chọn một phần
tử ngẫu nhiên trong compatibleTask6, chỉ có một phần tử do vậy 6 được chọn, mảng thể hiện thứ tự công việc như sau
Giá trị thể hiện chỉ số công việc 0 1 2 4 3 6 5
Vị trí công việc trong mảng 0 1 2 3 4 5 6 7
Bước 8: với i = 7 preTask7 = {0,1,2,4,3,6,5} và compatibleTask7 = {7}, chọn một
phần tử ngẫu nhiên trong compatibleTask7 , chỉ có một phần tử do vậy 7 được chọn, mảng thể hiện thứ tự công việc như sau
Giá trị thể hiện chỉ số công việc 0 1 2 4 3 6 5 7
Vị trí công việc trong mảng 0 1 2 3 4 5 6 7
Tại bước 8 ta được một mảng thứ tự thực hiện công việc thỏa mãn trình tự công việc trước, công việc sau của bảng phân rã công việc
3.2.2 Thuật toán đột biến cá thể
Đầu vào:
- Bảng phân rã công việcCpr thể hiện quan hệ công việc trước, công việc sau
Các công việc được đánh số từ 0 tới n-1 n là tổng số lượng công việc
Đầu ra:
- Mảng một chiều nguyên dương chromosome gồm n phần tử thể hiện thứ tự thực hiện công việc Giá trị của phần tử của mảng chính là mã số công việc
Các bước thực hiện:
- Chọn ngẫu nhiên điểm đột biếni từ 0 tới n (n là kích thước mảng chromosome)
- Khởi tạo danh sách một chiều nguyên dương có các giá trị của phần tử trong mảng là giá trị định danh của công việc, các công việc này là các công việc phía