NHIỆM VỤ LUẬN VĂN: Đưa ra một 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 và thời gian gián đoạn đồng thời chi phí của một dự án xây dựng có một hay nhiều đơn vị
Trang 1LẶ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Ĩ
Trang 2TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH
Cán bộ hướng dẫn khoa học: T.S LƯƠNG ĐỨC LONG ………
Trang 3Tp HCM, ngày tháng……… năm 2010
NHIỆM VỤ LUẬN VĂN THẠC SĨ
Chuyên ngành : Công nghệ và Quản lý Xây dựng
1 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
2 NHIỆM VỤ LUẬN VĂN:
Đưa ra một 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 và thời gian gián đoạn đồng thời chi phí của một dự án xây dựng có một hay nhiều đơn vị có các công tác giống nhau hoặc gần giống nhau và các công tác được thi công bởi một hoặc nhiều tổ đội Đồng thời có xét đến tính chất của công tác (công tác có thể gián đoạn hay không) tại đó thời gian gián đoạn của công tác cho phép gián đoạn sẽ được cực tiểu
So sánh phương pháp đề xuất với các phương pháp trước đây
Viết một chương trình thực hiện trên máy tính từ phương pháp trên
3 NGÀY GIAO NHIỆM VỤ: 25-01-2010
4 NGÀY HOÀN THÀNH NHIỆM VỤ : 02-08-2010
5 HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN : TS LƯƠNG ĐỨC LONG
Nội dung và đề cương Luận văn thạc sĩ đã được Hội Đồng Chuyên Ngành thông qua
CÁN BỘ HƯỚNG DẪN
(Họ tên và chữ ký)
CHỦ NHIỆM BỘ MÔN QUẢN LÝ CHUYÊN NGÀNH (Họ tên và chữ ký)
KHOA QL CHUYÊN NGÀNH
(Họ tên và chữ ký)
Trang 4Trước hết tôi muốn được 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ó những hướng dẫn giá trị, những lời động viên khuyến khích hữu ích cho tôi trong suốt thời gian học tập và đặc biệt là để hoàn thành luận văn này
Đồng thời tôi cũng mong muốn gửi cảm ơn chân thành đến các thầy cô của Trường đại học Bách Khoa – Thành phố Hồ Chí Minh cũng như các bạn trong lớp Cao học Công nghệ và Quản lý xây dựng khóa 2008 đã giúp đỡ tôi trong suốt thời gian học tập tại đây
Và lời cảm ơn cuối cùng tôi mong muốn được gửi đến là Mẹ và các Em của tôi – những người
đã sát cánh động viên hỗ trợ về mặt vật chấ, tinh thần và tạo điều kiện thuận lợi để tôi hoàn thành khóa học này
Trang 5giống nhau hoặc gần giống nhau và mỗi công tác được thi công bởi một hoặc nhiều tổ đội như: nhà cao tầng, một dự án nhà ở, dự án đường cao tốc, mạng lưới đường ống, nhiều cây cầu giống nhau hay đường hầm…Đồng thời có xét đến tính chất của công tác (công tác cho phép gián đoạn hay không) và đưa ra phương pháp tối ưu thời gian gián đoạn của công tác cho phép gián đoạn Thuật toán trên được phát triển thành một chương trình được viết bằng ngôn ngữ Visual Basic, và qua đó một số ví dụ minh hoạ được chạy bằng chương trình này để hiện ưu điểm của phương pháp đề xuất
so với các phương pháp khác
Trang 61.2 Các vấn đề trong 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 3
Chương 2 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 4
2.3 Kỹ thuật lập tiến độ cho những dự án xây dựng lặp lại 5
Chương 3 MÔ HÌNH LẬP TIẾN ĐỘ CHO DỰ ÁN CÓ NHIỀU ĐƠN VỊ LẶP LẠI 7
3.1 Mô tả mô hình 7
3.2 Mô tả các thông số dự án 8
3.3 Sơ đồ khối tổng quát 9
3.4 Sơ đồ khối xác định tổ đội thực hiện công tác – hàm namecrew(j, Ci) 10
3.5 Sơ đồ khối tính toán ma trận DUij, CUij, Dij và Cij 11
3.6 Sơ đồ khối tính toán ESij và EFij theo bước 1 12
3.7 Sơ đồ khối tính toán ESij và EFij theo bước 2 15
3.8 Mô hình tính toán ESij và EFij theo bước 3 17
3.8.1 Giai đoạn 1 17
3.8.2 Giai đoạn 2 19
3.9 Tính toán chi phí thực hiện dự án 21
Chương 4 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 dữ liệu 25
4.2.2 Phân tích dữ liệu 29
4.2.3 Xuất kết quả 38
Chương 5 VÍ DỤ MINH HỌA 40
5.1 Ví dụ 1 40
5.2 Ví dụ 2 42
5.3 Nhận xét 43
Chương 6 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ế và hướng phát triển tiếp theo 44
TÀI LIỆU THAM KHẢO 45
PHỤ LỤC 47
LÝ LỊCH TRÍCH NGANG 78
Trang 7Hình 1.3 : Công tác lặp lại có thời gian thi công khác nhau 2
Hình 1.4: Công tác alpha và công tác beta 3
Hình 3.1: Các thông số về dự án 7
Hình 3.2: Các thông số về tổ đội 8
Hình 3.3: Sơ đồ khối tổng quát 9
Hình 3.4: Sơ đồ khối xác đinh tên tổ đội thực hiện công tác i ở đơn vị j 10
Hình 3.5: Sơ đồ khối tính toán ma trận DUij và CUij 11
Hình 3.6 : Sơ đồ khối tính toán theo bước 1 13
Hình 3.7 : Ví dụ sau khi xử lý xong bước 1 14
Hình 3.8: Sơ đồ khối tính toán theo bước 2 15
Hình 3.9:Ví dụ sau khi xử lý xong bước 2 16
Hình 3.10: Sơ đồ khối tính toán theo bước 3 giai đoạn 1 17
Hình 3.11: Sơ đồ khối tính toán theo bước 3 giai đoạn 2 19
Hình 3.12 : Sau khi thực hiện bước 3 (bước cuối cùng) 21
Hình 3.13 : Sơ đồ khối tính chi phí thực hiện dự án 23
Hình 4.1 : Giao diện chương trình 25
Hình 4.2 : Cửa sổ nhập số tổ đội lớn nhất và số đơn vị của dự án 25
Hình 4.3 : Giao diện nhập đơn vị, công tác và tổ đội 26
Hình 4.4 : Một ví dụ về nhập dữ liệu hoàn chỉnh 27
Hình 4.5 : Nhập chi phí gián tiếp của dựa án 28
Hình 4.6: Cửa sổ lưu thông tin dự án 28
Hình 4.7: Cửa sổ để mở một dự án có sẵn 29
Hình 4.8: Kết quả sau khi phân tích dữ liệu dự án 38
Hình 5.1: Số liệu ví dụ của Harris (1998) 40
Hình 5.2: Bổ sung chi phí gián tiếp cho ví dụ Harris 40
Hình 5.3: Tiến độ của dự án theo ví dụ của Harris sau khi chạy chương trình 41
Hình 5.4: Tiến độ dự án theo phương pháp RSM của Harris 41
Hình 5.5: Số liệu của dự án ở ví dụ 2 42
Hình 5.6: Tiến độ dự án của ví dụ 2 42
Trang 8Chương 1 GIỚI THIỆU
1.1 Dự án xây dựng nhiều công trình
Dự án xây dựng nhiều công trình là dự án có các đơn vị tương tự nhau Một đơn vị có thể đơn giản là một sàn của nhà cao tầng, một mẫu nhà trong dự án nhà ở hoặc một phần của mạng lưới đường ống Một ví dụ khác của dự án xây dựng nhiều công trình là những
dự án xây dựng về: đường cao tốc, đường băng, đường sắt, các cây cầu, đường hầm, hệ thống cống và 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) cũng được sử dụng để chỉ loại dự án này (Arditi và Albulak, 1979; Dressler, 1974; Mawdesley et al, 1980; và Selinger, 1980)[1,2,3,4] Trong dự án lặp lại, các công tác có thể lặp lại hoặc không lặp lại Ví dụ trong dự án xây dựng nhà cao tầng, công tác bê tông được lặp lại từ tầng này đến tầng khác nên có thể xem là công tác lặp lại, trong khi đó công tác đào đất chỉ được thực hiện một lần nên được xem là công tác không lặp lại
Hình 1.1: Mạng công tác trên nút dùng để biểu diễn một dự án với 2 đơn vị và 6 công tác
Theo Vorster và Bafna (1992)[5] thì dự án lặp lại chia làm 2 dạng Dạng đầu tiên là những công tác lặp lại có thời gian thi công giống nhau trong tất cả các đơn vị và được thể hiện thành các đường thằng như hình 1.1 Ví dụ: Một dự án nhà ở trong đó các công tác xây dựng nhà ở được lặp lại trong tất cả các đơn vị của 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 nhau trong các đơn vị như 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ác công đoạn là khác nhau
Đơn vi 2
Trang 9Hình 1.2: Công tác lặp lại có thời gian thi công giống nhau
Hình 1.3 : Công tác lặp lại có thời gian thi công khác nhau
Trong thực tế, thời gian thi công các công tác ở các đơn vị thường khác nhau bởi vì khối lượng ở các đơn vị khác nhau và năng suất lao động của các tổ đội cũng khác nhau
Ví dụ trong công tác đào đất, khối lượng đào đất trong mỗi đơn vị có thể khác nhau bởi vì địa hình, năng suất, loại đất ở từng đơn vị khác nhau
1.2 Các vấn đề trong lập tiến độ dự án xây dựng nhiều công trình
Việc lập tiến độ cho một dự án có nhiều đơn vị lặp lại trong đó các công tác được thực hiện bởi một hay nhiều tổ đội là rất phức tạp Để xác định được thời gian thực hiện của mỗi công tác cần phải kết hợp việc sử dụng nhiều tổ đội để thi công 1 công tác trong giải quyết các vấn đề sau:
Trang 101981, El-Rayaes và Moselhi 1997, Kavanagh 1985 và Reda 1990)[6,7,8,9] Như vậy, vấn
đề thứ nhất ở đây là việc lập tiến độ phải tối đa hiệu quả việc sử dụng tài nguyên
Trong dự án xây dựng lặp thường bao gồm cả công tác lặp lại và không lặp lại Mỗi loại công tác này đòi hỏi những kỹ thuật tính toán khác nhau Đối với những công tác không lặp lại thì có thể sử dụng các kỹ thuật lập tiến độ mạng truyền thống Tuy nhiên, các công tác lặp lại thi yêu cầu những kỹ thuật có xét đến sự làm việc của tổ đội Vấn đề thứ hai ở đây là phải kết hợp được hai kỹ thuật lập tiến độ trên
Vấn đề thứ 3 ở đây là phải tối ưu được thời gian gián đoạn của các tổ đội Theo Lương Đức Long 2009[10], thì công tác được chia làm 2 loại: loại 1 (gọi là alpha) là loại không cho phép gián đoạn, loại 2 (gọi là beta) là loại cho phép gián đoạn, theo Hình 1.3 thì công tác alpha là công tác 3 và công tác beta là công tác 3 Do đó, việc tối ưu hóa gián đoạn là tối ưu thời gian chết của tổ đội thi công công tác loại beta
Hình 1.4: Công tác alpha và công tác beta
1.3 Mục tiêu nghiên cứu
Mục tiêu của việc nghiên cứu là đưa ra được một mô hình để lập tiến độ cho dự án xây dựng có nhiều đơn vị lặp lại và có nhiều tổ đội cùng thi công một công tác Cụ thể là hoàn thành các mục tiêu sau:
1) Đưa ra thuật toán để lập tiến độ cho các công tác lặp lại và các công tác này được thực hiện bởi một hoặc nhiều tổ đội
2) Đưa ra thuật toán tối ưu thời gian gián đoạn của công tác beta dựa trên thuật toán của Lương Đức Long 2009[10] nhưng có xét tới nhiều tổ đội
3) Tính toán chi phí để thực hiện dự án
4) Từ các thuật toán đã đưa ra viết thành một chương trình để có thể tự động hóa việc lập tiến độ bằng máy tính
Trang 11Chương 2 LƯỢC KHẢO CÁC VẤN ĐỀ NGHIÊN CỨU
2.1 Giới thiệu
Lập tiến độ của dự án xây dựng là rất quan trọng trong cả 3 giai đoạn: trước, đang và
đã xây dựng Trước khi xây dựng, lập tiến độ để đưa ra thời gian hoàn thành và thời gian kết thúc cho mỗi công tác cũng như của cả dự án Những thông tin này thường phải cung cấp trong giai đoạn đấu thầu theo quy định của nhiều hợp đồng xây dựng Hơn nữa, lập tiến độ để xác định những tài nguyên cần thiết để có kế hoạch cung cấp hợp lý như: vật tư, nhân công, thiết bị và tiền Trong khi xây dựng, tiến độ đóng vai trò như là một đường lối chỉ đạo để thực hiện dự án Điều này cũng giúp phát hiện sớm những sai lệch và có các giải pháp hợp lý Sau khi xây dựng, tiến độ khi lập kế hoạch được so sánh với tiến độ hoàn công để giải quyết những yêu cầu và tranh luận có thể nay sinh Thêm vào đó, phân tích tiến độ khi hoàn công sẽ cung cấp những dữ liệu giá trị để sử dụng trong các dự án tương lai
2.2 Kỹ thuật lập tiến độ truyền thống
Trong chiến tranh thứ nhất, Henry L.Gantt đã đưa ra tiến độ ngang thể hiện sự liên hệ tiến độ công việc và thời gian (Antill và Woodhead 1990)[11] Những công tác được thể hiện bởi những thanh Chiều dài của thanh phụ thuộc vào thời gian thực hiện công tác Tiến độ ngang rất dễ đọc, dễ hiểu nhưng lại khó cập nhật, không thể hiện được mối liên hệ giữa các công việc, khó dự báo được sự tác động của các công việc thay đổi đối với thời hạn hoàn thành dự án Mặc dù sau này có sự xuất hiện của tiến độ mạng, tiến độ ngang vẫn tiếp tục được sử dụng rộng rãi trong công việc xây dựng bởi vì nó đơn giản dễ dùng và không cần có mối quan hệ qua lại giữa các công việc Tuy nhiên, vì tiến độ ngang không xác lập được mối quan hệ qua lại giữa các công việc nên mất nhiều thời gian để cập nhật tiến độ Nếu như có một công việc trong tiến độ ngang thay đổi thì sẽ không tự động điều chỉnh các công việc tiếp theo
Để tránh những giới hạn của tiến độ ngang, tiến độ mạng được đưa vào sử dụng để lập tiến độ cho các dự án xây dựng trong giai đoạn từ 1956-1958 (Antill và Woordhead 1990)[11] Phương pháp tiến độ mạng thể hiện được mối quan hệ giữa các công việc và lập được biểu đồ chi phí và tài nguyên theo thời gian Đây là một phương pháp có hiệu quả dùng để lập tiến độ quản lý tổng thể và tiến độ chi tiết trong thi công xây dựng Tiến độ mạng cũng chỉ ra công tác găng là những công tác mà sự thay đổi của nó ảnh hưởng đến thời gian thực hiện dự án Có hai phương pháp cơ bản để vẽ sơ đồ mạng: Sơ đồ mạng mũi tên (đôi khi được gọi là sơ đồ mạng công việc trên mũi tên – Activity On Arrow – AOA)
và sơ đồ mạng theo quan hệ ( đôi khi được gọi là sơ đồ mạng công việc trên nút – Activity
On Node – AON)
Khi áp dụng những kỹ thuật lập tiến độ truyền thống để lập tiến độ cho dự án xây dựng
có nhiều đơn vị lặp lại thì gặp nhiều khó khăn vì: 1) Phức tạp và dư tiến độ đối với những đơn vị lặp lại (Johnston et al 1986, Reda 1990, Suhail và Neale 1994, và Stradal và Cacha
Trang 12thực hiện 24 công tác Vậy để thể hiện dự án trên theo tiến độ mạng thì cần nhập vào 4.800 công tác
Phương pháp lập tiến độ truyền thống không thể duy trì sự liên tục của tổ đội Việc duy trì sự liên tục của tổ đội sẽ nâng cao hiệu quả sử dụng tài nguyên, đặc biệt là đối với các công tác lặp lại Các tổ đội thường di chuyển từ nơi này đến nơi khác khi thực hiện công tác, việc lập tiến độ nên đảm bảo tổ đội kết thúc công tác ở đơn vị này sẽ di chuyển lập tức đến đơn vị khác Đảm bảo các tổ đội làm việc liên tục sẽ làm nâng cao năng suất lao động
và tối thiểu hóa thời gian chết
2.3 Kỹ thuật lập tiến độ cho những dự án xây dựng lặp lại
Do những hạn chế của kỹ thuật lập tiến độ truyền thống trên, đã xuất hiện một số các phương pháp lập tiến độ khác áp dụng trong việc xây dựng các dự án lặp lại Những kỹ thuật này cố gắng đảm bảo sự làm việc liên tục của tổ đội
LOB (Line of Balance) được được hải quân Hoa Kỳ phát triển vào năm 1942 để điều hành và lập kế hoạch thực hiện các dự án giống nhau (Lumsden 1968)[15] Ban đầu, LOB được áp dụng vào ngành công nghiệp sản xuất với mục đích là xác định vật liệu và tốc độ cho mỗi giai đoạn sản xuất để đạt được sản lượng đầu ra yêu cầu Lập tiến độ cho các dự
án lặp lại giống như đối với một nhà máy sản xuất là duy trì sự hoạt động liên tục của tổ đội Vào năm 1966, kỹ thuật LOB được hiệu chỉnh để áp dụng vào xây dựng các dự án nhà cửa trong ngành công nghiệp xây dựng (trong báo cáo của National Building Agency – programming 1966) Sự phát triển của LOB được thể hiện ở hình dáng của biểu đồ, ở đó số các căn nhà được thể hiện trên trục tung và trục còn lại là thời gian Các công tác lặp lại thể hiện bằng các thanh xiên Arditi và Albulak (1979 và 1986) cho rằng một số lượng lớn những người lập tiến độ chỉ sử dụng CPM cho các dự án không lặp lại (non-repetitive project) bởi vì nó không hiệu quả khi sử dụng trong xây dựng các cổng trình lặp lại Họ kiểm định giả thuyết bằng việc sử dụng cả 2 phương pháp và so sánh kết quả của 2 kỹ thuật này Họ kết luận rằng phương pháp lập tiến độ LOB tốt hơn cho những dự án loại này
về thời gian thi công và đảm bảo sự làm việc thuận lợi cho các tổ đội Tuy nhiên, LOB dẽ
bị lỗi khi đánh giá thời gian hoàn thanh và mức độ chi tiết của LOB phải được đánh giá cẩn thận - đối với những sơ đồ thể hiện quá nhiều các công tác thì khó có thể hiểu được Thêm vào đó, họ chỉ ra rằng khó khăn chủ yếu khi chuẩn bị vẽ biểu đồ LOB là thể hiện các công tác gối đầu có tiến độ tương tự nhau và đề nghị sử dụng những màu khác nhau để thể hiện các công tác này Một giải pháp khác được Mansur (1989) và Hegazy et al (1993) sử dụng là chia LOB ra làm 2 phần (ví dụ: phần trên và phần dưới) Thể hiện các công tác lặp lại ở phần trên và những công tác không lặp lại ở phần dưới Làm như vậy sẽ tránh được sự chồng lên nhau của các công tác xảy ra trong cùng một thời gian Al sarraj (1990) đưa ra một công thức toán học cho LOB để tính toán thời gian bắt đầu và thời gian kết thúc của một công tác Hegazy et al (1993) đưa ra một chương trình máy tính cho LOB gọi là BAL
để lập tiến độ và điều khiển các dự án lặp lại Và còn nhiều phương pháp nữa như của Birrell (1980), Suhail và Neale (1994), Thabet và Beliveau (1994) Để lập tiến độ cho các
dự án lặp lại, kỹ thuật LOB đã có những ưu điểm hơn hẳn các kỹ thuật lập tiến độ truyền thống như đảm bảo duy trì sự làm việc liên tục, tiến độ phân phối tài nguyên và trình bày những thông tin về tiến độ
LSM – phương pháp lập tiến độ theo đường thẳng (Linear Scheduling Method) – tương
tự như LOB là đảm bảo sự làm việc liên tục của tổ đội nhưng nó áp dụng được cho các
Trang 13cơng tác giống nhau nhưng khối lượng cơng việc khác nhau (Selinger 1980; Johnston 1981; Chrzanowski và Jĩhnton 1986; Russell và Cáelton 1988) Sự khác nhau của LOB và LSM là sự thể hiện trên đồ thị Thay thế sự thể hiện 2 đường thẳng song song của LOB bằng một đường thẳng liên tục cĩ sự thay đổi về độ dốc Johnston (1981) đưa ra định dạng thể hiện của LSM cĩ 2 trục, Một trục thể hiện thời gian và trục vuơng gĩc với nĩ thể hiện các đơn vị lặp lại, các cơng tác lặp lại thì thể hiện theo đường chéo
Đơn vị lặp lại
Thời gian (ngày) 0
Đaøo đất Làm moùng Đơn vị lặp lại
Thời gian (ngày)
Hình 2.1: Phương pháp lập tiến độ LOB và LSM
RSM – phương pháp lập tiến độ vịng lặp (Repetitive Scheduling Method) đảm bảo khơng gián đoạn việc sử dụng tài nguyên và cĩ thể áp dụng được khi xây dựng theo phương đứng và phương ngang (Harris và Ioannou 1998)[16]
Nĩi chung, những phương pháp này đảm bảo sự làm việc liên tục của tổ đội, tối thiểu hĩa thời gian gián đoạn của nhân cơng và thiết bị Tuy nhiên những phương pháp này chỉ nhằm mục đích làm thời gian thực hiện dự án càng ngắn càng tốt dựa trên năng suất của tổ đội hoặc thiết bị đã biết trước cho nên thời gian thực hiện dự án cĩ thể là khơng ngắn nhất Bởi vì năng suất của tổ đội thi cơng hoặc các thiết bị khơng được xem là các biến cĩ thể biến đổi [26]
Trang 14Chương 3 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
Lập tiến độ một dự án có Q đơn vị và mỗi đơn vị có M công tác Khối lượng của các công tác trong các đơn vị có thể giống hoặc khác nhau hoặc không có (mỗi đơn vị có thể lặp lại toàn bộ hay một phần trong M công tác) Và mỗi công tác có thể được thực hiện bởi một hay nhiều tổ đội Bởi vì có sự di chuyển từ đơn vị này đến đơn vị khác nên đòi hỏi phải có một tiến độ hiệu quả đảm bảo sự làm việc liên tục của tổ đội Tuy nhiên việc duy trì sự làm việc liên tục của tổ đội có thể kéo dài thời gian hoàn tất dự án Vì vậy, ở đây
chúng ta chia công tác ra làm 2 loại: loại alpha (không cho phép sự gián đoạn), loại beta
(cho phép dự gián đoạn)[10].Vậy ta có:
M: số công tác trong dự án và có thể lặp lại toàn bộ hay một phần trong Q đơn vị của
dự án Giữa các công tác có sự ràng buộc lẫn nhau
Q: số đơn vị của dự án (Ví dụ: số căn nhà trong một dự án nhà ở)
Ci: số tổ đội cùng thực hiện công tác thứ i
Wij: khối lượng công việc của công tác i đơn vị j
DUij: thời gian thực hiện một đơn vị công việc của công tác i ở đơn vị j
CUij: chi phí thực hiện một đơn vị công việc của công tác i ở đơn vị j
Từ các thông số trên, mô hình tính toán phải tìm ra được thời gian bắt đầu và thời gian kết thúc của từng công tác và chi phí của dự án
Ví dụ cụ thể về dữ liệu đầu vào của một dự án:
Hình 3.1: Các thông số về dự án
Cột Act: thứ tự công tác
Cột Predecessors: ràng buộc công tác đứng trước
Trang 15Cột Unit 1 đến Unit 4 thể hiện khối lượng công việc của đơn vị 1 đến đơn vị 4 của công tác 1 đến công tác 5 - wij
Cột Attribute Type: loại công tác là alpha hay beta
Cột crews: thể hiện số lượng tổ đội cùng thực hiện công tác i
+ Dij là ma trận về thời gian thực hiện các công tác của dự án
ïï
ïþ
ïï
ïýü
ïï
ïî
ïï
ïí
ì
=
M j
iM ij
i
QM Qi
Q
ij
D D
D
D D
D
D D
D
D
1 1
11 1 1
Trang 16+ Ma trận ESij là thời gian bắt đầu thực hiện công tác
+ Ma trận EFij là thời gian kết thúc của công tác
3.3 Sơ đồ khối tổng quát
Trang 17Bước 1: Giả thiết tất cả các công tác đều là beta
Bước 2: Tính lại có xét đến công tác alpha
Bước 3: Tối ưu thời gian gián đoạn của công tác beta Trong bước này ta chia làm 2
giai đoạn:
Giai đoạn 1:
Cố định ESij cuối cùng mà tổ đội thực hiện Sau đó dịch chuyển các công tác ở các đơn
vị đứng trước có cùng tổ đội với nó về phía trước Tuy nhiên vẫn thỏa mãn các ràng buộc giữa các công tác
Giai đoạn 2:
Cố định ESij đầu tiên mà tổ đội thực hiện Sau đó nếu dịch chuyển các công tác ở các đơn vị đứng sau có cùng tổ đội với nó về phía sau mà làm cho liên tục được thì dịch chuyển
Sau đây là các mô hình cụ thể:
3.4 Sơ đồ khối xác định tổ đội thực hiện công tác – hàm namecrew(j, Ci)
Trong luận văn này ta quy định tổ đội 1 thực hiện công tác i ở đơn vị 1, tổ đội 2 thực hiện công tác i ở đơn vị 2 Tổ đội Ci thực hiện công tác i ở đơn vị k (Ci là số tổ đội cùng thực hiện công tác i) và ở đơn vị Ci+1 thì tổ đội 1 sẽ thực hiện công tác i
Ta có sơ đồ khối để xác định tổ đội thực hiện công tác như sau:
Trang 18Trong đó, mod là hàm lấy số dư của phép chia Ví dụ công tác i có 3 tổ đội thực hiện,
và ở đơn vị 4 thì đơn vị nào thực hiện?
Ta có: 4 mod 3 =1 (không phải bằng 0) nên đi theo mũi tên sai ta có:
namecrew = 4 mod 3 =1 Vậy tổ đội 1 thực hiện công tác i ở đơn vị 4
Nếu ở đơn vị 6 thì:
6 mod 3 = 0 nên đi theo mũi tên đúng:
namecrew = 6 mod 3 + 3 = 0+3 = 3 Vậy tổ đội 3 thực hiện công tác i ở đơn vị 6
3.5 Sơ đồ khối tính toán ma trận DU ij , CU ij , D ij và C ij
j = j + 1 Sai
Trang 19Ma trận DUij và CUij là ma trận về thời gian và chi phí để thực hiện một đơn vị khối lượng Trong sơ đồ khối này ta sử dụng biến j để thể hiện đơn vị và biết i để thể hiện công tác Vậy j sẽ chạy từ 1 đến Q (tổng số các đơn vị) và i sẽ chạy từ 1 đến M (tổng số các công tác) Ứng với mỗi tổ hợp của i, j ta sẽ có một công tác Sau đó ta sẽ xác định tổ đội
thực hiện công tác thông qua hàm namcrew(j, Ci) theo sơ đồ khối ở hình 3.4 với j là đơn vị
đang xét và Ci là tổng số tổ đội thực hiện công tác i Tiếp theo ta sẽ gán từng biến thời gian thực hiện một đơn vị khối lượng công việc lần lượt cho DUij và CUij Cứ như vậy cho đến khi i = M và j = Q thì kết thúc
3.6 Sơ đồ khối tính toán ES ij và EF ij theo bước 1
Khi tính toán ESij và EFij theo bước này ta giả thiết tất cả các công tác đều thuộc loại beta Lúc này thời gian ESij và EFij được xác định theo điều kiện ràng buộc với mối liên hệ
tổ đội đứng trước và mối liên hệ tổ đội Mối liên hệ tổ đội lúc này chỉ xét để đảm bảo một
tổ đội chỉ làm việc tại một vị trí trong một thời gian Tương tự như trên, i và j lần lượt là các biến của đơn vị và công tác của dự án Vậy j cũng sẽ chạy từ 1 đến Q (tổng số các đơn vị) và i cũng sẽ chạy từ 1 đến M (tổng số các công tác)
Tiếp theo sẽ xem xét công tác i có phải là công tác đầu tiên của đơn vị không Nếu đúng là không có công tác nào đứng trước thì sẽ tìm trong số các đơn vị đứng trước đơn vị nào có cùng tổ đội thi công với đơn vị j thì ta sẽ lấy thời gian bắt đầu của công tác i ở đơn
vị j bằng thời gian kết thúc của công tác đó Nhưng nếu không có công tác đứng trước thì thời gian bắt đầu của công tác i ở đơn vị j sẽ bằng 0
Nếu công tác i không phải là công tác đầu tiến của đơn vị j thì sẽ xác định số công tác đứng trước K và k sẽ là biến của số thứ tự các công tác đứng trước công tác i và k chạy từ
1 đến K Ứng với mỗi giá trị k ta sẽ lấy giá trị thời gian kết thúc (lưu ý là có cộng thời gian gián đoạn giữa công tác k và công tác i) và so sánh các thời gian này với nhau Thời gian lớn nhất sẽ là thời điểm bắt đầu của công tác i ở đơn vị j sau đó tính thời gian kết thúc của công tác i ở đơn vị j theo công thức (3.3) Sau khi xét tất cả các công tác đứng trước ta sẽ tiếp tục xét điều kiện về tổ đội Tương tự như trên, ta sẽ tìm đơn vị đứng trước gần đơn vị j nhất mà có cùng tổ đội thực hiện công tác i như ở đơn vị j thì sẽ lấy thời gian kết thúc của công tác đó so sánh với thời gian bắt đầu của công tác i ở đơn vị j nếu lớn hơn thì gán thời gian bắt đầu của công tác i ở đơn vị j bằng giá trị này Sau đó tính thời gian kết thúc của công tác i ở đơn vị j theo công thức (3.3)
Tóm lại, trong bước này ta sẽ có 3 vòng lặp, vòng lặp đầu tiên là vòng lặp về các các đơn vị của dự án, vòng lặp thứ 2 là vòng lặp về số công tác và vòng lặp thứ 3 là vòng lặp
về tổ đội – vòng lặp thứ 3 chỉ áp dụng đối với các công tác có ràng buộc về công tác đứng trước
Sau đây là hình minh họa của một dự án sau khi chạy xong bước 1 (lấy dữ liệu đầu vào
như hình 3.1 và hình 3.2) Ta thấy công tác 1, 4, 5 không được gián đoạn (alpha) nhưng do giả thiết ở bước này tất cả các công tác đều là beta Và thời gian thực hiện là 124.09 ngày
Trang 21Hình 3.7 : Ví dụ sau khi xử lý xong bước 1
Trang 223.7 Sơ đồ khối tính tốn ES ij và EF ij theo bước 2
BẮT ĐẦU
i =2
i là alpha Đúng
vị j bằng ở đơn vị l Max = 0
Đúng Max=EFill=l+1 l<Q+1 Đúng
Sai
D = 0
l = Q
Tổ đội thực hiện công tác i ở đơn
vị j bằng ở đơn vị l Đúng
EF =Max-Dil
ES = EF - Dil il ilBước 1
D = D + Dil
l = l - 1
l > 0 Đúng
Trang 23Khi tính toán ESij và EFij theo bước này ta chỉ xét đến công tác alpha Tương tự như trên, i và j lần lượt là các biến của đơn vị và công tác của dự án Nhưng trong bước này vòng lặp công tác sẽ chạy trước và i sẽ chạy từ 2 đến M (tổng số các công tác) vì công tác đầu tiên luôn liên tục cho dù là alpha hay beta Sau đó kiểm tra điều kiện thuộc tính của
công tác i nếu là alpha thì j sẽ chạy từ 1 đến Q (tổng số các đơn vị) Biến k sẽ chạy từ 1
đến Ci (tổng số tổ đội cùng thực hiện công tác i) Trong khi đó sẽ kiểm tra điều kiện:
k=manecrew(j,Ci) nếu đúng thì đặt Max=0 và tiến hành tìm thời gian kết thúc lớn nhất của
công tác cùng thực hiện công tác i nhưng ở đơn vị đứng trước đơn vị j bằng cách dùng biến
l chạy từ 1 đến Q, nếu thời gian kết thúc của công tác đó lớn hơn Max thì gán Max bằng giá trị đó
Sau khi xác định được Max (thời gian kết thúc lớn nhất của tổ đội cùng nằm trước i nhưng ở trước đơn vị j), ta gán D=0, l=Q chạy từ Q tới 1, tiếp theo kiểm tra điều kiện
k=namecrew(j,Ci) Nếu đúng thì gán EFij=Max-D và ESij=EFij-Dij, sau đó ta chạy lại toàn
bộ bước 1, đây là bước quan trọng vì khi ta dịch chuyển thời gian của công tác theo tổ đội thì có thể phá vỡ ràng buộc kỹ thuật của công tác Tiếp theo ta tính D=D+Dij Sau đó kiểm tra điều kiện kết thúc của vòng lặp, cứ như vậy cho đến khi thực hiện hết tất cả các vòng lặp
Trong sơ đồ khối này ta có 3 vòng lặp chính là vòng lặp về công tác, vòng lặp về đơn
vị của dự án và vòng lặp về tổ đội và trong 3 vòng lặp chính này vòng lặp về đơn vị của dự
án được lặp lại 2 lần
Xét ví dụ minh họa ta thấy thời gian thực hiện tăng lên từ 124.09 đến 143.64 và các công tác 1, 4, 5 không còn gián đoạn nữa Như vậy khi các công tác liên tục thì thời gian thực hiện dự án sẽ tăng lên
Hình 3.9:Ví dụ sau khi xử lý xong bước 2
Trang 243.8 Mơ hình tính tốn ES ij và EF ij theo bước 3
3.8.1 Giai đoạn 1
BẮT ĐẦU
i = M
i là beta Đúng
k = 1 num_repeat=0
j = Q
Min = Thời gian hoàn thành dự án
Tổ đội thực hiện công tác i
ở đơn vị j bằng k
num_repeat = num_repeat + 1 Đúng
num_repeat > 1 Đúng
l = j + 1
Tổ đội thực hiện công tác i
ở đơn vị l bằng k
l = i + 1
numPre = Số công tác đứng trước công tác l
m = 1
namePre = Tên công tác đứng trước thứ m
namePre = i Min > ES + lagvàmj
lag = thời gian gián đoạn giữa công tác
m và công tác i
mj
mj
Min = ES + lagmj mjĐúng
m = m + 1
m < num_pre + 1 Đúng
Sai
j = j - 1
j > 0 Đúng
k = k + 1
k < C + 1iĐúng
Sai
i = i - 1
i > 0 Đúng
Trang 25Vì thời gian gián đoạn chi có ở các công tác beta nên ta chỉ xét các công tác beta Như
đã trình bày ở trên, ở bước này ta cố định thời gian thi công mà tổ đội thực hiện ở đơn vị cuối cùng Sau đó dịch chuyển các công tác có cùng tổ đội thi công với nó ở các đơn vị trước về phía sau nhưng vẫn phải đảm bảo mối liên hệ giữa các công tác Cụ thể ta làm như sau
Gán biết i=M và i chạy từ M đến 1 (chạy từ công tác cuối cùng đến công tác đầu tiên)
Sau đó kiểm tra điều kiện công tác beta của công tác i Nếu đúng là công tác beta thì ta tiếp
tục gán k=1(k chay từ 1 đến Ci – số tổ đội cùng thực hiện công tác i) Tiếp theo ta sẽ kiểm tra điều kiện tổ đội đó phải thực hiện công tác i ít nhất 2 lần bằng cách đặt num_repeat=0, gán j=Q (j chạy từ Q tới 1) và Min bằng thời gian hoàn thanh dự án Nếu công tác i ở đơn
vị j nào được thực hiện bởi công tác k thì num_repeat=num_repeat+1 Nếu đúng là num_repeat>1 thì ta gán l=j+1 (l chạy từ j+1 đến Q) Nếu tổ đội thực hiện công tác i ở đơn
vị l giống đơn vị k – numcrew(l,Ci)=k – thì ta tiếp tục kiểm tra điều kiện Min>ESli nếu đúng thì gán M=ESli nếu sai thì ta tiếp tục vòng lặp l Sau khi chạy xong vòng lặp l ta đã xác định được Min tức là thời gian bắt đầu nhỏ nhất mà công tác k phải thực hiện của công tác i ở đơn vị đứng sau đơn vị j Phần này ta mới xét về ràng buộc của tổ đội
Phần tiếp theo ta sẽ xét đến ràng buộc về kĩ thuật tức là ràng buộc về công tác đứng sau công tác i Ta gán l=i+1 (m chạy từ i+1 đến Q), ứng với mỗi công tác l ta xác định được số công tác đứng trước – numPre – sau đó ta gán m=1 (m chạy từ 1 đến numPre), ứng với mỗi
m ta xác định được tên công tác đứng trước của công tác l (namePre) và thời gian gián đoạn giữa công tác l và công tác i Sau đó ta xét điều kiện namePre=i và Min>ESlj+lagljnếu đúng thì ta gán Min>ESlj+laglj Cứ như vậy cho đến khi hết vòng lặp m và vòng lặp l Sau khi hết vòng lặp l và vòng lặp m thì ta xác định được thời gian bắt đầu và kết thúc của công tác i ở đơn vị j như sau:
EFij=Min
ESij=EFij-Dij
Tiếp tục như trên cho đến khi chạy xong vòng lặp j và vòng lặp i thì kết thúc bước 3 giai đoạn 1
Trang 263.8.2 Giai đoạn 2
BẮT ĐẦU
i = M
i là betaĐúng
j = 2
numPre = Số côngtác đứng trướccông tác i
m = 1
namePre = Tên côngtác đứng trướcthứ m
vị j bằng ở đơn vị nĐúng
Max <= EF <= EFin ij Đúng EF = EFij in
Sai
n = n - 1
j > 0Đúng
Sai
j = j + 1
j < Q + 1Đúng
lag = thời gian giánđoạn giữa công tácnamePre và công tác i
namePre,j
Hình 3.11: Sơ đồ khối tính tốn theo bước 3 giai đoạn 2
Trang 27Cũng như giai đoạn 1, vì bước này là dùng để tối ưu thời gian gián đoạn của công tác
beta nên ta chỉ xét đối với những công tác beta Trong bước này ta cố định thời gian bắt
đầu và kết thúc của công tác đầu tiên mà tổ đội thực hiện Vì có nhiều tổ đội cùng thực hiện một công tác nên công tác đầu tiên mà tổ đội thực hiện sẽ không phải là công tác 1 Sau đó cũng ở công tác đó tìm trong các đơn vị đứng sau đơn vị gần nhất có cùng tổ đội thực hiện thì tiến hành dịch chuyển sao cho đảm bảo sự liên tục của tổ đội nhưng vẫn phải đảm bảo ràng buộc về mối liên hệ đứng trước của công tác, nếu như không đảm bảo liên tục thì không dịch chuyển
Ta tiến hành gán i=M (i chạy từ M – tổng số công tác - đến 1) và tiến hành kiểm tra
điều kiện công tác i là beta nếu đúng là beta thì tiếp tục gán j=2 (j chạy từ 2 đến Q – tổng
số các đơn vị)
Ta tiến hành tính thời gian kết thúc lớn nhất của các công tác đứng trước công tác i Tương tự như giai đoạn 1, ta tính số công tác đứng trước công tác i là numPre (số công tác đứng trước công tác i) Đặt thời gian kết thúc lớn nhất của các công tác đứng trước là Max=0 và m=1(m chạy từ 1 đến numPre), ứng với mỗi giá trị m ta xác định được tên công tác đứng trước namePre và thời gian gián đoạn lagnamePre,j giữa công tác namePre và công tác i Sau đó kiểm tra điều kiện: Max<EFnamePre,j+lagnamePre,j nếu đúng thì gán Max=EFnamePre,j+lagnamePre,j, sau khi hết vòng lặp m thì giá trị Max lúc này là thời gian kết thúc lớn nhất của các công tác đứng trước công tác i
Bước tiếp theo là tính thời gian kết thúc của công tác i ở đơn vị gần nhất phía trước j và
có cùng tổ đội thực hiện với công tác i ở đơn vị j Gán n=j-1 sau đó ta kiểm tra điều kiện tổ đội thực hiện công tác i ở đơn vị j giống ở đơn vị n nếu đúng thì ta kiểm tra tiếp điều kiện
ij
EF
Max£ £ (với EFin là thời gian kết thúc của công tác i ở đơn vị n nhưng có cùng
tổ đội thực hiện với công tác i ở đơn vị j và EFij là thời gian kết thúc của công tác i ở đơn
vị j) nếu đúng thì ta gán EFij=EFin và bỏ qua vòng lặp n còn không thì tiếp tục vòng lặp n
Cứ như vậy cho đến khi xong vòng lặp n, j, i (vòng lặp đơn vị n chạy từ j-1 đến 1, j vòng lặp đơn vị và j chạy từ j=2 đến Q, i là vòng công tác i chạy từ M đến 1)
Trang 28Hình 3.12 : Sau khi thực hiện bước 3 (bước cuối cùng)
Hình 3.12 là một ví dụ sau khi chạy xong bước 3 (bước cuối cùng) Ở đây ta thấy không có sự thay đổi như khi chạy xong bước 1 và 2 bởi vì ở công tác 2 bị ràng buộc bởi công tác đứng trước và đứng sau, còn ở công tác thì đã liên tục, không có thời gian gián đoạn
3.9 Tính toán chi phí thực hiện dự án
Theo Lương Đức Long [10] chi phí thực hiện dự án được tính như sau:
åå
++
=+
i
P Q
j ij D
C
1
0 1
Trong đó:
C1=C0+b.TP : chi phí gián tiếp
TP: là thời gian thực hiện dự án
b: chi phí gián tiếp của mỗi ngày
C0: chi phí ban đầu
Trang 29Từ đó ta thấy ma trận Cij là ma trận về chi phí thực hiện từng công tác trong các đơn vị của dự án Nên chi phí trực tiếp thực hiện dự án là tổng các Cij Vậy ta có sơ đồ khối tính chi phí của dự án như hình 3.13
Trong đó Max_duration là thời gian thực hiện dự án và Max_cost chi phí để thực hiện
dự án Gán i=1 và j=1 (i chạy từ 1 đến M – tổng số công tác – và j chạy từ 1 đến Q – tổng
số đơn vị của dự án), ứng với mỗi i, j giá trị i,j ta có Cij và EFij Từ đó ta có: Max_cost=Max_cost+Cij và kiểm tra điều kiện Max_duration<EFij nếu đúng thì gán Max_duration=EFij Sau khi chạy xong vòng lặp i, j (i=M, và j=Q) thì Max_cost lúc này là chi phí trực tiếp và Max_duration là thời gian thực hiện dự án Và ta tính chi phí thực hiện
dự án theo công thức: Max_cost=Max_cost+C0+b*Max_duration
Trang 30M ax_cost= M ax_ co st + C + b*M ax_duration0
Hình 3.13 : Sơ đồ khối tính chi phí thực hiện dự án
Trang 31Chương 4 CHƯƠNG TRÌNH LẬP TIẾN ĐỘ
4.1 Giới thiệu ngôn ngữ lập trình Visual Basic 6.0
Ngôn ngữ lập trình (programming language) là một hệ thống được ký hiệu hóa để miêu
tả những tính toán (qua máy tính) trong một dạng mà cả con người và máy đều có thể đọc
Visual Basic là gì? Phần "Visual" đề cập đến phương phàp được sử dụng để tạo giao diện đồ họa người dùng (Graphical User Interface hay viết tắc là GUI) Có sẵn những bộ phận hình ảnh, gọi là controls, có thể sắp đặt vị trí và quyết định các đặc tính của chúng trên một khung màn hình, gọi là form Phần "Basic" đề cập đến ngôn ngữ BASIC (Beginners All-Purpose Symbolic Instruction Code), một ngôn ngữ lập trình đơn giản, dễ học, được chế ra cho các khoa học gia (những người không có thì giờ để học lập trình điện toán) dùng
Visual Basic đã được ra từ MSBasic, do Bill Gates viết từ thời dùng cho máy tính 8 bits 8080 hay Z80 Hiện nay nó chứa đến hàng trăm câu lệnh (commands), hàm (functions)
và từ khóa (keywords) Rất nhiều commands, functions liên hệ trực tiếp đến MSWindows GUI Những người mới bắt đầu có thể viết chương trình bằng cách học chỉ một vài commands, functions và keywords Khả năng của ngôn ngữ này cho phép những người chuyên nghiệp hoàn thành bất kỳ điều gì nhờ sử dụng ngôn ngữ lập trình MSWindows nào khác
Người mang lại phần "Visual" cho Visual Basic là ông Alan Cooper Ông đã gói môi trường hoạt động của Basic trong một phạm vi dễ hiểu, dễ dùng, không cần phải chú ý đến
sự tinh xảo của Microsoft Windows, nhưng vẫn dùng các chức năng của Microsoft Windows một cách hiệu quả Do đó, nhiều người xem ông Alan Cooper là cha già của Visual Basic
Trang 324.2 Chương trình lập tiến độ
Trong phạm vi đề tài này chủ yếu là trình bày mô hình lập tiến độ, không đi sâu vào những kỹ thuật lập trình phức tạp của Visual Basic 6.0 Do đó, trong mục này chủ yếu là hướng dẫn sử dụng chương trình cũng như giải thích các ký hiệu, biểu tượng sẽ có trong quá trình sử dụng chương trình
4.2.1 Nhập dữ liệu
Hình 4.1 : Giao diện chương trình
Chọn File-New hoặc click vào icon để tạo một dự án mới
Một cửa sổ nhỏ sẽ xuất hiện để nhập vào số tổ đội lớn nhất cùng thực hiện một công tác và số đơn vị của dự án:
Hình 4.2 : Cửa sổ nhập số tổ đội lớn nhất và số đơn vị của dự án
Trang 33Sau đó chọn OK, màn hình chính sẽ xuất hiện như sau:
Hình 4.3 : Giao diện nhập đơn vị, công tác và tổ đội
Trong hình vẽ trên chỉ có một công tác nên khi muốn bổ sung công tác ta phải chọn Edit-Insertactivities hoặc click vào icon Công tác mới sẽ được bổ sung vào vị trí cuối cùng Còn xóa bỏ công tác thì click vào icon , khi click vào icon thì công tác cuối cùng
sẽ bị xóa Trong cột Predecessors ta nhập vào công tác đứng trước theo dạng sau:
XFS+Ydays,ZFS,TFS
Trong đó:
X,Y,Z: là số thứ tự của công tác trong cột Act
Y: là thời gian gián đoạn và trước thời gian gián đoạn phải có dấu “+”(cộng)
FS: ràng buộc giữa 2 công tác là (Finish – Start) (ở đây chỉ xét ràng buộc FS)
Lưu ý là giữa các công tác đứng trước phải cách nhau bằng dấu “,”(phẩy)
Trang 34Trong cột Attribute Type ta nhâp vào dạng công tác Khi click vào ô này sẽ xuất
ComboBox, click vào mũi tên ta được Sau đó chọn loại Alpha hay Beta tùy thuộc vào tính chất của từng loại công tác
Trong cột Crew ta nhập vào số tổ đội cùng thi công công tác đó
Trong bảng sau ta nhập thời gian và chi phí để thực hiện một đơn vị khối lượng
Trong cột Act là số thứ tự của công tác
Trong cột Crew 1 ci : ta nhập vào chi phí để thực hiện một đơn vị khối lượng của tổ đội
1 và ứng với số thứ tự công tác ở cột Act Trong các ô này chỉ chấp nhận giá trị dạng số
Trong cột Crew 1 di : ta nhập vào thời gian để thực hiện một đơn vị khối lượng của tổ đội 1 và ứng với số thứ tự công tác ở cột Act Trong các ô này chỉ chấp nhận giá trị dạng
số Sau đây là một ví dụ sau khi nhập dữ liệu hoàn chỉnh:
Hình 4.4 : Một ví dụ về nhập dữ liệu hoàn chỉnh
Ngoài ra để tính chi phí của dự án ta phải nhập vào chi phí gián tiếp và chi phí trực tiếp:
Trang 35Hình 4.5 : Nhập chi phí gián tiếp của dựa án
Sau khi thực hiện xong bước này thì phần nhập dữ liệu đã hoàn tất Ta có thể lưu dữ liệu thành một tập tin Ở đây, ta lấy cấu trúc tập tin cơ sở dữ liệu của Microsoft Access để lưu thông tin của dự án Do đó, có thể sửa các thông tin này trong Microsoft Access
Hình 4.6: Cửa sổ lưu thông tin dự án
Để lưu thông tin dự án ta chọn File-Save Nếu là một tập tin mới thì sẽ xuất hiện của sổ như hình trên Còn nếu đã có tập được lưu trước đó thì chương trình chỉ cập nhật những dữ liệu hiện tại vào tập tin đó Sau đó, nhập tên tập tin vào ô File name và chọn Save Nếu tập tin đã tồn tại, ta có thể lưu thành một tập tin khác bằng cách chọn File-Save as thì của sổ như trên cũng sẽ xuất hiện Ngoài ra, ta cũng có thể click vào biểu tượng để lưu dự án thay cho việc chọn File-Save
Để mở một dự án đã có ta chọn File – Open hoặc click vào biểu tượng để mở tập
Trang 36đó giai đoạn này chủ yếu là tính toán về số Sau đây là các đoạn mã của các sơ đồ khối:
Theo sơ đồ khối xác định tổ đội thực hiện công tác – hàm namecrew(j, Ci):
Function namecrews(numberunit, numbercrews As Variant) As Integer
If numberunit Mod numbercrews = 0 Then
namecrews = numberunit Mod numbercrews + numbercrews
Trang 37Public Sub create_matrix_CD()
Dim i, j As Integer
Dim num_crews, name_crews As Integer
Dim di, ci As Single
Frmmain.MSF3.Cols = Frmmain.MSF1.Rows - 1
Frmmain.MSF3.Rows = Frmmain.MSF1.Cols - 4
For i = 1 To Frmmain.MSF1.Rows - 1
For j = 1 To Frmmain.MSF1.Cols - 4
num_crews = Frmmain.MSF1.TextMatrix(i, Frmmain.MSF1.Cols - 1)
name_crews = namecrews(j, num_crews)
di = Frmmain.MSF2.TextMatrix(i, name_crews * 2) * Frmmain.MSF1.TextMatrix(i, j + 1)
Trang 38Public Sub constrain_crew_pre()
Dim i, j, k, l, i_crew As Integer
Dim numPre, num_crews, itam, name_crew, name_unit_max As Integer
Dim Max, Stam, D_act, D_acti, chenhlech, Max_EF_crew, D_crew_act, D_crew_act_temp As Single
Dim namePre As String
If ES(j, namePre) <> "" Then
Stam = EF(j, namePre)
If Val(lag_Pre(Frmmain.MSF1.TextMatrix(i, 1), k)) <> 0 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
Trang 39Theo sơ đồ khối tính toán ESij và EFij theo bước 2
Public Sub constrain_alpha()
Dim i, j, k, l, i_crew As Integer
Dim numPre, num_crews, itam, name_crew, name_unit_max As Integer
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 = 2 To Frmmain.MSF1.Rows - 1
If LCase(Frmmain.MSF1.TextMatrix(i, Frmmain.MSF1.Cols - 2)) = LCase("alpha") Then
For j = 1 To Frmmain.MSF1.Cols - 4
Trang 40name_crew = namecrews(j, Frmmain.MSF1.TextMatrix(i, Frmmain.MSF1.Cols - 1))
If name_crew = i_crew Then
' If Max_EF_crew < ES(k, i) + D_crew_act_temp Then
' Max_EF_crew = ES(k, i) + D_crew_act_temp