BÀI TỐN LẬP LỊCH THI CÔNG CÔNG TRÌNH

6 320 0
Tài liệu đã được kiểm tra trùng lặp
BÀI TỐN LẬP LỊCH THI CÔNG CÔNG TRÌNH

Đang tải... (xem toàn văn)

Thông tin tài liệu

BÀI TỐN LẬP LỊCH THI CÔNG CÔNG TRÌNH I. Bài tốn. Việc thi công một công trình lớn được chia ra làm n công đoạn, đánh số từ 1 đến n. có một số công đoạn mà việc thực hiện nó chỉ được tiến hành sau khi một số công đoạn nào đó đã hồn thành. Đối với mỗi công đoạn i biết t[i] là thời gian cần thiết để hồn thành nó (i = 1, 2, n). Ta có thể xay dựng đồ thị có hướng n đỉnh biểu diễn hạn chế về trình tự thực hiện các công việc sau: mỗi đỉnh của đồ thị tương ứng với một đồ thị, nếu công việc i phải được thực hiện trước công đoạn j thì trên đồ thị có cung (i, j), trọng số trên cung này được gán bằng t[i]. Thêm vào đồ 2 đỉnh 0 và n +1 tương ứng với hai sự kiện đặc biệt: đỉnh số 0 tương ứng với công đoạn Lễ khởi công, nó phải được thực thực hiện trước tất cả các công đoạn khác, và đỉnh n+1 tương ứng với công đoạn Cắt băng khánh thành công trình, nó phải thực hiện sau tất cả các công đoạn, với t[0] = t[n+1] = 0 (trên thực tế chỉ cần nối đỉnh 0 với tất cả đỉnh có bán bậc vào bằng 0 và nối tất cả các đỉnh có bán bậc ra bằng 0 với đỉnh n+1). Gọi đồ thị thu được là G. Rõ ràng bài tốn đặt ra vấn đề bài tốn tìm đường đi dài nhất từ đỉnh 0 đến tất cả các đỉnh còn lại trên đồ thị G. Do đồ thị G rõ ràng không chứa chu trình, nên để giả bài tốn đặt ra có thể áp dụng các thuật tốn được nêu ở trên. 1. Thí dụ: Ta có bảng các hạng mục được cho trong bảng dưới đây. Hạng mục t[i] Hạng mục phải hồn thành trước 1 2 3 4 5 6 7 8 10 15 10 30 1 2 15 20 10 1 2,3 4 2,3 5,6 5 1 1 : 0 0 1 2 : 10 0 3 : 0 0 1 2 4 : 25 0 1 2 4 5 : 55 0 3 6 : 10 0 1 2 4 5 : 55 Đưa về bài tốn đồ thị có hướng, các đỉnh là các hạng mục như hình sau: 1 (10) 2 5 (12) 8 (0) (10) 0 (15) (30) (12) 9 (0) (10) (15) (15) (20) 3 4 6 7 10 (10) Cách giải quyết: * Thêm hai đỉnh 0 và đỉnh 9 ta thu được một đồ thị có hướng trong đó trọng số t[i] là cạnh xuất phát từ i * Tìm đường đi dài nhất thì - Đổi dấu trọng số - Tìm đường đi ngắn nhất xuất phát từ 0 Lặp V H 1 2 3 4 5 6 7 8 9 Ktạo 0 0,0 0,∞ 0,0 0, ∞ 0, ∞ 0, ∞ 0, ∞ 0, ∞ 0, ∞ 1 * 1,-10 0,0 0, ∞ 0, ∞ 0, ∞ 0, ∞ 0, ∞ 0, ∞ 2 * 0,0 2,-25 0, ∞ 2,-25 0, ∞ 0, ∞ 0, ∞ 3 * 2,-25 0, ∞ 2,-25 0, ∞ 0, ∞ 0, ∞ 4 * 4,-25 2,-25 0, ∞ 0, ∞ 0, ∞ 5 * 2,-25 5,-67 5,-67 0, ∞ 6 * 5,-67 5,-67 0, ∞ 7 * 5,-67 7,-87 8 * 7,-87 9 * Chương trình sử dụng thuật tốn Dijkstra để tình thời gian các công việc bắt đầu và kết thúc dự án. Chương trình thi công công trình không sử dụng trực tiếp thuật tốn này mà còn phụ thuộc vào các công việc làm đầu tiên, vì vậy công việc đầu tiên là ta phải xác định công việc nào là công việc đầu tiên, việc xác định công việc đầu tiên cũng rất đơn giản, khi ta nhập số liệu thì công việc đầu tiên thì không có công việc nào làm trước nó. Để giải bài tốn trên ta có thể dùng nhiều phương pháp. Nhưng trong đề tài này chúng tôi sử dụng thuật tốn Dijkstra. II. Thuật tốn Dijkstra. Thuật tốn Dijkstra được phát biểu như sau: Trong trường hợp trọng số trên các cung là không âm do Dijkstra đề nghị để giải bài tốn tìm đường đi ngắn nhất từ dỉnh s đến các đỉnh còn lại của đồ thị . Thuật tốn được xây dựng trên cơ sở gán cho các đỉnh các nhãn tạm thời. Nhãn của mỗi đỉnh cho biết cận trên của độ dài đường đi ngắn nhất từ s đến nó. Các nhãn này sẽ được biến đổi theo một thủ tục lặp, mà ở mỗi bước lặp có một nhãn tạm thời trở thành nhãn cố định. Nếu nhãn của một đỉnh nào đó trở thành cố định thì nó sẽ cho ta không phải là cận trên mà là độ dài đường đi ngắn nhất từ đỉnh s đến nó. Thuật tốn được mô tả như sau. Procedure Dijkstra; (* Đầu vào: Đồ thị có hướng G=(V, E) với n đỉnh s ∈ V là đỉnh xuất phát a[u, v], u, v ∈ V, ma trận trọng số Giả thiết: a[u, v] >= 0, u, v ∈ V Đầu ra: khoảng cách từ d(s) đến tất cả các đỉnh còn lại d[v], v ∈ V Truoc [v], v ∈ V, ghi nhận đỉnh trước v trong đường đi ngắn nhất từ s đến v *) Begin (* Khởi tạo *) for v ∈ V do Begin d[v] := a[s, v]; Truoc[v] := s; End; d[s] := 0; T := V \ {s} (*Tập các đỉnh có nhãn tạp thời *) (* Bước lặp*) while T <> 0 do Begin Tìm đỉnh u ∈ T thỏa mãn d[u] = min { d[z]: z ∈ T} T := T \ {u}; (*Cố định nhãn của đỉnh u*) For v ∈ T do (*Gán nhãn lại cho các đỉnh trong T*) If d[v] > d[u] + a[u, v] then Begin D[v] := d[u] + a[u, v] Truoc [v] := u; End; End; End; Định lý 1: Thuật tốn Dijkstra tìm được đường đi ngắn nhất trên đồ thị sau thời gian cớ O(n 2 ). Chứng minh: Trước hết ta chứng minh là thuật tốn tìm đường đi ngắn nhất từ đỉnh s đến các đỉnh còn lại của đồ thị. Giả sử rằng ở một bước lặp nào đó các nhãn cố định cho ta độ dài các đường đi từ s đến các đỉnh có nhãn cố định, ta sẽ chứng minh rằng ở lần lặp tiếp theo nếu đỉnh u * thu được nhãn cố định d(u * ) chính là độ dài đường đi ngắn nhất từ s đến u * . Ký hiệu S: là tập hợp có nhãn cố định còn S 2 là tập các đỉnh có nhãn tạm thời ở bước lặp đang xét. Kết thúc mỗi bước lặp nhãn tạm thời d(v) cho ta độ dài của đường đi ngắn nhất từ s đến v chỉ qua những đỉnh nằm hồn tồn trong tập S 1 . Giả sử rằng đường đi ngắn nhất từ s đến u * không nằm trong tập S 1 , tức là nó đi qua ít nhất một đỉnh của tập S 2 . Gọi z ∈ S 2 là đỉnh đầu tiên như vậy trên đường đi này . Do trọng số trên các cung là không âm, nên đoạn đường từ z đến u * có độ dài L > 0 và d(z) < d(u * ) – L < d(u * ). Bất đẳng thức này là mâu thuẫn với cách xác định u * là đỉnh có nhãn tạm thời nhỏ nhất. Vậy đường đi ngắn nhất từ đỉnh s đến u * phải nằm chọn trong S 1 , và vì thế d[u * ] là độ dài của nó. Do ở lầm lặp đầu tiên S 1 = {s} và sau mỗi lần lặp ta chỉ thêm vào S 1 một đỉnh u * nên giả thiết là d(v) cho độ dài đường đi ngắn nhất từ s đến v với mọi v ∈ S 1 là đúng với (1) Số phần tử:= số đỉnh -1;i:=1; i < đnguồn Tập đỉnh[i]:=i;Đđ-đến[i]:=kc[đnguồn, i];Đđ- trực tiếp đến[i]:=đnguồn;i:=i+1; i:=đnguồn +1 i số đỉnh Tập đỉnh[i]:=i;Đđ-đến[i]:=kc[đnguồn, i];Đđ- trực tiếp đến[i]:=đỉnh nguồn;i:=i+1; Bắt Đầu N Y N Y (1) (3) (4)(2) j số đỉnh -2 Min:= đđ-đến[đỉnh[1]];Vị trí :=1; i k Đđ-đến[đỉnh[i]] <min; Min:= đđ-đến[đỉnh[i]];Vị trí :=i; i:=i+1 Đỉnh xét:=đỉnh[vị trí];Đỉnh[vị trí]:=đỉnh[spt];Spt:=spt-1;i:=1 i spt Y N Y N Y N Y N bước lặp đầu tiên. Theo qui nạp suy ra thuật tốn cho đường đi ngắn nhất từ s đến mọi đỉnh của đồ thị. Bây giờ ta đánh giá số phép tốn cần thực hiện theo thuật tốn. Ở mỗi bước lặp để tìm ra đỉnh u cần thực hiện O(n) phép tốn, và để gán nhãn lại cũng phải thực hiện một số lượng phép tốn cũng la O(n). Thuật tốn phải thực hiện n- 1 bước lặp. Vậy thời gian tính tốn của thuật tốn là cỡ O(n 2 ). Thí dụ: Tìm đường đi ngắn nhất từ đỉnh 1 đến các đỉnh còn lại của đồ thị ở hình dưới: (7) 2 3 6 (5) (1) (1) (2) (1) (1) (4) 1 (2) 4 (3) 5 Minh họa thuật tốn Dijkstra Kết quả tính tốn được trình bày trong bảng dưới đây. Bước lặp Đỉnh 1 Đỉnh 2 Đỉnh 3 Đỉnh 4 Đỉnh 5 Đỉnh 6 Khởi tạo 0, 1 1, 1* ∞, 1 ∞, 1 ∞, 1 ∞, 1 1 - - 6, 2 3, 2* ∞, 1 8, 2 2 - - 4, 4* - 7, 4 8, 2 3 - - - - 7, 4 5, 3 4 - - - - 6, 6 * - 5 - - - - - - Chú ý: 1) Nếu chỉ cần tìm đường đi ngắn nhất từ s đến t nào đó thì có thể kết thúc thuật tốn khi đỉnh t trở thành đỉnh có nhãn cố định. * Sơ đồ thuật tốn Dijkstra. (4)(2) X:=đỉnh[i] (3) Đđ-đến[x] > Đđ-đến[đỉnh xét]+ kc[đỉnh xét,x]; Đđ-đến[x]:=Đđ-đến[đỉnh xét + kc[đỉnh xét,x]];i:=i+1; Kết Thúc Y N III. Giải quyết bài tốn. Sau khi đưa bài tốn về dạng đồ thị có hướng, với mỗi đỉnh là một hạng mục ta có thể tiến hành như sau: - Chuyển thành ma trận trọng số có dạng a(i, j), với hạng mục i phải được thi công trước hạng mục j, giá trị của a(i, j) cho biết thời gian hạng mục i làm xong. - Đổi dấu giá trị của ma trận: ví dụ a(i, j) = -a(i, j) - Aùp dụng thuật tốn Dijkstra. - Kết thúc thuật tốn ta thu được d[u] . - Đổi dấu giá trị d[u] vừa thu được: d[v] = -d[u] - Giá trị d[v] chính là đường đi dài nhất từ 0 đến đỉnh v, khi đó d[v] cho ta thời điểm sớm nhất có thể bắt đầu thực hiện công đoạn v, nói riêng d[n+1] là thời điểm sớm nhất có thể cắt băng khánh thành tồn bộ công trình. Tương tự như trên ví dụ trên khi kết thúc tồn bộ dự án, kết quả thu được như sau: Giả sử lễ khởi công dự án là 1-1-2003 Thì sau 87 ngày (Giả sử đơn vị tính là ngày) ta có thể cắt băng khánh thành tồn bộ dự án. IV. Điều khiển nhân lực Các hoạt động không găng được phép xê dịch nhất định, nhất là khi FF ij = TF ij . Có thể sắp đặt chúng đáp ứng các yêu cầu khác nữa. Ngồi thời gian ra, chẳng hạn nhân lực, nguyên liệu, chi phí …Về mặt tốn học xử lý yêu cầu loại nào cũng vậy. Ở đây ta nói theo ngôn ngữ nhân lực chẳng hạn. Thí Dụ III.1. Giả sử nhân lực cho các hoạt động của dự án ở Thí Dụ II.2 đòi hỏi như sau: Hoạt động Số nhân công Hoạt động số nhân công (1, 2) 0 (4, 6) 2 (1, 3) 5 (4, 7) 1 (2, 4) 0 (5, 6) 2 (3, 4) 7 (5, 7) 5 (3, 5) 3 (6, 7) 6 Chú ý rằng tại thời điểm hai hoạt động cùng tiến hành thì số nhân lực cần là tổng hai số công nhân. Vì vậy cần phải sắp xếp khéo các hoạt động không găng để đòi hỏi tổng nhân công của cả dự án ít (tạm coi là mỗi người biết làm mọi việc). Việc sắp xếp tối ưu là phức tạp, đến nay ta sử dụng biểu đồ thời gian biểu diễn thêm nhân lực để sắp xếp theo trực quan. H.1.6 (a) biểu diễn tổng công nhân cần ở mỗi thời điểm nếu tất cả các hoạt động không găng xếp vào lúc sớm nhất có thể, còn H.1.6 (b) là tương ứng khi xếp vào lúc muộn nhất có thể. Hai biểu đồ này nên vẽ thẳng dưới H.1.5 nữa. Sắp đặt sớm nhất ở hình (a) cho thấy ở mỗi thời điểm dự án cần nhiều nhất là 10 công nhân còn ở sắp đặt muộn nhất (b) là 12 công nhân. Ở hai phương án này, số công nhân cần ở các thời điểm không đều. Theo trực quan ta chỉnh lại từ (a) như sau: chuyển hoạt động (4, 6) đếân thời điểm muộn nhất có thể, chuyển (4, 7) đến ngay sau khi (5, 7) kết thúc. Kết quả được vẽ lại ở biểu đồ H.1.7. (chú ý là hoạt động (1, 2) và (2, 4) không cần công nhân nên không cần vẽ.). . BÀI TỐN LẬP LỊCH THI CÔNG CÔNG TRÌNH I. Bài tốn. Việc thi công một công trình lớn được chia ra làm n công đoạn, đánh số từ 1 đến n. có một số công. 7,-87 9 * Chương trình sử dụng thuật tốn Dijkstra để tình thời gian các công việc bắt đầu và kết thúc dự án. Chương trình thi công công trình không sử dụng

Ngày đăng: 26/10/2013, 07:20

Hình ảnh liên quan

1. Thí dụ: Ta cĩ bảng các hạng mục được cho trong bảng dưới đây. - BÀI TỐN LẬP LỊCH THI CÔNG CÔNG TRÌNH

1..

Thí dụ: Ta cĩ bảng các hạng mục được cho trong bảng dưới đây Xem tại trang 1 của tài liệu.
Thí dụ: Tìm đường đi ngắn nhất từ đỉnh 1 đến các đỉnh cịn lại của đồ thị ở hình dưới:      (7) - BÀI TỐN LẬP LỊCH THI CÔNG CÔNG TRÌNH

h.

í dụ: Tìm đường đi ngắn nhất từ đỉnh 1 đến các đỉnh cịn lại của đồ thị ở hình dưới: (7) Xem tại trang 4 của tài liệu.
Kết quả tính tốn được trình bày trong bảng dưới đây. - BÀI TỐN LẬP LỊCH THI CÔNG CÔNG TRÌNH

t.

quả tính tốn được trình bày trong bảng dưới đây Xem tại trang 4 của tài liệu.

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan