Tình hình nghiên cứu trong nước

Một phần của tài liệu Song song hoá bài toán JSP trên một số môi trường tính toán song song và phân tán luận văn thạc sĩ (Trang 36)

6. Phương pháp nghiên cứu

1.2.2. Tình hình nghiên cứu trong nước

Ở nước ta hiện nay thì vấn đề lập lịch công việc vẫn đang được quan tâm và nghiên cứu phát triển, các công trình nghiên cứu về vấn đề này chủ yếu theo hướng nghiên cứu các thuật toán đã được nghiên cứu áp dụng ở ngoài nước để giải quyết

bài toán, từ đó tìm ra các phương án để cải tiến làm cho thuật toán tốt hơn, do đó bài toán lập lịch vẫn là vấn đề được chọn để nghiên cứu làm đề tài luận văn thạc sĩ hoặc tiến sĩ. Ngoài ra, bài toán lập lịch ở nước ta còn được áp dụng nhiều vào mục đích lập lịch thi, hoặc lập thời khóa biểu tại các trường đại học, lập kế hoạch sản xuất kinh doanh trong các doanh nghiệp.

1.2.3. Một số công trình tiêu biểu

 “A Branch and Bound and Simulated Annealing Approach for Job Shop

Scheduling”, công trình của tác giả Tan Hui Woon và Sutinah Salim công bố

vào năm 2004. Trong công trình này, thì nhóm tác giả đã nghiên cứu hai phương pháp giải quyết bài toán lập lịch bằng thuật toán nhánh cận và thuật toán mô phỏng luyện kim. [12]

Thuật toán nhánh cận (Branch and Bound)

Một số khái niệm cơ bản mà Tan Hui Woon và Sutinah Salim sử dụng trong thuật toán được quy định như sau:

- Một tập n={J1,J2,…, Jn) được xử lý thông qua m={M1, M2,…, Mm) máy tính. Tập các công việc xử lý trên một tập các máy tính thì được biểu diễn trên một đồ thị G mô tả như sau:

▪ Đồ thị G là một đồ thị có hướng, có N nút, và tập các cung A và B, G=(N, A, B).

▪ Một nút tương ứng với một công đoạn O(i, j)

▪ Cung liền nét trên tập A biểu thị cho tuyến đường của công việc

Arc (i,j) (k,j) thể hiện công việc j thực hiện trước sau đó mới thực hiện trên máy k (định nghĩa cho hai công đoạn của cùng một công việc)

▪ Cung nét rời trên tập B đại diện cho chuỗi công việc thực hiện trên một máy. Luôn tồn tại hai hướng của cung nhưng sẽ chỉ có 1 hướng được chọn trong một lịch trình khả thi. Lịch trình khả thi là lịch trình mà không chứa một chu trình có hướng bên trong.

Arc (i,j) (i,k) biểu thị O(i,j) thực hiện trước O(i,k) Arc (i,j) (i,k) biểu thị O(i,k) thực hiện trước O(i,j)

▪ Trọng số của cung là thời gian xử lý (Pij)

▪ Hai nút U và V là nút nguồn và nút đích. Chiều dài của cung từ nút U đến nút đầu tiên có giá trị là 0.

Ví dụ: ta có 3 công việc cần xử lý trên 4 máy, thứ tự và thời gian thực hiện của mỗi công việc trên máy được mô tả như bảng 1.3:

Bảng 1.3: Bảng mô tả công việc và trình tự thực hiện công việc 3 Công việc thứ tự các máy thực hiện Thời gian xử lý

1 1,2,3 p11=10, p21=8, p31=4

2 2,1,4,3 p22=8, p12=3, p42=5, p32=6

3 1,2,4 p13=4, p23=7, p43=3

Việc biểu diễn đồ thị có hướng G cho ví dụ trên như sau:

Đầu tiên ta có các nút là các O(i, j), thêm các cung liền nét trong tập A có hướng theo thứ tự thực hiện các máy như trong bảng 1.3 được đồ thị như hình 1.3:

Hình 1.3: Đồ thị G biểu diễn trình tự công việc thực hiện 2

sau đó thêm các cung nét rời trong tập B ta sẽ có được hình 1.3, độ dài các cung từ nút U đến nút đầu tiên có giá trị là 0.

Hình 1.4: Đồ thị biểu diễn trình tự công việc thực hiện 3

U 2,2 1,2 4,2 3,2 V 4,3 1,1 2,1 3,1 1,3 2,3 2,3 U 2,2 1,2 4,2 3,2 V 4,3 1,1 2,1 3,1 1,3 0 0 0

- Pij: là thời gian xử lý của công việc j trên máy i

- Due date (ký hiệu: dij): thời điểm quy định một công đoạn phải hoàn tất gọi là thời điểm đến hạn của một công việc

- Release time (ký hiệu: rij): thời điểm sẵn sàng để thực hiện công đoạn j trên máy i

- xijk: là một biến để ghi nhận có giá trị bằng 1 nếu công việc i thực hiện trước công việc j trên máy k, ngược lại thì có giá trị bằng 0

- Minimize Cmax: được gọi là makespan, đây là thời gian hoàn thành của tất cả công việc.

Thuật toán OFA

Thuật toán OFA giúp tạo ra lịch trình chủ động, thuật toán như sau: Bước 1: (Khởi tạo bài toán)

Tập Ω = {các công đoạn đầu tiên thực hiện của mỗi công việc} rij = 0 for all (i,j) ∈ Ω

(rij là thời gian bắt đầu sớm nhất của công đoạn O(i, j) trên tập Ω) Bước 2: (Chọn máy)

Tính t(Ω) = min(i,j)∈ Ω { rij + pij}

Chọn máy i* là máy có rij + pij nhỏ nhất để tiếp tục thực hiện Bước 3: (phân nhánh)

Tập Ω’ = { (i∗, j)|ri∗j <t(Ω) }

+ Trên tất cả (i∗, j) ∈ Ω’, mở rộng một phần lịch bằng cách lên lịch (i*,j) trên máy i*

+ Với mỗi (i*, j) được chọn thì ta tiến hành xóa (i*, j) khỏi tập Ω. + Thêm một công đoạn kế tiếp sau (i*, j) vào Ω.

Thuật toán thực hiện cho đến khi Ω rỗng, nếu Ω chưa rỗng thì quay lại bước 2 để thực hiện.

Điều kiện quan trọng dựa vào để tìm được lịch trình chủ động là bất đẳng thức:

ri*j < t(Ω).

Tìm đường đi giới hạn trong lịch trình khả thi

Với một lịch trình khả thi được biểu diễn bởi một đồ thị để tìm ra đường đi giới hạn này tương đương với tìm ra đường đi có chiều dài dài nhất từ U đến V trong đồ thị có hướng không có chu trình.

Một số khái niệm:

o Đặt rij là nhãn của nút (i, j) tương ứng với công đoạn O(i, j).

o Đặt IPij là tập các công đoạn kế cận trước của O(i, j), IPij chứa các nút có cung với điểm bắt đầu từ chính các nút đó đến điểm kết thúc là công đoạn O(i, j).

Thuật toán:

o Khởi đầu ru = 0 (nút nguồn có nhãn bằng 0) o repeat:

- Chọn một nút (i, j) mà nhãn của tất cả các nút trong IPi,j đã được tính.

- Với mỗi nút trong IPij tính: {nhãn của nút + chiều dài của cung từ nút này tới nút (i, j)} và đặt rij có giá trị lớn nhất trong các nút đã tính.

until (nhãn của nút V được tính)

Khi đó ta tìm được chiều dài dài nhất từ U đến V bằng rv , ta có nhãn rij được tính dựa vào chiều dài dài nhất của đoạn từ nút U đến nút (i, j) và thời gian bắt đầu sớm nhất có thể của công đoạn O(i, j).

Tính lower bound (LB)

Thuật toán:

Xét máy i:

o Tính rij cho tất cả các công đoạn O(i, j) của máy i

o Với tất cả (i, j) trên máy i tìm chiều dài dài nhất từ (i, j) đến nút V sau đó đặt lij có giá trị chiều dài vừa tìm được.

o Tính due date cho (i, j): dij = LB1 - lij + pij o Giải quyết vấn đề trên máy đơn như sau:

