Phát biểu bài toán

Một phần của tài liệu Giải thuật di truyền và ứng dụng trong quản lý dự án phần mềm (Trang 34)

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 T=(start,0,1,2,...,n- 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 startend.Hai công việc start

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]

ib𝑃𝑟𝑒𝑑𝑖

𝑏 +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

nhỏ. 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ó

0 1 2 3 4 5 6 7 start end

rấ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 12, công việc 7 thực hiện trước công việc 46.

Đị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 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à preTaski)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ã

cô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ó preTask3 = {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.

Một phần của tài liệu Giải thuật di truyền và ứng dụng trong quản lý dự án phần mềm (Trang 34)

Tải bản đầy đủ (PDF)

(110 trang)