Thuật toán nhánh cận cải tiến

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 96 - 100)

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

3.2.3.Thuật toán nhánh cận cải tiến

Trong quá trình triển khai thuật toán tuần tự, tác giả nhận thấy có một số đặc điểm có thể cái tiến lại để giảm bớt thời gian tìm kiếm. Cụ thể tác giả tiến hành cải tiến thuật toán phân nhánh từ thuật toán phân nhánh được nêu ở mục 3.1.2, thuật toán phân nhánh nêu ở 3.1.2 thực hiện công việc phân nhánh để tạo ra cây phân cấp từ tập Ω’, và thuật toán này sẽ tiến hành loại bỏ những nhánh cây chắc chắn không khả thi dựa vào điều kiện ri∗j < t(Ω) để xác định các phần tử trong tập Ω’.

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

Thuật toán phân nhánh cải tiến đưa ra, ngoài việc loại bỏ các nhánh không khả thi như thuật toán phân nhánh ban đầu thì thuật toán còn đưa thêm một điều kiện để xét và rút bớt việc thực hiện phân nhánh tiếp tục trong quá trình phân

nhánh. Điều kiện này phụ thuộc vào giá trị cận được tính.

Thuật toán phân nhánh cải tiến:

- Ω = {Tập các công đoạn bắt đầu} - rij = 0 cho các (i, j) ∈ Ω

- minLB = +∞ Do

Do

If (Ω ≠ ∅) then

o t(Ω) = min{rij + pij}

o Chọn máy i* là máy có rij + pij nhỏ nhất để tiếp tục thực hiện o 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 tính cận cho nút (i*,j)

▪ If minLB < Giá trị cận (i*, j) then

o Bỏ qua nhánh này và không xét các phần tử kế tiếp nữa

o Quay lại xét những phần tử còn lại chưa được duyệt trong tập Ω’

o Thoát khỏi vòng lặp while + Xóa (i*, j) khỏi tập Ω

+ Thêm một công đoạn kế tiếp sau (i*, j) vào Ω Else

If (minLB > chi phí thực hiện của nhánh) Begin

minLB = chi phí thực hiện của nhánh End if

End If While (Ω ≠ ∅)

While (Ω’ còn phần tử chưa được duyệt )

Mô tả thuật toán: Việc phân nhánh của thuật toán cải tiến tương tự như thuật toán

phân nhánh ban đầu chỉ khác biệt duy nhất ở một điểm là sau khi mở rộng được một nhánh (tìm được một lịch trình khả thi) thì sẽ lưu chi phí của lịch trình thực hiện vào minLB, Sau đó tiếp tục bắt đầu phân nhánh từ các phần tử kế tiếp chưa duyệt trong tập Ω’ đến hết nhánh, với mỗi nút mở rộng trên nhánh tiến hành so sánh giá trị cận của nút đó với minLB, nếu như minLB nhỏ hơn giá trị cận của nút thì sẽ loại bỏ nhánh đó đi và quay lại mở rộng một nút khác chưa duyệt trong tập Ω’.

Ví dụ:

Ta có tập Ω’={(2, 2), (3, 1)}, cả 2 phần tử này đều chưa duyệt. Tiến hành phân nhánh nút (2, 2) và tính LB trên các nút, ta được nhánh cây như hình 3.1:

Hình 3.1: Nhánh mở rộng từ nút (2, 2) Sau khi đã mở rộng nhánh xong ta gán giá trị:

minLB=(chi phí lịch trình thực hiện tại nút (3, 3) ) =12

Tiếp tục mở rộng nhánh từ phần tử chưa duyệt trong tập Ω’, trong tập Ω’ còn phần tử (3, 1) chưa được duyệt. Tiến hành mở rộng nhánh từ (3, 1) và tính LB. Trong quá trình mở rộng từng nút của nhánh nếu phát hiện một nút nào đó có LB mà lớn hơn minLB thì kết thúc việc mở rộng nhánh. Trong hình sau khi tính được LB của nút (2, 1) = 13 > minLB, thì thuật toán sẽ ngừng mở rộng trên nhánh này.

11 11 11 12 12 12 12 12

Hình 3.2: Mở rộng nhánh từ (3, 1), LB > minLB

Ngược lại trong trường hợp LB của (3,1) và các nút được mở rộng từ (3, 1) mà có LB nhỏ hơn hoặc bằng minLB thì sẽ duyệt hết nhánh. Sau khi đã duyệt hết nhánh nếu chi phí lịch trình thực hiện nhỏ hơn minLB thì sẽ gán minLB bằng giá trị chi phí này. Trong hình 3.3 do các nút được mở rộng từ (3, 1) đều có LB < minLB nên thuật toán sẽ mở rộng đến hết nhánh, ngoài ra do chi phí lịch trình thực hiện = 11 < minLB = 12 nên sẽ cập nhật lại minLB = 11, và nếu trong tập Ω’ vẫn còn phần tử chưa duyệt thì trong quá trình mở rộng nhánh sẽ so sánh minLB với giá trị LB các nút kế tiếp được mở rộng từ nhánh. 11 11 11 12 12 12 12 12 12 12 13

Hình 3.3: Mở rộng nhánh từ (3, 1), LB < minLB

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 96 - 100)