Công đoạn (i, j) có thời gian sẵn sàng thực hiện rij và thời điểm hoàn thành dij, tính rij và dij.

Tính Lmax o LB = LB1 + Lmax Tóm lại:

Với thuật toán này thì việc tìm kiếm trình tự tối ưu trên máy đơn bằng cách thêm vào các cung nét rời vào đồ thị con hiện tại và tìm makespan trên đồ thị mới. Tìm makespan ở đây nghĩa là tính LB. Tính LB có thể được lặp đi lặp lại cho đến khi tìm tất cả các nút trong cây đều đã có LB. Sau khi thuật toán kết thúc ta sẽ được một cây phân nhánh chứa các lịch trình thực hiện công việc.

Ví dụ: tìm lịch trình tối ưu để hoàn thành công việc sớm nhất như bảng 1.4: Bảng 1.4: Bảng mô tả công việc và trình tự thực hiện công việc 4 Công việc

(J1, J2, J3)

Thứ tự các máy thực hiện (M1, M2, M3) Thời gian xử lý

1 1, 3, 2 p11=3, p31=2, p21=3

2 2, 3 P22=2, p32=3

3 2, 1, 3 P23=2, p13=3, p33=4

Áp dụng thuật toán OFA, sau 8 giai đoạn thực hiện sẽ thu được một cây phân nhánh trong hình 1.5:

Hình 1.5: Cây phân nhánh liệt kê trình tự thực hiện các công việc

Từ cây phân nhánh này có thể xác định được LB sẽ có giá trị nhỏ nhất là 11. Như vậy lịch trình tối ưu là nhánh có giá trị LB = 11. Biểu đồ Gantt 1.6:

Biều đồ 1.6: Biểu đồ Gantt mô tả trình tự thực hiện công việc 2

Thuật toán mô phỏng luyện kim (simulated annealing)

Phương pháp được dựa trên một ngưỡng ngẫu nhiên và cơ chế của nó tương ứng với vật lý thống kê của quá trình luyện kim. Vật lý học mô tả luyện kim là quá trình nhiệt để thu được một chất rắn ở trạng thái năng lượng thấp. Trong giai đoạn

đầu tiên của quá trình nhiệt độ tăng lên mức tối đa để làm chất rắn tan ra, ở giai đoạn này các hạt của chất rắn nằm rải rác một cách ngẫu nhiên. Giai đoạn tiếp theo khi nhiệt độ giảm dần thì các hạt tự tổ chức lại theo một mô hình cấu trúc của chất rắn đó.

Trong thuật toán, một phương án ban đầu được chọn ngẫu nhiên. Sau đó các phương án kế tiếp được tạo ra dựa trên một số cấu trúc lân cận và thay đổi trong một mức năng lượng tính toán. Nếu mức năng lượng giảm so với ban đầu thì phương án hiện tại sẽ được thay thế bởi các lận cận được tạo ra. Một tình huống khác đó là nếu như năng lượng thu được nhiều hơn ban đầu thì các lân cận được tạo ra sẽ thay thế phương án hiện tại dựa vào một hàm tính xác suất Boltzmann như sau:

Pr (accepted) = Exp (−{E[j] − E[i]} /T)

Trong hàm trên thì E[j] là mức năng lượng vừa được tạo ra, còn E[i] là năng lượng ban đầu. T là tham số điều khiển, tương ứng với nhiệt độ trong quá quá trình luyện kim, Nếu ta đặt E[j] − E[i] là ∆E, thì hàm xác suất Boltzmann sẽ trở thành :

Pr (accepted) = EXP (−∆E/T)

Một giá trị ε được dùng để đo lường có thể khả năng có chấp nhận hay không chấp nhận sự thay thế bởi các lân cận hay không. Tại đây thì nhóm tác giả nghiên cứu và đã đưa ra nhận xét như sau: sự gia tăng nhiệt độ trong E nhỏ có nhiều khả năng được chấp nhận hơn so với sự gia tăng nhiệt độ trong E lớn. Bên cạnh đó khi T cao thì các lân cận được tạo ra đều hầu như đều được chấp nhận.

