Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 85 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
85
Dung lượng
1,36 MB
Nội dung
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC BÁCH KHOA TRẦN ĐỖ TUẤN VŨ Đề tài: PHƯƠNG PHÁP TIẾN ĐỘ ĐA MỤC TIÊU (THỜI GIAN, CHI PHÍ), XEM XÉT SỰ LIÊN TỤC CỦA NHIỀU TỔ ĐỘI CHO DỰ ÁN CÓ NHIỀU ĐƠN VỊ LẶP LẠI Chuyên Ngành : CÔNG NGHỆ VÀ QUẢN LÝ XÂY DỰNG LUẬN VĂN THẠC SĨ TP Hồ Chí Minh, Tháng Năm 2010 i CƠNG TRÌNH ĐƯỢC HỒN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH Cán hướng dẫn khoa học: T.S LƯƠNG ĐỨC LONG ……………………… (Ghi rõ họ, tên, học hàm, học vị chữ ký) Cán chấm nhận xét 1: …………………………………………………………… (Ghi rõ họ, tên, học hàm, học vị chữ ký) Cán chấm nhận xét 2: …………………………………………………………… (Ghi rõ họ, tên, học hàm, học vị chữ ký) Luận văn thạc sĩ bảo vệ HỘI ĐỒNG CHẤM BẢO VỆ LUẬN VĂN THẠC SĨ TRƯỜNG ĐẠI HỌC BÁCH KHOA , ngày … tháng … năm 2010 ii TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA KỸ THUẬT XÂY DỰNG CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự – Hạnh Phúc -oOo Tp HCM, ngày tháng……… năm 2010 NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên Ngày sinh Chuyên ngành MSHV : TRẦN ĐỖ TUẤN VŨ : 01-07-1982 : Công nghệ Quản lý Xây dựng : 00808591 Phái : Nam Nơi sinh : Quảng Ngãi TÊN ĐỀ TÀI : PHƯƠNG PHÁP TIẾN ĐỘ ĐA MỤC TIÊU (THỜI GIAN, CHI PHÍ), XEM XÉT SỰ LIÊN TỤC CỦA NHIỀU TỔ ĐỘI CHO DỰ ÁN CÓ NHIỀU ĐƠN VỊ LẶP LẠI NHIỆM VỤ LUẬN VĂN: Đưa phương pháp lập tiến độ với mục tiêu cực tiểu thời gian hoàn thành thời gian gián đoạn đồng thời chi phí dự án xây dựng có hay nhiều đơn vị có công tác giống gần giống công tác thi công nhiều tổ đội Đồng thời có xét đến tính chất cơng tác (cơng tác gián đoạn hay khơng) thời gian gián đoạn cơng tác cho phép gián đoạn cực tiểu So sánh phương pháp đề xuất với phương pháp trước Viết chương trình thực máy tính từ phương pháp NGÀY GIAO NHIỆM VỤ: 25-01-2010 NGÀY HOÀN THÀNH NHIỆM VỤ : 02-08-2010 HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN : TS LƯƠNG ĐỨC LONG Nội dung đề cương Luận văn thạc sĩ Hội Đồng Chuyên Ngành thông qua CÁN BỘ HƯỚNG DẪN (Họ tên chữ ký) CHỦ NHIỆM BỘ MÔN QUẢN LÝ CHUYÊN NGÀNH (Họ tên chữ ký) TS LƯƠNG ĐỨC LONG TS LƯƠNG ĐỨC LONG iii KHOA QL CHUYÊN NGÀNH (Họ tên chữ ký) LỜI CẢM ƠN Trước hết tơi muốn bày tỏ lịng biết ơn sâu sắc đến thầy hướng dẫn Tiến sĩ Lương Đức Long Thầy có hướng dẫn giá trị, lời động viên khuyến khích hữu ích cho tơi suốt thời gian học tập đặc biệt để hoàn thành luận văn Đồng thời mong muốn gửi cảm ơn chân thành đến thầy cô Trường đại học Bách Khoa – Thành phố Hồ Chí Minh bạn lớp Cao học Công nghệ Quản lý xây dựng khóa 2008 giúp đỡ suốt thời gian học tập Và lời cảm ơn cuối mong muốn gửi đến Mẹ Em – người sát cánh động viên hỗ trợ mặt vật chấ, tinh thần tạo điều kiện thuận lợi để tơi hồn thành khóa học iv TĨM TẮT Đưa phương pháp lập tiến độ dự án xây dựng có hay nhiều đơn vị có công tác giống gần giống công tác thi công nhiều tổ đội như: nhà cao tầng, dự án nhà ở, dự án đường cao tốc, mạng lưới đường ống, nhiều cầu giống hay đường hầm…Đồng thời có xét đến tính chất cơng tác (cơng tác cho phép gián đoạn hay không) đưa phương pháp tối ưu thời gian gián đoạn công tác cho phép gián đoạn Thuật toán phát triển thành chương trình viết ngơn ngữ Visual Basic, qua số ví dụ minh hoạ chạy chương trình để ưu điểm phương pháp đề xuất so với phương pháp khác v MỤC LỤC Chương GIỚI THIỆU 1.1 Dự án xây dựng nhiều cơng trình 1.2 Các vấn đề lập tiến độ dự án xây dựng nhiều cơng trình .2 1.3 Mục tiêu nghiên cứu Chương LƯỢC KHẢO CÁC VẤN ĐỀ NGHIÊN CỨU .4 2.1 Giới thiệu .4 2.2 Kỹ thuật lập tiến độ truyền thống 2.3 Kỹ thuật lập tiến độ cho dự án xây dựng lặp lại .5 Chương MƠ HÌNH LẬP TIẾN ĐỘ CHO DỰ ÁN CĨ NHIỀU ĐƠN VỊ LẶP LẠI 3.1 Mô tả mơ hình 3.2 Mô tả thông số dự án .8 3.3 Sơ đồ khối tổng quát 3.4 Sơ đồ khối xác định tổ đội thực công tác – hàm namecrew(j, Ci) .10 3.5 Sơ đồ khối tính tốn ma trận DUij, CUij, Dij Cij 11 3.6 Sơ đồ khối tính tốn ESij EFij theo bước 12 3.7 Sơ đồ khối tính tốn ESij EFij theo bước 15 3.8 Mơ hình tính tốn ESij EFij theo bước 17 3.8.1 Giai đoạn 17 3.8.2 Giai đoạn 19 3.9 Tính tốn chi phí thực dự án 21 Chương CHƯƠNG TRÌNH LẬP TIẾN ĐỘ 24 4.1 Giới thiệu ngơn ngữ lập trình Visual Basic 6.0 24 4.2 Chương trình lập tiến độ 25 4.2.1 Nhập liệu 25 4.2.2 Phân tích liệu 29 4.2.3 Xuất kết 38 Chương VÍ DỤ MINH HỌA 40 5.1 Ví dụ 40 5.2 Ví dụ 42 5.3 Nhận xét .43 Chương KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 44 6.1 Kết luận 44 6.2 Các hạn chế hướng phát triển 44 TÀI LIỆU THAM KHẢO 45 PHỤ LỤC 47 LÝ LỊCH TRÍCH NGANG 78 vi DANH SÁCH CÁC HÌNH VẼ Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình Hình 1.1: Mạng cơng tác nút dùng để biểu diễn dự án với đơn vị công tác 1.2: Công tác lặp lại có thời gian thi cơng giống .2 1.3 : Công tác lặp lại có thời gian thi cơng khác .2 1.4: Công tác alpha công tác beta 3.1: Các thông số dự án 3.2: Các thông số tổ đội 3.3: Sơ đồ khối tổng quát 3.4: Sơ đồ khối xác đinh tên tổ đội thực công tác i đơn vị j 10 3.5: Sơ đồ khối tính tốn ma trận DUij CUij 11 3.6 : Sơ đồ khối tính tốn theo bước .13 3.7 : Ví dụ sau xử lý xong bước 14 3.8: Sơ đồ khối tính tốn theo bước 15 3.9:Ví dụ sau xử lý xong bước 16 3.10: Sơ đồ khối tính tốn theo bước giai đoạn 17 3.11: Sơ đồ khối tính tốn theo bước giai đoạn 19 3.12 : Sau thực bước (bước cuối cùng) 21 3.13 : Sơ đồ khối tính chi phí thực dự án 23 4.1 : Giao diện chương trình 25 4.2 : Cửa sổ nhập số tổ đội lớn số đơn vị dự án 25 4.3 : Giao diện nhập đơn vị, công tác tổ đội 26 4.4 : Một ví dụ nhập liệu hồn chỉnh 27 4.5 : Nhập chi phí gián tiếp dựa án 28 4.6: Cửa sổ lưu thông tin dự án 28 4.7: Cửa sổ để mở dự án có sẵn 29 4.8: Kết sau phân tích liệu dự án 38 5.1: Số liệu ví dụ Harris (1998) 40 5.2: Bổ sung chi phí gián tiếp cho ví dụ Harris 40 5.3: Tiến độ dự án theo ví dụ Harris sau chạy chương trình .41 5.4: Tiến độ dự án theo phương pháp RSM Harris 41 5.5: Số liệu dự án ví dụ 42 5.6: Tiến độ dự án ví dụ 42 vii Luận văn Thạc sĩ GVHD: TS Lương Đức Long Chương 1.1 GIỚI THIỆU Dự án xây dựng nhiều cơng trình Dự án xây dựng nhiều cơng trình dự án có đơn vị tương tự Một đơn vị đơn giản sàn nhà cao tầng, mẫu nhà dự án nhà phần mạng lưới đường ống Một ví dụ khác dự án xây dựng nhiều cơng trình dự án xây dựng về: đường cao tốc, đường băng, đường sắt, cầu, đường hầm, hệ thống cống hệ thống giao thông công cộng Trong nghiên cứu trước đây, thuật ngữ dự án tuyến tính (linear projects) sử dụng để loại dự án (Arditi Albulak, 1979; Dressler, 1974; Mawdesley et al, 1980; Selinger, 1980)[1,2,3,4] Trong dự án lặp lại, công tác lặp lại khơng lặp lại Ví dụ dự án xây dựng nhà cao tầng, công tác bê tông lặp lại từ tầng đến tầng khác nên xem cơng tác lặp lại, cơng tác đào đất thực lần nên xem công tác không lặp lại Đơn vị Đơn vi Hình 1.1: Mạng cơng tác nút dùng để biểu diễn dự án với đơn vị cơng tác Theo Vorster Bafna (1992)[5] dự án lặp lại chia làm dạng Dạng cơng tác lặp lại có thời gian thi cơng giống tất đơn vị thể thành đường thằng hình 1.1 Ví dụ: Một dự án nhà cơng tác xây dựng nhà lặp lại tất đơn vị dự án Trong dạng thứ 2, cơng tác lặp lại có thời gian thi cơng khơng giống đơn vị hình 1.2 Ví dụ: Dự án xây dựng đường cao tốc, thời gian thi công đào đất công đoạn khác HVTH:Trần Đỗ Tuấn Vũ -1- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long Hình 1.2: Cơng tác lặp lại có thời gian thi cơng giống Hình 1.3 : Cơng tác lặp lại có thời gian thi công khác Trong thực tế, thời gian thi công công tác đơn vị thường khác khối lượng đơn vị khác suất lao động tổ đội khác Ví dụ cơng tác đào đất, khối lượng đào đất đơn vị khác địa hình, suất, loại đất đơn vị khác 1.2 Các vấn đề lập tiến độ dự án xây dựng nhiều cơng trình Việc lập tiến độ cho dự án có nhiều đơn vị lặp lại cơng tác thực hay nhiều tổ đội phức tạp Để xác định thời gian thực công tác cần phải kết hợp việc sử dụng nhiều tổ đội để thi công công tác giải vấn đề sau: Trong dự án nhiều cơng trình, tổ đội xây dựng thi công công tác thường di chuyển từ đơn vị đến đơn vị khác Việc lập tiến độ đòi hỏi đảm bảo cho tổ đội làm việc liên tục tránh thời gian gián đoạn không cần thiết (Ashley 1980, Birrell HVTH:Trần Đỗ Tuấn Vũ -2- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long 1981, El-Rayaes Moselhi 1997, Kavanagh 1985 Reda 1990)[6,7,8,9] Như vậy, vấn đề thứ việc lập tiến độ phải tối đa hiệu việc sử dụng tài nguyên Trong dự án xây dựng lặp thường bao gồm công tác lặp lại không lặp lại Mỗi loại cơng tác địi hỏi kỹ thuật tính tốn khác Đối với cơng tác khơng lặp lại sử dụng kỹ thuật lập tiến độ mạng truyền thống Tuy nhiên, công tác lặp lại thi yêu cầu kỹ thuật có xét đến làm việc tổ đội Vấn đề thứ hai phải kết hợp hai kỹ thuật lập tiến độ Vấn đề thứ phải tối ưu thời gian gián đoạn tổ đội Theo Lương Đức Long 2009[10], cơng tác chia làm loại: loại (gọi alpha) loại không cho phép gián đoạn, loại (gọi beta) loại cho phép gián đoạn, theo Hình 1.3 cơng tác alpha công tác công tác beta công tác Do đó, việc tối ưu hóa gián đoạn tối ưu thời gian chết tổ đội thi công cơng tác loại beta Hình 1.4: Cơng tác alpha công tác beta Mục tiêu nghiên cứu 1.3 Mục tiêu việc nghiên cứu đưa mô hình để lập tiến độ cho dự án xây dựng có nhiều đơn vị lặp lại có nhiều tổ đội thi công công tác Cụ thể hoàn thành mục tiêu sau: 1) 2) 3) 4) Đưa thuật toán để lập tiến độ cho công tác lặp lại công tác thực nhiều tổ đội Đưa thuật tốn tối ưu thời gian gián đoạn cơng tác beta dựa thuật toán Lương Đức Long 2009[10] có xét tới nhiều tổ đội Tính tốn chi phí để thực dự án Từ thuật tốn đưa viết thành chương trình để tự động hóa việc lập tiến độ máy tính HVTH:Trần Đỗ Tuấn Vũ -3- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long ci = Frmmain.MSF2.TextMatrix(i, name_crews * - 1) * di = Frmmain.MSF2.TextMatrix(i, name_crews * 2) * Else ci = Frmmain.MSF2.TextMatrix(i, name_crews * - 1) * Frmmain.MSF1.TextMatrix(i, j + 1) di = Frmmain.MSF2.TextMatrix(i, name_crews * 2) * Frmmain.MSF1.TextMatrix(i, j + 1) End If c(j, i) = ci D(j, i) = di Frmmain.MSF3.TextMatrix(j - 1, i - 1) = di 'Frmmain.Text1 = num_crews Next j Next i End Sub Public Sub count_max_duration() Dim i, j As Integer Dim numberunits, numberactivities As Integer Max_duration = numberunits = Frmmain.MSF1.Cols - numberactivities = Frmmain.MSF1.Rows - For i = To number_units For j = To numberactivities If EF(i, j) > Max_duration Then Max_duration = EF(i, j) End If Next j Next i End Sub Public Sub constrain_crew_pre() ' tinh theo early start Dim i, j, k, l, i_crew As Integer Dim numPre, num_crews, itam, name_crew, name_unit_max As Integer 'name_unit_max: ten don vi cong tac i va to doi lam thoi gian hoan cua to doi la max Dim Max, Stam, D_act, D_acti, chenhlech, Max_EF_crew, D_crew_act, D_crew_act_temp As Single Dim namePre As String 'dam bao theo rang buoc cong tac dung truoc va rang buoc to doi For j = To Frmmain.MSF1.Cols - For i = To Frmmain.MSF1.Rows - num_crews = Frmmain.MSF1.TextMatrix(i, Frmmain.MSF1.Cols - 1) numPre = count_pre(Frmmain.MSF1.TextMatrix(i, 1)) If numPre = Then ES(j, i) = HVTH:Trần Đỗ Tuấn Vũ -64- MSSV: 00808591 Luận văn Thạc sĩ ' GVHD: TS Lương Đức Long Else Max = For k = To numPre namePre = name_Pre(Frmmain.MSF1.TextMatrix(i, 1), k) If ES(j, namePre) "" Then Stam = EF(j, namePre) If Val(lag_Pre(Frmmain.MSF1.TextMatrix(i, 1), k)) Then Frmmain.Text1 = Val(lag_Pre(Frmmain.MSF1.TextMatrix(i, 1), k)) Stam = Stam + Val(lag_Pre(Frmmain.MSF1.TextMatrix(i, 1), k)) End If If Max < Stam Then Max = Stam End If End If Next k If ES(j, i) < Max Then ES(j, i) = Max End If End If If EFpre_crew(i, j) > ES(j, i) Then ES(j, i) = EFpre_crew(i, j) End If EF(j, i) = ES(j, i) + D(j, i) Next i Next j End Sub Public Sub constrain_crew_pre_LS() ' tinh theo Late Start Dim i, i_Back, j, j_Back, i_temp, i_temp_bacK, j_temp, j_temp_bacK, k, l, i_crew As Integer Dim numPre, num_crews, name_crew, name_unit_max As Integer 'name_unit_max: ten don vi cong tac i va to doi lam thoi gian hoan cua to doi la max Dim Max, Stam, D_act, D_acti, chenhlech, Max_EF_crew, D_crew_act, D_crew_act_temp As Single Dim namePre As String Dim nameSuc As Boolean 'dam bao theo rang buoc cong tac dung truoc va rang buoc to doi 'Dim duration As Single For j = To Frmmain.MSF1.Cols - For i = To Frmmain.MSF1.Rows - i_Back = Frmmain.MSF1.Rows - - i j_Back = Frmmain.MSF1.Cols - - j If i_Back And j_Back Then HVTH:Trần Đỗ Tuấn Vũ -65- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long If LF(j_Back, i_Back) = Then LF(j_Back, i_Back) = Max_duration LS(j_Back, i_Back) = LF(j_Back, i_Back) - D(j_Back, i_Back) End If 'numPre = count_pre(Frmmain.MSF1.TextMatrix(i_bacK, 1)) For i_temp = i_Back + To Frmmain.MSF1.Rows - 'xet rang buoc cong tac dung sau cung unit numPre = count_pre(Frmmain.MSF1.TextMatrix(i_temp, 1)) For k = To numPre 'rang buoc cong tac dung sau namePre = name_Pre(Frmmain.MSF1.TextMatrix(i_temp, 1), k) If Val(namePre) = i_Back Then If Val(LF(j_Back, i_Back)) > LS(j_Back, i_temp) Then 'Or LF(j_bacK, i_bacK) = Then LF(j_Back, i_Back) = LS(j_Back, i_temp) LS(j_Back, i_Back) = LF(j_Back, i_Back) - D(j_Back, i_Back) End If If Val(lag_Pre(Frmmain.MSF1.TextMatrix(i_temp, 1), k)) Then LF(j_Back, i_Back) = LF(j_Back, i_Back) Val(lag_Pre(Frmmain.MSF1.TextMatrix(i_temp, 1), k)) LS(j_Back, i_Back) = LF(j_Back, i_Back) - D(j_Back, i_Back) End If End If Next k Next i_temp name_crew = namecrews(j_Back, Frmmain.MSF1.TextMatrix(i_Back, Frmmain.MSF1.Cols - 1)) For j_temp = j_Back + To Frmmain.MSF1.Cols - ' rang buoc to doi If name_crew = namecrews(j_temp, Frmmain.MSF1.TextMatrix(i_Back, Frmmain.MSF1.Cols - 1)) Then If LF(j_Back, i_Back) > LS(j_temp, i_Back) Or LF(j_Back, i_Back) = Then LF(j_Back, i_Back) = LS(j_temp, i_Back) LS(j_Back, i_Back) = LF(j_Back, i_Back) - D(j_Back, i_Back) End If End If Next j_temp End If Next i Next j End Sub Public Sub constrain_alpha_LS() Dim i_act, i_act_back, i_crew, i_unit, i_unit_bacK, i_unit_temp, i_Back, j_Back, k, k_Back, name_crew As Integer Dim Min_LS_crew, LScrew, LFcrew As Single HVTH:Trần Đỗ Tuấn Vũ -66- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long For i_act = To Frmmain.MSF1.Rows - 'vong lap chay theo cong tac i_act_back = Frmmain.MSF1.Rows - i_act 'vong lap chay nguoc theo cong tac If LCase(Frmmain.MSF1.TextMatrix(i_act_back, Frmmain.MSF1.Cols - 2)) = LCase("alpha") Then 'kiem tra cong tac alpha LScrew = LFcrew = For i_crew = To Frmmain.MSF1.TextMatrix(i_act_back, Frmmain.MSF1.Cols 1) 'vong lap chay theo crew For i_unit = To Frmmain.MSF1.Cols - 'vong lap chay theo unit i_unit_bacK = Frmmain.MSF1.Cols - - i_unit name_crew = namecrews(i_unit_bacK, Frmmain.MSF1.TextMatrix(i_act_back, Frmmain.MSF1.Cols - 1)) If name_crew = i_crew Then 'keim tra dk cung to doi If LScrew = Then LScrew = LS(i_unit_bacK, i_act_back) LFcrew = LF(i_unit_bacK, i_act_back) Else LS(i_unit_bacK, i_act_back) = LFcrew LFcrew = LS(i_unit_bacK, i_act_back) + D(i_unit_bacK, i_act_back) LF(i_unit_bacK, i_act_back) = LFcrew End If End If Next i_unit constrain_crew_pre_LS 'sap xep lai theo rang buoc cong tac dung truoc Next i_crew End If Next i_act End Sub Function test_act_suc(act As Integer) As Boolean Dim i, j, i_Back, numPre As Integer Dim namePre As String test_act_suc = False For i = act + To Frmmain.MSF1.Rows - numPre = count_pre(Frmmain.MSF1.TextMatrix(i, 1)) For j = To numPre namePre = name_Pre(Frmmain.MSF1.TextMatrix(i, 1), j) If Val(namePre) = act Then test_act_suc = True End If Next j Next i End Function Public Sub optimal_beta_backward() HVTH:Trần Đỗ Tuấn Vũ -67- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long Dim i_act, i_unit, i_crew, i, j, numPre, num_repeat, dem As Integer Dim Min_EF, temp As Single Dim namePre As String i_act = Frmmain.MSF1.Rows - dem = Do While i_act >= 'vong lap cong tac If LCase(Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 2)) = LCase("beta") Then For i_crew = To Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 1) 'xet tung crew num_repeat = i_unit = Frmmain.MSF1.Cols - Do While i_unit >= 'vong lap unit Min_EF = Max_duration If namecrews(i_unit, Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 1)) = i_crew Then num_repeat = num_repeat + If num_repeat >= Then For i = i_unit + To Frmmain.MSF1.Cols - If namecrews(i, Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 1)) = i_crew Then 'neu cung to doi If Min_EF > ES(i, i_act) Then 'xet gia tri Min_EF = ES(i, i_act) Exit For End If End If Next i For i = i_act + To Frmmain.MSF1.Rows - ' vong lap xac dinh gia tri cua cac cong tac dung sau numPre = count_pre(Frmmain.MSF1.TextMatrix(i, 1)) 'dem so cong tac dung truoc cua cong tac i For j = To numPre 'tim cong tac dung truoc co cong tac nao la i_act khong namePre = name_Pre(Frmmain.MSF1.TextMatrix(i, 1), j) If Val(namePre) = i_act And Min_EF > ES(i_unit, i) + Val(lag_Pre(Frmmain.MSF1.TextMatrix(i, 1), j)) Then Min_EF = ES(i_unit, i) + Val(lag_Pre(Frmmain.MSF1.TextMatrix(i, 1), j)) End If Next j Next i 'ket thuc tinh gia tri ES nho nhat cua cong tac dung sau EF(i_unit, i_act) = Min_EF ES(i_unit, i_act) = EF(i_unit, i_act) - D(i_unit, i_act) End If End If i_unit = i_unit - Loop Next i_crew End If HVTH:Trần Đỗ Tuấn Vũ -68- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long i_act = i_act - Loop Frmmain.Text1 = dem End Sub Public Sub optimal_beta_forward() Dim i_act, i_unit, i, j, numPre, name_crew, i_unit_temp As Integer Dim Max_ES As Single Dim namePre As String i_act = Frmmain.MSF1.Rows - Do While i_act >= 'vong lap cong tac If LCase(Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 2)) = LCase("beta") Then For i_unit = To Frmmain.MSF1.Cols - name_crew = namecrews(i_unit, Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 1)) Max_ES = numPre = count_pre(Frmmain.MSF1.TextMatrix(i_act, 1)) 'dem so cong tac dung truoc cua cong tac i For j = To numPre 'tim cong tac dung truoc co cong tac nao la i_act khong namePre = name_Pre(Frmmain.MSF1.TextMatrix(i_act, 1), j) If Max_ES < EF(i_unit, Val(namePre)) + Val(lag_Pre(Frmmain.MSF1.TextMatrix(Val(namePre), 1), j)) Then Max_ES = EF(i_unit, Val(namePre)) + Val(lag_Pre(Frmmain.MSF1.TextMatrix(Val(namePre), 1), j)) End If Next j i_unit_temp = i_unit - Do While i_unit_temp >= If name_crew = namecrews(i_unit_temp, Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 1)) Then If Max_ES = EF(i_unit_temp, i_act) Then ES(i_unit, i_act) = EF(i_unit_temp, i_act) EF(i_unit, i_act) = ES(i_unit, i_act) + D(i_unit, i_act) Exit Do End If Exit Do End If i_unit_temp = i_unit_temp - Loop Next i_unit End If i_act = i_act - Loop End Sub Public Sub constrain_alpha() HVTH:Trần Đỗ Tuấn Vũ -69- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long Dim i, j, k, l, i_crew As Integer Dim numPre, num_crews, itam, name_crew, name_unit_max As Integer 'name_unit_max: ten don vi cong tac i va to doi lam thoi gian hoan cua to doi la max Dim Max, Stam, D_act, D_acti, chenhlech, Max_EF_crew, D_crew_act, D_crew_act_temp As Single Dim namePre As String For i = To Frmmain.MSF1.Rows - 'xet tu cong tac thu If LCase(Frmmain.MSF1.TextMatrix(i, Frmmain.MSF1.Cols - 2)) = LCase("alpha") Then For j = To Frmmain.MSF1.Cols - For i_crew = To Frmmain.MSF1.Cols - name_crew = namecrews(j, Frmmain.MSF1.TextMatrix(i, Frmmain.MSF1.Cols - 1)) If name_crew = i_crew Then Max_EF_crew = D_crew_act = name_unit_max = For k = To Frmmain.MSF1.Cols - 'tim unit dung truoc co cung cong tac va cung to doi If name_crew = namecrews(k, Frmmain.MSF1.TextMatrix(i, Frmmain.MSF1.Cols - 1)) Then Max_EF_crew = EF(k, i) D_crew_act = D_crew_act + D(k, i) 'tong thoi gian thuc hien cua to doi cua cong tac i name_unit_max = k ' tim unit cuoi cungma to doi i_crew thuc hien End If Next k 'D_crew_act_temp = D_crew_act 'For k = To Frmmain.MSF1.Cols - ' If name_crew = namecrews(k, Frmmain.MSF1.TextMatrix(i, Frmmain.MSF1.Cols - 1)) Then ' If Max_EF_crew < ES(k, i) + D_crew_act_temp Then ' Max_EF_crew = ES(k, i) + D_crew_act_temp ' tim thoi gian ket thuc cuoi cung cua to doi ' name_unit_max = k End If ' D_crew_act_temp = D_crew_act_temp - D(k, i) 'End If 'Next k ' l = Frmmain.MSF1.Cols - HVTH:Trần Đỗ Tuấn Vũ -70- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long D_crew_act_temp = For k = To Frmmain.MSF1.Cols - If name_crew = namecrews(l, Frmmain.MSF1.TextMatrix(i, Frmmain.MSF1.Cols - 1)) Then chenhlech = Max_EF_crew - EF(l, i) - D_crew_act_temp ES(l, i) = ES(l, i) + chenhlech EF(l, i) = EF(l, i) + chenhlech constrain_crew_pre D_crew_act_temp = D_crew_act_temp + D(l, i) End If l = Frmmain.MSF1.Cols - - k Next k End If Next i_crew Next j End If Next i End Sub Public Sub maxcrews() 'xac dinh so to doi lon nhat cua tat ca cac cong tac Dim i, j As Integer max_Crews = For i = To Frmmain.MSF1.Rows - If max_Crews < Frmmain.MSF1.TextMatrix(i, Frmmain.MSF1.Cols - 1) Then max_Crews = Frmmain.MSF1.TextMatrix(i, Frmmain.MSF1.Cols - 1) End If Next i End Sub Public Sub drawaxis() 've he truc Dim numberunits, numberactivities, Ax, Ay, Bx, By, disY, disX, i, j, k As Integer 'Dim duration As Single numberunits = Frmmain.MSF1.Cols - numberactivities = Frmmain.MSF1.Rows - Max_duration = For i = To number_units For j = To numberactivities If EF(i, j) > Max_duration Then Max_duration = EF(i, j) End If Next j Next i Ax = 400 Ay = 400 Bx = 400 By = Frmdraw.PicPaint2.Height - 400 HVTH:Trần Đỗ Tuấn Vũ -71- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long Frmdraw.PicPaint2.DrawWidth = Frmdraw.PicPaint2.Line (Ax, Ay)-(Bx, By), QBColor(2) Frmdraw.PicPaint2.CurrentX = Ax + 100 Frmdraw.PicPaint2.CurrentY = Ay Frmdraw.PicPaint2.FontSize = 15 Frmdraw.PicPaint2.FontBold = True Frmdraw.PicPaint2.ForeColor = RGB(255, 100, 100) Frmdraw.PicPaint2.Print "(Unit)" Ax = 400 Ay = Frmdraw.PicPaint2.Height - 400 Bx = Frmdraw.PicPaint2.width - 400 By = Ay Frmdraw.PicPaint2.DrawWidth = Frmdraw.PicPaint2.Line (Ax, Ay)-(Bx, By), QBColor(2) Frmdraw.PicPaint2.CurrentX = Bx - 800 Frmdraw.PicPaint2.CurrentY = By - 300 Frmdraw.PicPaint2.FontSize = 15 Frmdraw.PicPaint2.ForeColor = RGB(255, 100, 100) Frmdraw.PicPaint2.Print "(Time)" Frmdraw.PicPaint2.CurrentX = Bx - Frmdraw.width / Frmdraw.PicPaint2.CurrentY = By Frmdraw.PicPaint2.FontSize = 15 Frmdraw.PicPaint2.ForeColor = RGB(255, 100, 100) Frmdraw.PicPaint2.Print "Project cost = " & Max_cost & " and T = " & Fix(Max_duration * 100) / 100 disY = Fix((By - 400) / numberunits) For i = To number_units Ax = Ax Ay = Ay - disY Bx = Bx By = Ay Frmdraw.PicPaint2.DrawWidth = Frmdraw.PicPaint2.Line (Ax, Ay)-(Bx, By), QBColor(2) Frmdraw.PicPaint2.CurrentX = Ax - 300 Frmdraw.PicPaint2.CurrentY = Ay + disY / Frmdraw.PicPaint2.FontSize = 15 Frmdraw.PicPaint2.ForeColor = RGB(255, 0, 0) Frmdraw.PicPaint2.Print i Next i Frmdraw.PicPaint2.FontBold = False End Sub HVTH:Trần Đỗ Tuấn Vũ -72- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long Public Sub draw_act(EStemp, EFtemp As Variant, unit, name_act As Variant, v_color As Integer, width As Single) Dim disY As Single Dim Ax, Ay, Bx, By As Integer disY = Fix((Frmdraw.PicPaint2.Height - 800) / number_units) Ax = Fix(EStemp * ((Frmdraw.PicPaint2.width - 1200) / Max_duration)) + 400 Ay = Fix(Frmdraw.PicPaint2.Height - 400 - (unit - 1) * disY) Bx = Fix(EFtemp * ((Frmdraw.PicPaint2.width - 1200) / Max_duration)) + 400 By = Ay - disY Frmdraw.PicPaint2.DrawWidth = width Frmdraw.PicPaint2.Line (Ax, Ay)-(Bx, By), QBColor(v_color) Frmdraw.PicPaint2.CurrentX = Ax - (Ax - Bx) / - 100 Frmdraw.PicPaint2.CurrentY = By + (Ay - By) / Frmdraw.PicPaint2.FontSize = 14 Frmdraw.PicPaint2.ForeColor = RGB(255, 100, 0) Frmdraw.PicPaint2.Print "#" & name_act Frmdraw.PicPaint2.CurrentX = Ax - 300 Frmdraw.PicPaint2.CurrentY = Ay - 350 Frmdraw.PicPaint2.FontSize = 14 Frmdraw.PicPaint2.ForeColor = RGB(0, 0, 255) Frmdraw.PicPaint2.Print Fix(EStemp * 100) / 100 Frmdraw.PicPaint2.CurrentX = Bx - 200 Frmdraw.PicPaint2.CurrentY = By + Frmdraw.PicPaint2.FontSize = 14 Frmdraw.PicPaint2.ForeColor = RGB(255, 0, 0) Frmdraw.PicPaint2.Print Fix(EFtemp * 100) / 100 End Sub Function namecrews(numberunit, numbercrews As Variant) As Integer ' xac dinh to doi thuc hien cong viec If numberunit Mod numbercrews = Then namecrews = numberunit Mod numbercrews + numbercrews Else namecrews = (numberunit Mod numbercrews) End If End Function Public Sub exportES() ' kiem tra du lieu Dim i, j As Integer Frmmain.MSF3.Cols = Frmmain.MSF1.Rows - Frmmain.MSF3.Rows = Frmmain.MSF1.Cols - For i = To Frmmain.MSF3.Rows For j = To Frmmain.MSF3.Cols Frmmain.MSF3.TextMatrix(i - 1, j - 1) = ES(i, j) Next j Next i HVTH:Trần Đỗ Tuấn Vũ -73- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long End Sub Function EFpre_crew(i_act, j_unit As Variant) As Single 'lay thoi gian ket thuc cong viec cua to doi o don vi trc Dim EFtemp As Single Dim namecrews_temp, j As Integer namecrews_temp = namecrews(j_unit, Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 1)) EFtemp = For j = To j_unit - If namecrews_temp = namecrews(j, Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 1)) Then ' kiem tra neu cung to doi If EFtemp < EF(j, i_act) Then 'lay thoi gian ket thuc som nhat EFtemp = EF(j, i_act) End If End If Next j EFpre_crew = EFtemp End Function Function ESsuc_crew(i_act, j_unit As Variant) As Single 'lay thoi gian bat dau cong viec cua to doi don vi sau Dim EStemp As Single Dim namecrews_temp, j As Integer namecrews_temp = namecrews(j_unit, Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 1)) EStemp = For j = (j_unit + 1) To number_units If namecrews_temp = namecrews(j, Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 1)) Then ' kiem tra neu cung to doi If EStemp = Or EStemp > ES(j, i_act) Then 'lay thoi gian ket thuc som nhat EStemp = ES(j, i_act) End If End If Next j ESsuc_crew = EStemp End Function Function Dur_crew(name_crew, i_act As Variant) As Single Dim i, j As Integer For i = To Frmmain.MSF1.Rows - 'xet tu cong tac thu For j = To Frmmain.MSF1.Cols - Next j Next i End Function ''''''''''''''''''''''''''''''''''''''''''''''''''''new algorithm'''''''''''''''''''''''' Function Pre_unit(unit, act As Integer) As Integer ' xac dinh unit dung truoc nao co cung to doi voi unit nhap vao Dim name_crew, i_unit As Integer HVTH:Trần Đỗ Tuấn Vũ -74- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long name_crew = namecrews(unit, Frmmain.MSF1.TextMatrix(act, Frmmain.MSF1.Cols 1)) i_unit = unit - Do While i_unit >= If name_crew = namecrews(i_unit, Frmmain.MSF1.TextMatrix(act, Frmmain.MSF1.Cols - 1)) Then Pre_unit = i_unit Exit Do Else Pre_unit = End If i_unit = i_unit - Loop End Function Function Suc_unit(unit, act As Integer) As Integer ' xac dinh unit dung sau nao co cung to doi voi unit nhap vao Dim name_crew, i_unit As Integer name_crew = namecrews(unit, Frmmain.MSF1.TextMatrix(act, Frmmain.MSF1.Cols 1)) For i_unit = unit + To Val(Frmmain.MSF1.Cols - 4) If name_crew = namecrews(i_unit, Frmmain.MSF1.TextMatrix(act, Frmmain.MSF1.Cols - 1)) Then Suc_unit = i_unit Exit For Else Suc_unit = End If Next i_unit End Function Function ES_pre_act(unit, act As Integer) As Single Dim i_act, numPre, i_numpre, namePre As Integer Dim Max, ES_temp As Single Max = numPre = count_pre(Frmmain.MSF1.TextMatrix(act, 1)) For i_numpre = To numPre namePre = name_Pre(Frmmain.MSF1.TextMatrix(act, 1), i_numpre) If ES(unit, namePre) "" Then ES_temp = EF(unit, namePre) If Val(lag_Pre(Frmmain.MSF1.TextMatrix(act, 1), i_numpre)) Then ES_temp = ES_temp + Val(lag_Pre(Frmmain.MSF1.TextMatrix(act, 1), i_numpre)) End If If Max < ES_temp Then Max = ES_temp End If End If HVTH:Trần Đỗ Tuấn Vũ -75- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long Next i_numpre ES_pre_act = Max End Function Function LF_suc_act(unit, act As Integer) As Single Dim i_act, numPre, namePre, k As Integer Dim Min, EF_temp As Single If act = Frmmain.MSF1.Rows - Then LF_suc_act = Max_duration Else Min = Max_duration For i_act = act + To Frmmain.MSF1.Rows - 'xet rang buoc cong tac dung sau cung unit numPre = count_pre(Frmmain.MSF1.TextMatrix(i_act, 1)) For k = To numPre 'rang buoc cong tac dung sau namePre = name_Pre(Frmmain.MSF1.TextMatrix(i_act, 1), k) If Val(namePre) = act Then If Min > LS(unit, Val(namePre)) + Val(lag_Pre(Frmmain.MSF1.TextMatrix(namePre, 1), k)) Then 'Or LF(j_bacK, i_bacK) = Then Min = LS(unit, Val(namePre)) + Val(lag_Pre(Frmmain.MSF1.TextMatrix(namePre, 1), k)) End If End If Next k Next i_act LF_suc_act = Min End If End Function Function ES_pre_crew(unit, act As Integer) As Single Dim Preunit As Integer Preunit = Pre_unit(unit, act) If Preunit Then ES_pre_crew = EF(Preunit, act) Else ES_pre_crew = Max_duration End If End Function Function EF_suc_crew(unit, act As Integer) As Single Dim Sucunit As Integer Sucunit = Suc_unit(unit, act) If Sucunit Then EF_suc_crew = ES(Sucunit, act) Else EF_suc_crew = Max_duration End If End Function Public Sub count_ES() Dim i_unit, i_act As Integer HVTH:Trần Đỗ Tuấn Vũ -76- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long For i_unit = To Frmmain.MSF1.Cols - For i_act = To Frmmain.MSF1.Rows - If ES(i_unit, i_act) < ES_pre_act(i_unit, i_act) Then ES(i_unit, i_act) = ES_pre_act(i_unit, i_act) End If If ES(i_unit, i_act) < ES_pre_crew(i_unit, i_act) Then ES(i_unit, i_act) = ES_pre_crew(i_unit, i_act) End If EF(i_unit, i_act) = ES(i_unit, i_act) + D(i_unit, i_act) Next i_act Next i_unit End Sub Public Sub adjust_act_alpha_ES() Dim i_unit, i_act As Integer For i_act = To Frmmain.MSF1.Rows - If LCase(Frmmain.MSF1.TextMatrix(i_act, Frmmain.MSF1.Cols - 2)) = LCase("alpha") Then i_unit = Frmmain.MSF1.Cols - Do While i_unit >= If EF(i_unit, i_act) < EF_suc_crew(i_unit, i_act) Then EF(i_unit, i_act) = EF_suc_crew(i_unit, i_act) End If ES(i_unit, i_act) = EF(i_unit, i_act) - D(i_unit, i_act) count_ES 'tinh lai cac cong tac sau i_unit = i_unit - Loop End If Next i_act End Sub Public Sub count_LS() Dim i_unit, i_act As Integer Dim Min As Single i_unit = Frmmain.MSF1.Cols - Do While i_unit >= i_act = Frmmain.MSF1.Rows - Do While i_act >= If LF_suc_act(i_unit, i_act) > EF_suc_crew(i_unit, i_act) Then Min = EF_suc_crew(i_unit, i_act) Else Min = LF_suc_act(i_unit, i_act) End If LF(i_unit, i_act) = Min LS(i_unit, i_act) = LF(i_unit, i_act) - D(i_unit, i_act) i_act = i_act - Loop i_unit = i_unit - Loop End Sub HVTH:Trần Đỗ Tuấn Vũ -77- MSSV: 00808591 Luận văn Thạc sĩ GVHD: TS Lương Đức Long LÝ LỊCH TRÍCH NGANG Họ tên: Giới tính: Ngày sinh: Nơi sinh: Địa liên lạc: Email: Điện thoại: Trần Đỗ Tuấn Vũ Nam 01-07-1982 Xã Phổ Cường – Huyện Đức Phổ - Tỉnh Quảng Ngãi 7/28 Tân Trang, Phường 9, Quận Tân Bình, Tp Hồ Chí Minh trandotuanvu@gmail.com 0918 755 759 Q TRÌNH ĐÀO TẠO 2000-2005: 2008-2010: Sinh viên trường Đại học Giao Thông Vận Tải (cơ sở 2) Tp Hồ Chí Minh Học viên cao học trường Đại học Bách Khoa Tp Hồ Chí Minh Q TRÌNH CƠNG TÁC 9/2005-6/2008 6/2008-2/2009 2/2009-7/2009 7/2009-5/2010 6/2010- Trung tâm cầu đường phía Nam (Vibroce South) Công ty đầu tư – Tư vấn xây dựng (ICC) Tổng công ty đầu tư phát triển đô thị khu công nghiệp Việt Nam (IDICO) Công ty TNHH Tư vấn xây dựng Liên Hợp (UPCC) Công ty KPK Việt Nam HVTH:Trần Đỗ Tuấn Vũ -78- MSSV: 00808591 ... Xây dựng : 00808591 Phái : Nam Nơi sinh : Quảng Ngãi TÊN ĐỀ TÀI : PHƯƠNG PHÁP TIẾN ĐỘ ĐA MỤC TIÊU (THỜI GIAN, CHI PHÍ), XEM XÉT SỰ LIÊN TỤC CỦA NHIỀU TỔ ĐỘI CHO DỰ ÁN CÓ NHIỀU ĐƠN VỊ LẶP LẠI... kiện kết thúc vòng lặp, thực hết tất vòng lặp Trong sơ đồ khối ta có vịng lặp vịng lặp cơng tác, vịng lặp đơn vị dự án vòng lặp tổ đội vịng lặp vịng lặp đơn vị dự án lặp lại lần Xét ví dụ minh họa... MÔ HÌNH LẬP TIẾN ĐỘ CHO DỰ ÁN CĨ NHIỀU ĐƠN VỊ LẶP LẠI Mơ tả mơ hình Lập tiến độ dự án có Q đơn vị đơn vị có M cơng tác Khối lượng cơng tác đơn vị giống khác khơng có (mỗi đơn vị lặp lại tồn hay