Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 152 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
152
Dung lượng
6,53 MB
Nội dung
Đại học Quốc Gia Tp Hồ Chí Minh TRƯỜNG ĐẠI HỌC BÁCH KHOA X W NGÔ MẠNH HUY DỰ BÁO XÁC SUẤT HOÀN THÀNH DỰ ÁN BẰNG ĐƯỜNG CONG NGẪU NHIÊN Chuyên ngành : CÔNG NGHỆ VÀ QUẢN LÝ DỰ ÁN XÂY DỰNG Mã số ngành : 60.58.90 LUẬN VĂN THẠC SĨ Tp.HỒ CHÍ MINH, tháng 12 Năm 2008 CƠNG TRÌNH ĐƯỢC HOÀ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 : TS ĐINH CÔNG TNNH Cán chấm nhận xét : Cán chấm nhận xét : 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 TRƯỜNG ĐẠI HỌC BÁCH KHOA PHÒNG ĐÀO TẠO SĐH CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM ĐỘC LẬP – TỰ DO – HẠNH PHÚC Tp.HCM, ngày ……tháng ……năm 2009 NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên : NGÔ MẠNH HUY Ngày, tháng, năm sinh : 26/ 01/ 1983 Chuyên ngành : CÔNG NGHỆ VÀ QUẢN LÝ XÂY DỰNG Phái : Nam Nơi sinh : Vĩnh Long MSHV : 00805172 I TÊN ĐỀ TÀI : DỰ BÁO XÁC SUẤT HOÀN THÀNH DỰ ÁN BẰNG ĐƯỜNG CONG NGẪU NHIÊN II NHIỆM VỤ VÀ NỘI DUNG : - Tổng quan nghiên cứu trước lĩnh vực kiểm soát dự án Tìm hiểu phương pháp luận sở lý thuyết đường cong ngẫu nhiên (Stochastics S Curves) Ứng dụng đường cong ngẫu nhiên (Stochatics S Curves) để kiểm soát rủi ro triển khai dự án III NGÀY GIAO NHIỆM VỤ : 15/06/2008 IV NGÀY HOÀN THÀNH NHIỆM VỤ : 30/11/2008 V HỌ VÀ TÊN CÁN BỘ HƯỚNG DẪN: TS ĐINH CÔNG TNNH 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 CN BỘ MƠN QL CHUYÊN NGÀNH TÓM TẮT Luận văn giới thiệu phương pháp để đánh giá thực dự án dự báo mức độ rủi ro chi phí tiến độ so với kế hoạch đề Phương pháp sử dụng đường cong ngẫu nhiên S (Stochatics S Curves) thay cho đường cong S xác định Đường cong ngẫu nhiên S (Stochatics S Curves) xác định dựa thay đổi chi phí thời gian thực công tác Hiện nay, đường cong ngẫu nhiên S (Stochatics S Curves) đường cong dựa khối lượng công việc thực Đường cong ngẫu nhiên (Stochatics S Curves) cung cấp phân phối xác suất thời gian chi phí ứng với thời điểm thực dự án Mặt khác, phương pháp đưa phân phối xác suất dự báo thời gian chi phí thời điểm thực dự án tương lai thông số để đánh giá dự án Để đánh giá ưu khuyết điểm phương pháp này, luận văn so sánh kết phương pháp với kết hai phần mềm quản lý dự án phổ biến MS Project Pertmaster thông qua vài ví dụ cụ thể ABSTRACT The thesis presents a new method to evalueted the performance of project and to forcaste the risk of cost and schedule The method uses the concept of Stochatics S curves (SS Curves) as an alternative determinirics S Curves The Stochatics S Curves is based on the defined varibility in duration and cost of the individual activites within the process Nowaday, the Stochatics S Curves is the unique Progress Based S Curves The SS Curves provides the probability distribution for budget and time required at every seleted point of intermediate completion Besides it also gives the forcasted probability distribution of elapsed time and cumulative cost in future completion of project To evalute the advantages and disavantages of this method, the thesis compares the result of this method with the result of two popular management softwares (MS Project and Pertmaster – Primavera) in some specific example Lời cảm ơn Tôi xin cám ơn tất người giúp đạt mục tiêu Đầu tiên tơi xin cảm ơn gia đình, người cho tơi hỗ trợ tuyệt vời thời gian, tiền bạc, động viên mơi trường thuận lợi suốt q trình học tập làm luận văn Tôi xin chân thành cảm ơn sâu sắc thầy hướng dẫn luận văn, TS.Đinh Công Tịnh tận tình hướng dẫn, giúp đỡ quan tâm sâu sắc đến em suốt trình thực luận văn Thầy giúp đỡ đưa dẫn kịp thời lúc cần Tôi xin chân thành cám ơn q thầy Ngành Cơng Nghệ Quản Lý Xây Dựng, khoa kỹ thuật xây dựng, trường Đại Học Bách Khoa Tp.Hồ Chí Minh tận tình giảng dạy truyền đạt kiến thức kinh nghiệm quí báu suốt thời gian học tập nghiên cứu trường Xin gửi lời cảm ơn chân thành đến bạn bè giúp đỡ, chia sẻ kinh nghiệm, động viên tơi suốt q trình học tập thực luận văn Xin chân thành cám ơn đồng nghiệp tất bạn học viên lớp QLXD2006, người học tập chia sẻ kinh nghiệm suốt thời gian học tập nghiên cứu Tp Hồ Chí Minh, ngày 30 tháng 11 năm 2008 Người thực luận văn Ngô Mạnh Huy MỤC LỤC CHƯƠNG : MỞ ĐẦU 1.1 Đặt vấn đề 1.2 Nội dung nghiên cứu 1.3 Phạm vi nghiên cứu 1.4 Phương pháp nghiên cứu 1.5 Sơ đồ nghiên cứu CHƯƠNG : TỔNG QUAN 2.1 Phương pháp kết hợp chi phí tiến độ khối lượng công việc 2.2 Phương pháp dựa trục thời gian (Time Based S-Curves) 2.3 Phương pháp giá trị đạt (Earned Value Method) .11 2.3.1 Khái niệm 11 2.3.2 Phương pháp luận sở lý thuyết phương pháp Earned Valued 11 2.3.3 Các trường hợp xảy xem xét dự án 13 2.3.4 Phân tích Earned Valued phần mềm MS Project .16 2.3.5 Một vài hạn chế phân tích Earned value MS Project 17 2.4 Mô Monte Carlo 18 2.4.1 Cơ sở lý thuyết mô Monte Carlo .18 2.4.2 Mô Montel-Carlo phần mềm Pertmaster .20 2.4.3 Một vài hạn chế phần mềm Pertmaster 22 CHƯƠNG : PHƯƠNG PHÁP LUẬN VÀ CƠ SỞ LÝ THUYẾT CỦA ĐƯỜNG CONG NGẪU NHIÊN S (STOCHATICS S CURVES) 24 3.1 Khái niệm: .24 3.2 Các đặc trưng phân phối xác suất 24 3.2.1 Phân phối xác suất biến ngẫu nhiên liên tục .24 3.2.2 Hàm phân phối tam giác ( Triangle distribution) 27 3.3 Đường cong tiến trình S (Progress Based S-Curves) 28 3.4 Kiểm soát dự án đường cong ngẫu nhiên S (Stochastics S Curves) 32 3.5 Dự báo xác suất thực dự án đường cong ngẫu nhiên S (Stochastics S Curves) 36 CHƯƠNG : ỨNG DỤNG ĐƯỜNG CONG NGẪU NHIÊN S (STOCHATICS S CURVES) ĐỀ KIỂM SOÁT DỰ ÁN 39 4.1 Phần mềm QLXD ver 1.0 39 4.1.1 Khái niệm 39 4.1.2 Tính tốn sở liệu phần mềm SQL 2005 39 4.1.3 Một vài giao diện chương trình phần mềm Visual Basic 6.0 .43 4.2 Ví dụ .50 4.2.1 Giới thiệu toán .50 4.2.2 Lập kế hoạch kiểm soát dự án phần mềm MS-Project 52 4.2.3 Lập kế hoạch kiểm soát dự án phần mềm Pertmaster 54 4.2.4 Lập kế hoạch kiểm soát dự án phần mềm QLXD ver 1.0 .59 4.2.5 Nhận xét giải thích kết 64 4.3 Ví dụ .66 4.3.1 Giới thiệu toán .66 4.3.2 Lập kế hoạch kiểm soát dự án phần mềm MS-Project 68 4.3.3 Lập kế hoạch kiểm soát dự án phần mềm Pertmaster 70 4.3.4 Lập kế hoạch kiểm soát dự án phần mềm QLXD ver 1.0 .75 4.3.5 Nhận xét giải thích kết 81 4.4 Ví dụ .82 4.4.1 Giới thiệu toán .82 4.4.2 Lập kế hoạch kiểm soát dự án phần mềm MS-Project 85 4.4.3 Lập kế hoạch kiểm soát dự án phần mềm Pertmaster 87 4.4.4 Lập kế hoạch kiểm soát dự án phần mềm QLXD ver 1.0 .93 4.4.5 Nhận xét giải thích kết 99 CHƯƠNG : KẾT LUẬN VÀ KIẾN NGHỊ 101 5.1 Kết luận kết nghiên cứu .101 5.2 Kiến nghị chung 102 CHƯƠNG : MỞ ĐẦU 1.1 Đặt vấn đề Với sách đối ngoại mở cửa, Việt Nam tạo khả tiếp cận với nguồn tài cho đầu tư phát triển, nguồn vốn vay khoản tài trợ khơng hồn lại Tất điều kiện thuận lợi với thay đổi đáng kể qui định pháp luật quản lý xây dựng tạo nhiều hội cho ngành xây dựng phát triển Chính năm gần ngành xây dựng nước ta có bước phát triển mạnh mẽ Cùng với phát triển kinh tế quốc dân, vị trí ngành xây dựng nghiệp phát triển kinh tế xã hội ngày trở nên quan trọng Kinh tế giới ngày phát triển theo xu hướng tồn cầu hố, khơng có quốc gia tách khỏi phần lại giới Hoạt động kinh doanh công ty chịu tác động xu hướng toàn cầu Trong tình hình bất ổn kinh tế giới nay, việc đánh giá rủi ro kinh doanh trở nên cấp thiết Đặc biệt cơng ty xây dựng tìm ẩn nhiều rủi ro Quá trình thực dự án xây dựng tiềm ẩn nhiều rủi ro, giai đoạn thi công Giai đoạn thi công giai đoạn dài nhạy cảm tác động nhiều yếu tố so với giai đoạn khác dự án đầu tư xây dựng Vai trò nhà thầu giai đoạn vơ quan trọng Hàng năm , có hàng trăm nhà thầu từ kinh nghiệm đời thất bại việc kinh doanh Những thiệt hại làm thất phát sinh kinh phí hàng nghìn tỉ đồng Chính việc đánh giá rủi ro q trình thi cơng trở nên vô quan trọng Quan tâm đến việc phân tích rủi ro cho dự án đặc biệt dự án đầu tư xây dựng cảnh báo trọng năm gần – đặc biệt giai đoạn thi công Trong giai đoạn thi cơng, q trình kiểm sốt chi phí, tiến độ cơng trình xây dựng cịn gặp nhiều khó khăn Hiện nay, hầu hết nhà thầu thi công nước không ước lượng mức độ rủi ro thời gian set @CompleteCost = 0; set @Progress = 0; set @Expectcost = 0; set @k = 1; while (@k < @Totaltask + 1) begin set @prog = 0; set @exc = 0; if ( exists ( select * from TASKRANDOM where @TimeSim > ES and MaTask = @k )) begin if ( exists ( select * from TASKRANDOM where not @TimeSim < EF and MaTask = @k )) begin select @prog = TASK.workpercent*100 , @Exc = TASKRANDOM.cost from TASKRANDOM,TASK where TASKRANDOM.Matask = @k and TASK.Task = TASKRANDOM.TASK end else if (exists ( select * from TASKRANDOM where @TimeSim < )) begin EF and @TimeSim > ES and MaTask = @k select @Prog =TASK.workpercent*(@TimeSim - TASKRANDOM.ES) / TASK.duration *100 , @Exc = TASKRANDOM.Cost * (@TimeSim - TASKRANDOM.ES) / TASKRANDOM.duration From TASKRANDOM,TASK where TASKRANDOM.MaTask = @k and TASK.Task = TASKRANDOM.TASK end end else begin set @prog = 0; set @exc = 0; end set @progress = @progress + @Prog set @ExpectCost = @Expectcost + @Exc set @k = @k +1; end insert into PROGRESSRANDOM values (@i,@Progress,@TimeSim,@Expectcost) set @i = @i + 1; end set @j = @j + 1; end end Chen gia tri vao bang PROGRESSSAVETIMERANDOM, PROGRESSSAVECOSTRANDOM set @irandom= @slrandom; insert into PROGRESSSAVETIMERANDOM values (@irandom,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) insert into PROGRESSSAVECOSTRANDOM values (@irandom,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) set @j=1; while (@j < 30) begin set @Progress = master.dbo.CalProgress(@j,@progressactual); set @progressName = master.dbo.CalProgressName(@j); exec ProgressDataRandomRow @slrandom,@Range,@Progress,@progressName; set @j=@j+1; end end 1.7 CalculationStatistic drop proc CalculationStatisticRow; if exists (select * from sysobjects where name='CalculationStatisticRow') drop proc CalculationStatisticRow Create procedure CalculationStatisticRow (@curRow int, @countrandom int, @Progress decimal(7,2), @progressName char(18)) as begin declare @queryStr char(8000) set @queryStr = 'declare @mintimetemp decimal(7,2) ;' + 'declare @maxtimetemp decimal(7,2) ;' + 'declare @meantimetemp decimal(7,2) ;' + 'declare @sigmatimetemp decimal(7,2) ;' + 'declare @mincosttemp float ;' + 'declare @maxcosttemp float ;' + 'declare @meancosttemp float ;' + 'declare @sigmacosttemp float ;' + 'declare @i int ;' + 'declare @sumtime float ;' + 'declare @sumcost float ;' + 'declare @curVal float ;' + 'select @maxtimetemp=MAX(progress' + @progressName + ') from PROGRESSSAVETIMERANDOM;' + 'select @meantimetemp=AVG(progress' + @progressName + ') from PROGRESSSAVETIMERANDOM;' + 'select @mintimetemp=Min(progress' + @progressName + ') from PROGRESSSAVETIMERANDOM;' + 'select @maxcosttemp=MAX(progress' + @progressName + ') from PROGRESSSAVECOSTRANDOM;' + 'select @meancosttemp=AVG(progress' + @progressName + ') from PROGRESSSAVECOSTRANDOM;' + 'select @mincosttemp=Min(progress' + @progressName + ') from PROGRESSSAVECOSTRANDOM;' + 'Set @maxcosttemp=round(@maxcosttemp,2);'+ 'Set @meancosttemp=round(@meancosttemp,2);'+ 'Set @mincosttemp=round(@mincosttemp,2);'+ 'Set @i = ;' + 'Set @sumtime = ;' + 'Set @sumcost = ;' + 'While @i < ' + cast(@countrandom as varchar) + 'begin ' + 'select @curVal=progress'+ @progressName + 'from PROGRESSSAVETIMERANDOM where maRandom = @i; ' + 'set @curVal = (@curVal - @meantimetemp);' + 'set @sumtime=@sumtime + (@curVal*@curVal);' + 'select @curVal=progress' + @progressName + 'from PROGRESSSAVECOSTRANDOM where maRandom = @i;' + 'set @curVal = (@curVal - @meancosttemp);' + 'set @sumcost=@sumcost + (@curVal*@curVal);' + 'set @i=@i+1;' + 'end ' + 'set @sigmatimetemp=round(case when (' + cast(@countrandom as varchar) + ' > 1) then sqrt(@sumtime/(' + cast(@countrandom as varchar) + '-1)) else end,2);' + 'set @sigmacosttemp=round(case when (' + cast(@countrandom as varchar) + ' > 1) then sqrt(@sumcost/(' + cast(@countrandom as varchar) + '-1)) else end,2);' + 'insert into PROGRESSPLANDRAW values(' + cast(@curRow as varchar) + ',' + cast(@Progress as varchar) + ',@mintimetemp,@meantimetemp,@maxtimetemp,@sigmatimetemp,@mincosttemp,@meancosttemp,@maxcosttemp,@sigmacosttemp);' select @queryStr; execute (@queryStr); end drop proc CalculationStatistic if exists (select * from sysobjects where name='CalculationStatistic') drop proc CalculationStatistic Create procedure CalculationStatistic as begin declare @Progress decimal(7,2) declare @progressactual decimal(7,2) declare declare declare declare declare @countrandom int @count int @i int @j int @progressName varchar(18) select @progressactual = MAX(Progress) from PROGRESSTEMP; select @countrandom = count(*) from PROGRESSSAVETIMERANDOM; set @j=1; while @j < 30 begin set @Progress = master.dbo.CalProgress(@j,@progressactual); set @progressName = master.dbo.CalProgressName(@j); exec CalculationStatisticRow @j, @countrandom, @Progress, @progressName; set @j = @j + 1; end end 1.8 CalcPrecessRangeTime - Drop Procedure CalculationRangetimeRow if exists (select * from sysobjects where name='CalculationRangetimeRow') drop proc CalculationRangetimeRow create procedure CalculationRangetimeRow (@curRow int,@CurProgressName char(6)) as begin declare @queryStr char(8000) set @queryStr = 'declare @curMinValue decimal(7,2);'+ 'declare @curMaxValue decimal(7,2);'+ 'declare @curAvgValue decimal(7,2);'+ 'declare @curPrecessValue decimal(7,2);'+ 'declare @CurProgressmax decimal(7,2);'+ 'declare @CurProgressmin decimal(7,2);'+ 'declare @freq int ;'+ 'declare @timeValue decimal(7,2);'+ 'declare @freqtimeValue float;'+ 'declare @i int;'+ 'declare @countrandom int;'+ 'select @countrandom = count(*) from PROGRESSSAVETIMERANDOM;'+ 'select @CurProgressmax=MAX(progress'+@CurProgressName+') from PROGRESSSAVETIMERANDOM;' + 'select @CurProgressmin=MIN(progress'+@CurProgressName+') from PROGRESSSAVETIMERANDOM;' + 'Print @CurProgressmax;' + 'Print @CurProgressmin;' + 'if (@CurProgressmax - round(@CurProgressmax,0))>0.5 '+ 'begin '+ 'set @CurProgressmax = round(@CurProgressmax,0)+1 ;'+ 'end '+ 'else '+ 'begin '+ 'set @CurProgressmax = round(@CurProgressmax,0) ;'+ 'end '+ 'if (@CurProgressmin - round(@CurProgressmin,0))>0.5 '+ 'begin '+ 'set @CurProgressmin = round(@CurProgressmin,0)+1 ;'+ 'end '+ 'else '+ 'begin '+ 'set @CurProgressmin = round(@CurProgressmin,0) ;'+ 'end '+ 'Print @CurProgressmax;' + 'Print @CurProgressmin;' + 'set @timeValue=@CurProgressmax-@CurProgressmin ; ' + 'set @freq = @timeValue;' + 'Print @freq;' + 'if (@timeValue+1 < 50) ' + 'begin ' + 'set @freq = @timeValue +1;' + 'set @timeValue = 1;' + 'end ' + 'if (@timeValue > 50) ' + 'begin ' + 'set @freq = 50;'+ 'set @timeValue = @timeValue/@freq;' + 'end ' + 'Print @freq;' + 'set @i=1;' + 'select @curMaxValue = MIN(progress'+@CurProgressName+') from PROGRESSSAVETIMERANDOM;'+ 'select @curMinValue = MIN(progress'+@CurProgressName+') from PROGRESSSAVETIMERANDOM;'+ 'if @freq 0.5 '+ 'begin '+ 'set @CurProgressmin = round(@CurProgressmin,0)+1 ;'+ 'end '+ 'else '+ 'begin '+ 'set @CurProgressmin = round(@CurProgressmin,0) ;'+ 'end '+ 'Print @CurProgressmax;' + 'Print @CurProgressmin;' + 'set @costValue=@CurProgressmax-@CurProgressmin ; ' + 'set @freq = @costValue;' + 'Print @freq;' + 'if (@costValue+1 < 50) ' + 'begin ' + 'set @freq = @costValue +1;' + 'set @costValue = 1;' + 'end ' + 'if (@costValue > 50) ' + 'begin ' + 'set @freq = 50;'+ 'set @costValue = @costValue/@freq;' + 'end ' + 'Print @freq;' + 'set @i=1;' + 'select @curMaxValue = MIN(progress'+@CurProgressName+') from PROGRESSSAVECOSTRANDOM;'+ 'select @curMinValue = MIN(progress'+@CurProgressName+') from PROGRESSSAVECOSTRANDOM;'+ 'if @freq