Ngoài ra, nhiệt độ ban đầu trong thuật toán mô phỏng luyện kim luôn ở mức cao để tránh trường hợp thuật toán bị kẹt trong một tối ưu địa phương. Thuật toán được tiến hành bằng cách tạo ra một số lượng nhất định các lân cận tại mỗi nhiệt độ, trong khi các thông số nhiệt độ giảm xuống dần, thì thuật toán này sẽ dẫn đến một lịch trình tối ưu gần.

Để áp dụng thuật toán mô phỏng luyện kim, đầu vào của bài toán là một đồ thị để biểu diễn các lịch trình công việc ban đầu tương tự thuật toán nhánh cận đã được mô tả ở trên.

Thuật toán:

Bước 1: Chọn giá trị nhiệt độ ban đầu lớn: T = T0 Bước 2: Chọn giá trị phù hợp cho tham số α : 0 < α < 1

Bước 3: Khởi tạo ngẫu nhiên một cấu hình trình tự các công việc khả thi ban đầu trong đồ thị

Bước 4: Đánh giá năng lượng khởi tạo E(i) Bước 5: Trong khi T nằm trong mức làm lạnh

- Thay đổi cấu hình lịch trình khả thi trong đồ thị bằng các cấu trúc lân cận

- Đánh giá năng lượng mới, E(j) từ cấu hình này và thay đổi kết quả ∆E.

Bước 6: Nếu ∆E < 0, thì cấu hình được chấp nhận

Bước 7: Nếu ∆E > 0, thì cấu hình được chấp nhân nếu như : - Pr(accepted) = EXP(−∆E/T) > ε

Bước 8: Cập nhật T, với T = αT

Bước 9: Lặp lại bước 5 đến bước 7 cho đến khi ∆E không đáng kể so với sự thay đổi nhỏ của T.

Ta có thể thay đổi cấu hình lịch trình khả thi hiện tại sang một cấu hình mới bằng cách đơn giản là thay đổi chiều của một trong các cung nét rời từ lịch trình ban đầu.

Ví dụ: Tìm lịch trình tối ưu để hoàn thành công việc sớm nhất như bảng 1.5: Bảng 1.5: Bảng mô tả công việc và trình tự thực hiện công việc 5 Công việc

(J1, J2, J3)

Thứ tự các máy thực hiện (M1, M2, M3) Thời gian xử lý

1 1, 3, 2 p11=3, p31=2, p21=3

2 2, 3 P22=2, p32=3

Đồ thị trong hình 1.6 biểu diễn trình tự công việc như bảng 1.5 như sau :

Hình 1.6: Đồ thị biểu diễn trình tự công việc thực hiện 4

Khởi tạo ngẫu nhiên một lịch trình thực hiện các công việc ban đầu của đồ thị trong hình 1.6 ta được đồ thị như hình 1.7:

Hình 1.7: Đồ thị biểu diễn trình tự công việc thực hiện 5 Đặt các giá trị T = 100, α =0.95 và ε =0.98.

Giai đoạn 0:

o Tính E : là đường đi dài nhất từ U đến V : T = 100, E(0) = 13 o Biểu đồ Gantt với E(0) = 13 được biểu diễn trong biểu đồ 1.7 :

Biểu đồ 1.7: Biểu đồ Gantt mô tả trình tự thực hiện công việc 3 3,1 1,3 U 2,2 3,2 V 3,3 1,1 2,1 2,3 0 0 0 3 2 3 3 4 3 2 2 1,1 2 3,1 1,3 U 2,2 3,2 V 3,3 2,1 2,3 0 0 0 3 2 3 3 4 3 2

Giai đoạn 1:

Tạo một lịch trình khả thi mới bằng cách thay đổi cách thay đổi chiều bất kỳ 1 cung trong đồ thị. Thay đổi chiều từ (2, 2) --- > (2, 3) thành (2, 3) --- > (2, 2).

Hình 1.8: Đồ thị biểu diễn trình tự công việc thực hiện 6 - T = αT = 100*0.95 = 95

- Biểu đồ Gantt :

Biểu đồ 1.8: Biểu đồ Gantt mô tả trình tự thực hiện công việc 4 - E(1) = 11

- ∆E = E(1) – E(0) = 11 – 13 = -2 <0

 Chấp nhận cấu hình này

Giai đoạn 2:

Tạo một lịch trình khả thi mới bằng cách thay đổi cách thay đổi chiều bất kỳ 1 cung trong đồ thị trong hình 1.8. Thay đổi chiều từ (3, 2) --- > (3, 1) thành (3, 1) --- > (3, 2). 3,1 1,3 U 2,2 3,2 V 3,3 1,1 2,1 2,3 0 0 0 3 2 3 3 4 3 2 2

Hình 1.9: Đồ thị biểu diễn trình tự công việc thực hiện 7 - T = αT = 0.95 * (95) = 90.25

- Biểu đồ Gantt :

Biểu đồ 1.9: Biểu đồ Gantt mô tả trình tự thực hiện công việc 5 - E(2) = 12

- ∆E = E(2) – E(1) = 12 – 11 = 1

- Pr(accepted) = exp(−∆E/T) = exp(−1/90.25) = 0.9890 >ε - Pr(accepted) > ε

 Chấp nhận cấu hình này

Giai đoạn 3:

Tạo một lịch trình khả thi mới bằng cách thay đổi cách thay đổi chiều bất kỳ 1 cung trong đồ thị trong hình 1.9. Thay đổi chiều từ (3, 2) --- > (3, 3) thành (3, 3) --- >(3,2). 2 3,1 1,3 U 2,2 3,2 V 3,3 1,1 2,1 2,3 0 0 0 3 2 3 3 4 3 2

Hình 1.10: Đồ thị biểu diễn trình tự công việc thực hiện 8 - T = αT = 0.95 * (90.25) = 85.7375

- Biểu đồ Gantt :

Biểu đồ 1.10: Biểu đồ Gantt mô tả trình tự thực hiện công việc 6 - E(3) = 14

- ∆E = E(3) – E(2) = 14 – 12 = 2

- Pr(accepted) = exp(−∆E/T) = exp(−2/85.7375) = 0.9769 <ε - Pr(accepted) < ε

 Cấu hình này không được chấp nhận.

Do cấu hình tại giai đoạn này không được chấp nhận nên sẽ quay lại giai đoạn 2 và bắt đầu chọn ngẫu nhiên một cấu hình khác để thực hiện. Tuy nhiên không có nhiều sự thay đổi khác biệt so với giai đoạn 3, vì vậy đây gọi là quá trình luyện kim. Nếu như bắt đầu chọn cấu hình khác từ giai đoạn 0, thì có thể sẽ phải trải qua nhiều hoặc ít giai đoạn hơn thì mới có được lịch trình tối ưu. Sự thay đổi năng lượng E trong ví dụ được mô tả trong bảng 1.6 :

2 3,1 1,3 U 2,2 3,2 V 3,3 1,1 2,1 2,3 0 0 0 3 2 3 3 4 3 2

Bảng 1.6: Bảng mô tả sự thay đổi E qua từng giai đoạn

Giai đoạn E ∆E T Xác suất

Boltzmann

0 13 100.00

1 11 -2 95.00

2 12 1 90.25

3 14 2 85.7375 0.9769

Từ bảng 1.6, với E = 11 ở giai đoạn 1 nhỏ nhất nên sẽ thu được một lịch trình tốt nhất của giai đoạn này như biểu đồ 1.11 :

Biểu đồ 1.11: Biểu đồ Gantt mô tả trình tự thực hiện công việc 7 Nhận xét: Với công trình nghiên cứu này, mà cụ thể đưa ra hai ví dụ áp dụng thuật toán nhánh cận và mô phỏng luyện kim để giải bài toán thì Tan Hui Woon và Sutinah Salim đã nêu bật được sự khác biệt giữa hai thuật toán. Thuật toán nhánh cận sẽ tìm ra lịch trình tối ưu trải qua 8 giai đoạn thực hiện. Thuật toán mô phỏng

Một phần của tài liệu Song song hoá bài toán JSP trên một số môi trường tính toán song song và phân tán luận văn thạc sĩ (Trang 36)

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

(115 trang)