Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 226 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
226
Dung lượng
22,92 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ NÔNG NGHIỆP VÀ PTNT TRƯỜNG ĐẠI HỌC THỦY LỢI NGUYỄN LAN HƯƠNG PHÂN TÍCH VÀ ĐÁNH GIÁ AN TỒN CƠNG TRÌNH ĐẦU MỐI HỒ CHỨA THỦY LỢI VIỆT NAM THEO LÝ THUYẾT ĐỘ TIN CẬY LUẬN ÁN TIẾN SĨ KỸ THUẬT HÀ NỘI, NĂM 2017 BỘ GIÁO DỤC VÀ ĐÀO TẠO BỘ NÔNG NGHIỆP VÀ PTNT TRƯỜNG ĐẠI HỌC THỦY LỢI PHÂN TÍCH VÀ ĐÁNH GIÁ AN TỒN CƠNG TRÌNH ĐẦU MỐI HỒ CHỨA THỦY LỢI VIỆT NAM THEO LÝ THUYẾT ĐỘ TIN CẬY Chun ngành: Xây dựng cơng trình thủy Mã số: 62-58-40-01 NGƯỜI HƯỚNG DẪN KHOA HỌC PGS.TS NGUYỄN QUANG HÙNG PGS.TS NGUYỄN HỮU BẢO HÀ NỘI, NĂM 2017 LỜI CAM ĐOAN Tác giả xin cam đoan cơng trình nghiên cứu thân tác giả Các kết nghiên cứu kết luận luận văn trung thực, không chép từ nguồn hình thức Việc tham khảo nguồn tài liệu thực trích dẫn ghi nguồn tài liệu tham khảo quy định Tác giả luận án Chữ ký Nguyễn Lan Hương i LỜI CẢM ƠN Tác giả xin bày tỏ lòng biết ơn sâu sắc đến cố GS.TS Nguyễn Văn Mạo, PGS.TS Nguyễn Hữu Bảo PGS.TS Nguyễn Quang Hùng thầy hướng dẫn trực tiếp tác giả thực luận án Xin cảm ơn thầy dành nhiều cơng sức, trí tuệ thời gian tác giả thực luận án Tác giả xin trân trọng cám ơn nhà khoa học trường có đóng góp q báu, chân tình thẳng thắn để tác giả hoàn thiện luận án Tác giả xin bày tỏ lòng biết ơn đến Trường Đại học Thủy lợi Tác giả trân trọng cám ơn Vụ Đại học Sau Đại học - Bộ Giáo dục Đào tạo, Khoa Cơng Trình, Bộ mơn Thủy cơng, Phòng Đào tạo Đại học sau Đại học - Trường Đại học Thủy lợi, có giúp đỡ quý báu cho tác giả trình thực nghiên cứu Tác giả xin bày tỏ lịng biết ơn đến đồng nghiệp tác giả Bộ môn Thủy công gánh vác khối lượng công việc để tác giả có thời gian hồn thành luận án Cuối cùng, tác giả xin chân thành cám ơn bạn bè, đồng nghiệp gia đình ln động viên, khích lệ để tác giả hồn thành cơng trình nghiên cứu ii MỤC LỤC DANH MỤC CÁC HÌNH ẢNH vii DANH MỤC BẢNG BIỂU xi DANH MỤC CÁC KÝ HIỆU VIẾT TẮT VÀ GIẢI THÍCH THUẬT NGỮ xiii MỞ ĐẦU 1 Tính cấp thiết đề tài Mục tiêu nghiên cứu Đối tượng phạm vi nghiên cứu Cách tiếp cận phương pháp nghiên cứu Ý nghĩa khoa học thực tiễn đề tài .3 Cấu trúc luận án CHƯƠNG TỔNG QUAN VỀ TÌNH HÌNH NGHIÊN CỨU HỒ CHỨA VÀ ỨNG DỤNG LÝ THUYẾT ĐỘ TIN CẬY ĐỂ ĐÁNH GIÁ AN TỒN CƠNG TRÌNH THỦY LỢI .5 1.1 Đầu mối hồ chứa thủy lợi Việt Nam .5 1.1.1 Hiện trạng đầu mối hồ chứa thủy lợi Việt Nam 1.1.2 Hư hỏng cố cơng trình đầu mối thủy lợi Việt Nam 13 1.1.3 Sự cần thiết đảm bảo an tồn cơng trình đầu mối 16 1.2 Các phương pháp đánh giá an tồn cơng trình thủy lợi .16 1.2.1 Phương pháp thiết kế tất định 17 1.2.2 Phương pháp thiết kế theo mô hình ngẫu nhiên 20 1.2.3 Nhận xét phương pháp thiết kế 21 1.3 Các nghiên cứu lý thuyết độ tin cậy lĩnh vực thủy lợi an toàn đập 22 1.3.1 Các nghiên cứu giới 22 1.3.2 Các nghiên cứu Việt Nam .27 1.4 Kết luận Chương 32 CHƯƠNG CƠ SỞ LÝ THUYẾT ĐỂ ĐÁNH GIÁ AN TOÀN CƠNG TRÌNH ĐẦU MỐI HỒ CHỨA NƯỚC .33 2.1 Quan điểm an tồn cơng trình thủy lợi 33 2.2 Cấu trúc cơng trình đầu mối hồ chứa thủy lợi 33 iii 2.2.1 thống Phân loại đầu mối hồ chứa thủy lợi theo số lượng công trình hệ 34 2.2.2 tế Sự sai khác mơ hình tính tốn so với hệ thống đầu mối hồ chứa thực 42 2.3 Cơ sở lý thuyết thực tiễn đánh giá an tồn cơng trình đầu mối .44 2.3.1 Cơ sở lý thuyết 44 2.3.2 Cơ sở thực tiễn 44 2.4 Phân tích yếu tố gây hư hỏng, cố cơng trình đầu mối hồ chứa .45 2.4.1 Yếu tố tự nhiên 45 2.4.2 Yếu tố khảo sát, thiết kế 46 2.4.3 Yếu tố thi công 46 2.4.4 Yếu tố khai thác quản lý 46 2.4.5 Yếu tố chiến tranh, phá hoại có chủ ý 46 2.5 Đặc điểm làm việc, chế phá hoại trạng thái giới hạn cơng trình đầu mối hồ chứa 47 2.5.1 Đặc điểm làm việc cơng trình đầu mối hồ chứa 47 2.5.2 Cơ chế phá hoại, trạng thái giới hạn 49 2.5.3 Các quan điểm chế phá hoại 52 2.6 Kết luận Chương 52 CHƯƠNG PHÂN TÍCH VÀ ĐÁNH GIÁ AN TỒN CƠNG TRÌNH ĐẦU MỐI HỒ CHỨA THỦY LỢI THEO ĐỘ TIN CẬY .54 3.1 Đặt vấn đề 54 3.2 Phân tích đánh giá an tồn cơng trình đầu mối hồ chứa theo lý thuyết độ tin cậy cấp độ II 55 3.2.1 Mô cố cơng trình đầu mối hồ chứa .55 3.2.2 Thiết lập hàm tin cậy 58 3.2.3 Tính tốn xác suất an tồn cho chế cố 65 3.2.4 Đánh giá xác suất an tồn cơng trình đầu mối hồ chứa 71 3.2.5 Đánh giá xác suất an toàn đầu mối hồ chứa 72 3.2.6 Phạm vi ứng dụng toán cấp độ II luận án 75 3.3 Tính xác suất an tồn cơng trình đầu mối hồ chứa theo lý thuyết độ tin cậy cấp độ III 77 iv 3.3.1 độ III Sự cần thiết xây dựng tốn tính xác suất an tồn cơng trình theo cấp 77 3.3.2 Thiết lập hàm tin cậy Z 80 3.3.3 Tính xác suất an tồn cơng trình đầu mối hồ chứa theo phương pháp Monte Carlo 80 3.3.4 Xác suất an toàn đầu mối hồ chứa nước 85 3.3.5 Phạm vi ứng dụng toán cấp độ III luận án 85 3.4 Mối quan hệ số độ tin cậy hệ số an toàn 87 3.5 Xây dựng chương trình tính xác suất an tồn cho đầu mối hồ chứa nước .87 3.5.1 Các để xây dựng chương trình .87 3.5.2 Sai lệch kết tính tốn đánh giá xác suất an tồn cơng trình theo cấp độ II cấp độ III 88 3.5.3 Ngôn ngữ lập trình 90 3.5.4 Giới thiệu cấu trúc phần mềm 90 3.5.5 Kiểm định chương trình 94 3.5.6 Khả ứng dụng hạn chế chương trình 95 3.6 Kết luận Chương 96 CHƯƠNG ĐÁNH GIÁ MỨC ĐỘ AN TỒN CƠNG TRÌNH ĐẦU MỐI HỒ CHỨA NƯỚC PHÚ NINH – QUẢNG NAM 98 4.1 Đặt vấn đề 98 4.2 Giới thiệu hệ thống thủy lợi Phú Ninh – Quảng Nam 98 4.3 Tính xác suất an tồn hệ thống Phú Ninh theo cấp độ II 99 4.3.1 Mơ hệ thống tính tốn 99 4.3.2 Nhận biết hệ thống 99 4.3.3 Số liệu tính tốn .103 4.3.4 Xác suất an toàn đầu mối hồ chứa Phú Ninh 113 4.3.5 thống Tính tốn đầu mối hồ Phú Ninh theo phương pháp thiết kế truyền 128 4.4 Tính tốn kích thước đập Phú Ninh theo lý thuyết độ tin cậy 131 4.5 Tính xác suất an tồn đập Phú Ninh theo cấp độ III 132 4.6 Kết luận Chương 133 KẾT LUẬN VÀ KIẾN NGHỊ .135 v I Kết đạt luận án .135 II Những đóng góp luận án .136 III Những khó khăn hạn chế kết nghiên cứu luận án 137 IV Hướng phát triển luận án 138 DANH MỤC CÁC CƠNG TRÌNH CỦA TÁC GIẢ ĐÃ CÔNG BỐ 139 TÀI LIỆU THAM KHẢO 140 PHỤ LỤC .145 PHỤ LỤC KIỂM ĐỊNH CHƯƠNG TRÌNH SYPRO2016 146 Phụ lục 1.1 Tính xác suất an tồn cơng trình theo thuật tốn chương 146 Phụ lục 1.2 Tính xác suất cố phần mềm Vap SYPRO2016 150 Phụ lục 1.3 Sử dụng chương trình SYPRO2016 tính độ tin cậy cho nghiên cứu có 151 PHỤ LỤC CÁC THÔNG SỐ KỸ THUẬT VÀ MỘT SỐ KẾT QUẢ TÍNH XÁC SUẤT AN TỒN CỦA HỆ THỐNG PHÚ NINH .153 Phụ lục 2.1 Các thơng số kỹ thuật đầu mối hồ Phú Ninh - Quảng Nam 153 Phụ lục 2.2 Kết tính ổn định mái hạ lưu đập 157 Phụ lục 2.3 Kết tính ổn định mái hạ lưu đập phụ Tứ Yên 161 Phụ lục 2.4 Kết tính ổn định mái hạ lưu đập phụ Long Sơn 165 Phụ lục 2.5 Kết tính ổn định mái hạ lưu đập phụ Dương Lâm .169 Phụ lục 2.6 Các kết tính độ tin cậy đầu mối Phú Ninh 172 PHỤ LỤC HƯỚNG DẪN SỬ DỤNG PHẦN MỀM SYPRO2016 .185 Phụ lục 3.1 Hướng dẫn sử dụng phần mềm SYPRO2016 .185 Phụ lục 3.2 Các bước tính xác suất an tồn cơng trình đầu mối hồ chứa thủy lợi phần mềm SYPRO2016 187 PHỤ LỤC CODE PHẦN MỀM SYPRO2016 189 Phụ lục 4.1 Xác suất an toàn hệ thống theo LTĐTC cấp độ II 189 Phụ lục 4.2 Xác suất an tồn cơng trình theo LTĐTC cấp độ III .201 vi DANH MỤC CÁC HÌNH ẢNH Hình 1-1 Phân bố số lượng hồ chứa thuỷ lợi, thuỷ điện tỉnh có nhiều hồ .5 Hình 1-2 Tỷ lệ hồ theo dung tích [3] Hình 1-3 Đập Tả Trạch-Thừa Thiên Huế .9 Hình 1-4 Đập bê tơng đầm lăn Sơn La Hình 1-5 Đập vòm Nậm Chiến .9 Hình 1-6 Sơ đồ minh họa vị trí cơng trình tháo lũ mặt sâu [5] 11 Hình 1-7 Tràn xả lũ hồ Yên Lập - Quảng Ninh 11 Hình 1-8 Cống ngầm lấy nước hồ chứa nước Vực Sự - Nghệ An 13 Hình 1-9 Một số hình ảnh cố đập Việt Nam .15 Hình 2-1 Bố trí đầu mối hồ chứa có cơng trình: đập chính, cơng trình xả lũ cống lấy nước 34 Hình 2-2 Sơ đồ ghép nối tiếp cơng trình đập đất, cống ngầm tràn xả lũ .35 Hình 2-3 Sơ đồ ghép hỗn hợp cơng trình đập đất, cống ngầm tràn xả lũ 36 Hình 2-4 Bố trí đầu mối hồ chứa có cơng trình 37 Hình 2-5 Sơ đồ ghép nối tiếp đầu mối hồ chứa nước có cơng trình 38 Hình 2-6 Sơ đồ ghép hỗn hợp đầu mối hồ chứa nước có cơng trình 38 Hình 2-7 Bố trí đầu mối hồ chứa có nhiều cơng trình 40 Hình 2-8 Sơ đồ ghép nối tiêp đầu mối hồ chứa có nhiều cơng trình 41 Hình 2-9 Sơ đồ ghép hỗn hợp đầu mối hồ chứa có nhiều cơng trình 42 Hình 2-10 Đầu mối hồ chứa có cơng trình bố trí theo hình thức ghép nối tiếp .42 Hình 2-11 Đầu mối hồ chứa có cơng trình bố trí theo hình thức ghép hỗn hợp 42 Hình 3-1 Sơ đồ cố cơng trình đầu mối hồ chứa nước .56 Hình 3-2 Sơ đồ thể chế cố nước tràn đỉnh đập 59 Hình 3-3 Sơ đồ tính ổn định mái dốc theo phương pháp Bishop [58] 60 Hình 3-4 Sơ đồ tính tốn biến hình thấm đặc biệt 62 Hình 3-5 Hàm mật độ xác suất hàm tin cậy Z .68 Hình 3-6 Sơ đồ khối tính xác suất an tồn hệ thống đầu mối hồ chứa theo cấp độ II 76 Hình 3-7 Hàm mật độ xác suất biến ngẫu nhiên quan trắc hồ thủy điện Hịa Bình [63], [64] .78 Hình 3-8 Sơ đồ khối tính xác suất an toàn hệ thống đầu mối hồ chứa theo cấp độ III 86 Hình 3-9 Sơ đồ khối xây dựng chương trình SYPRO2016 89 Hình 3-10 Sơ đồ khối mơ đun chương trình SYPRO2016 90 Hình 3-11 Giao diện để mơ phỏng, vẽ sơ đồ cố tính độ tin cậy hệ thống 92 vii Hình 3-12 Giao diện nhập thông tin hàm tin cậy tính ĐTC theo cấp độ II 93 Hình 3-13 Giao diện nhập thông tin hàm tin cậy tính ĐTC theo cấp độ III .93 Hình 4-1 Sơ đồ bố trí cơng trình đầu mối hồ chứa nước Phú Ninh – Quảng Nam .100 Hình 4-2 Cây cố đầu mối hồ chứa nước Phú Ninh - Quảng Nam 102 Hình 4-3 Mặt cắt ngang đập Phú Ninh [77] .104 Hình 4-4 Mặt cắt ngang đập phụ Tứ Yên [77] 108 Hình 4-5 Mặt cắt ngang đập phụ Long Sơn [77] 110 Hình 4-6 Mặt cắt ngang đập phụ Dương Lâm [77] 110 Hình 4-7 Sơ đồ tính tốn ổn định ngưỡng tràn số 113 Hình 4-8: Xác suất an tồn đập 115 Hình 4-9: Mức độ ảnh hưởng chế cố đến độ tin cậy đập .116 Hình 4-10 Ảnh hưởng BNN đến chế nước tràn đỉnh đập .117 Hình 4-11 Ảnh hưởng BNN 117 Hình 4-12 Ảnh hưởng BNN đến chế hình thành hang thấm thân đập .117 Hình 4-13 Xác suất an toàn đập phụ Tứ Yên .118 Hình 4-14 Mức độ ảnh hưởng chế cố đến độ tin cậy đập Tứ Yên 119 Hình 4-15 Mức độ ảnh hưởng BNN đến chế nước tràn đỉnh đập Tứ Yên .120 Hình 4-16 Mức độ ảnh hưởng BNN đến chế trượt mái hạ lưu đập Tứ Yên .120 Hình 4-17 Xác suất an toàn đập phụ Long Sơn 121 Hình 4-18 Mức độ ảnh hưởng chế cố đến độ tin cậy đập Long Sơn .121 Hình 4-19 Xác suất an tồn đập phụ Dương Lâm .122 Hình 4-20 Mức độ ảnh hưởng chế cố đến độ tin cậy đập phụ Dương Lâm 123 Hình 4-21 Xác suất cố đập tràn số .124 Hình 4-22 Xác suất cố đập tràn số .124 Hình 4-23 Xác suất cố đập tràn số .124 Hình 4-24 Xác suất an tồn cống Nam 125 Hình 4-25 Xác suất an tồn cống Bắc 126 Hình 4-26 Xác suất an toàn cống Dương Lâm 126 Hình 4-27 Xác suất an toàn đầu mối hồ chứa Phú Ninh - Quảng Nam .127 Hình 4-28 Ảnh hưởng cơng trình đến cố đầu mối hồ Phú Ninh .127 Hình 4-29 Hệ số an tồn mái hạ lưu đập Kat chuyển đổi 129 Hình 4-30 Hệ số an tồn mái hạ lưu đập đất theo phương pháp hệ số an toàn 129 Hình 4-31 Hệ số an tồn chuyển đổi ổn định trượt lật đập tràn 130 Hình 4-32 Hệ số an tồn ổn định trượt lật đập tràn .130 viii {if (checkCalculate) {JDialogDiagramofEffect dialog = new JDialogDiagramofEffect(item); dialog,setVisible(true);} else JOptionPane,showMessageDialog(null, "There is no result, Calculate the function, please", "Message", JOptionPane,INFORMATION_MESSAGE);} private void MenuItemDesignPoint_Clicked() {if (checkCalculate) {JDialogDesignPoint dialog = new JDialogDesignPoint(item); dialog,setVisible(true);} else JOptionPane,showMessageDialog(null, "There is no result, Calculate the function, please", "Message", JOptionPane,INFORMATION_MESSAGE);} private void MenuItemResultFunction_Clicked() {if (checkCalculate) {JDialogResultOfFunction dialog = new JDialogResultOfFunction(item); dialog,setVisible(true);} else JOptionPane,showMessageDialog(null, "There is no result, Calculate the function, please", "Message", JOptionPane,INFORMATION_MESSAGE);} private void radInputSerialValueOfVarible() { JDialogSerialOfVariable dialog = new JDialogSerialOfVariable(item); dialog,setVisible(true);} public void btnApply_Clicked() {if(txtFunction,getText(),equals("")) {JOptionPane,showMessageDialog(null, "Please enter the function of the component", "Message", JOptionPane,INFORMATION_MESSAGE); txtFunction,setFocusable(true); return; } _infix = txtFunction,getText(); _infix = _utility,processToCorrectExpression(_infix); arrVar = new ArrayList(); _postfix = _utility,ConvertInfix2Posfix(_infix, arrVar); if (!_postfix,equals("")) {btnCalculate,setEnabled(true); item,Infix = _infix; item,Postfix = _postfix; item,var = arrVar; FTADefineVariables frame = new FTADefineVariables(this); frame,setLEVEL(LEVEL); frame,setModal(true); frame,setLocationRelativeTo(this); frame,setVisible(true);} else {btnCalculate,setEnabled(false);} checkCalculate = false;} private void btnModifyVariables_Clicked() {if(txtVariables,getText(),equals("")) {JOptionPane,showMessageDialog(null, "Please enter the function of the component then click 'Appliy' button", "Message", JOptionPane,INFORMATION_MESSAGE); txtFunction,setFocusable(true); return;} FTADefineVariables frame = new FTADefineVariables(this); frame,setLEVEL(LEVEL); frame,setModal(true); frame,setLocationRelativeTo(this); frame,setVisible(true);} private void radInputStatistic_Checked() {if (radInputStatistic,isSelected()) {radInputSerial,setSelected(false); if (!txtVariables,getText(),equals("")) {JDialogStatisticSpecific dialog = new JDialogStatisticSpecific(this, true, arrVar); 196 dialog,setLocationRelativeTo(null); dialog,setVisible(true);} else {JOptionPane,showMessageDialog(null, "Please enter the function Z", "Message", JOptionPane,INFORMATION_MESSAGE); radInputSerial,setSelected(true);}} else {radInputSerial,setSelected(true); }} private void calculateProbability() {item,ID = txtID,getText(); if (checkData()) { if (LEVEL == 3) {comCal,calStandardDeviation(arrVar); calculateLEVEL3(arrVar);} else {if (radInputSerial,isSelected()) comCal,calStandardDeviation(arrVar); else item,var = arrVar; DecimalFormat myFormatter = new DecimalFormat("###,######"); setModel_tblResult(); TaylorExpansion,Calculate(getItem()); setModel_tblEffectFactor(); setModel_tblDesingPoint(); setModel_tblEffectFactorPercentage(); lblResult,setText("Probability of the failure: " + myFormatter,format(1 getItem(),XacSuat)); lblBeta,setText("The value of Beta: " + myFormatter,format(item,Beta)); System,err,println(getItem(),XacSuat); if (Double,isNaN(getItem(),Beta) || Double,isNaN(getItem(),XacSuat)) {JOptionPane,showMessageDialog(null, "Calculation has finished, but the value has not been true,\r\n Please check the value of variables"); } checkCalculate = true; }}} private boolean checkData() {if (txtFunction,getText(),trim(),equals("")) { JOptionPane,showMessageDialog(null, "Please enter the function for this event", "Information", JOptionPane,INFORMATION_MESSAGE); txtFunction,requestFocus(); return false; } if (txtVariables,getText(),trim(),equals("")) {JOptionPane,showMessageDialog(null, "Please choose the type of variables, Click 'Apply'", "Information", JOptionPane,INFORMATION_MESSAGE); btnApply,requestFocus(); return false;} if (arrVar != null) {int index = -1; for (int i = 0; i < arrVar,size(); i++) {FTAVariables tmpVar = (FTAVariables)arrVar,get(i); int length = tmpVar,getLength(); System,err,println("Bien " + ((FTAVariables)arrVar,get(i)),getVar() + " la: " + length); if (length == 0) {index = i; break;}} if (index != -1 && radInputSerial,isSelected()) {JOptionPane,showMessageDialog(null, "Please enter the value of variable: " + ((FTAVariables)arrVar,get(index)),getVar() + ", \r\nclick 'Enter the value of every variable' \r\n OR 'Please enter the statistic speciality of every variable'", "Warning", JOptionPane,WARNING_MESSAGE); radInputSerial,requestFocus(); return false;} else if (index != -1 && radInputStatistic,isSelected()) 197 {index = -1; for (int i = 0; i < arrVar,size(); i++) {FTAVariables tmpVar = (FTAVariables)arrVar,get(i); double miu = tmpVar,getMiu(); double xechma = tmpVar,getXechMa(); System,err,println("Bien " + ((FTAVariables)arrVar,get(i)),getVar() + " miu: " + miu + " \r\n xechma: " + xechma); if (miu == && xechma == 0) {index = i; break;}} if (index != -1) {int dialogResult; dialogResult = JOptionPane,showConfirmDialog(null, "There are some statistic speciality which has value equals 0, \r\n Do you want to check again?", "Warning", JOptionPane,YES_NO_OPTION, JOptionPane,QUESTION_MESSAGE); if (dialogResult == JOptionPane,YES_OPTION) {radInputStatistic_Checked(); return false;}}}} return true;} private void finishCalculate() {ArrayList tmpItems = (ArrayList)FTAGlobalVars,ListItems; int index = -1; for (int i = 0; i < tmpItems,size(); i++) {Items tmp = (Items)tmpItems,get(i); String tmpID = tmp,ID; if (_ID,equals(tmpID)) {index = i; break; }} if (index > -1) {int dialogButton = JOptionPane,OK_CANCEL_OPTION; int dialogResult = JOptionPane,showConfirmDialog(null, "This component has existed, you update?", "Message", dialogButton, JOptionPane,WARNING_MESSAGE); if (dialogResult == JOptionPane,OK_OPTION) {FTAGlobalVars,ListItems,set(index, getItem());}} else FTAGlobalVars,ListItems,add(getItem()); DecimalFormat myFormatter = new DecimalFormat("###,######"); ped,setProbability(myFormatter,format(1 - getItem(),XacSuat)); this,dispose();} public void setModel_tblResult() {DecimalFormat myFormatter = new DecimalFormat("###,####"); String[] columnNames = { "Kết quả", CommonFunction,getTitleTable("Kỳ vọng µ"), CommonFunction,getTitleTable("Độ lệch chuẩn σ")}; Object[][] data = new Object[arrVar,size()][3]; int j = 0; for (int i = 0; i < arrVar,size(); i++) { FTAVariables var = (FTAVariables)arrVar,get(i); if (var,isIsNormal()) {data[i][0] = var,getVar(); data[i][1] = myFormatter,format(var,getMiu()); data[i][2] = myFormatter,format(var,getXechMa()); }} mytable = new MyTableModel(columnNames, data);} public void setModel_tblEffectFactor() {DecimalFormat myFormatter = new DecimalFormat("###,####"); String[] columnNames = { CommonFunction,getTitleTable("Giá trị hệ số α"), "Giá trị"}; int length = 0; String[][] alpha = getItem(),Alpha; if (alpha != null) length = alpha,length; Object[][] data = new Object[length][2]; 198 int j = 0; for (int i = 0; i < length; i++) {data[i][0] = "α" + alpha[i][0]; data[i][1] = myFormatter,format(Double,parseDouble(alpha[i][1]));} mytable = new MyTableModel(columnNames, data);} public void setModel_tblEffectFactorPercentage() {DecimalFormat myFormatter = new DecimalFormat("###,####"); String[] columnNames = { "Giá trị BNN", "Giá trị"}; String[][] BNN = getItem(),BNN; int length = 0; if (BNN != null) length = BNN,length; Object[][] data = new Object[length][2]; int j = 0; for (int i = 0; i < length; i++) {data[i][0] = "%" + BNN[i][0]; data[i][1] = myFormatter,format(Double,parseDouble(BNN[i][1]));} mytable = new MyTableModel(columnNames, data);} public void setModel_tblDesingPoint() {DecimalFormat myFormatter = new DecimalFormat("###,####"); String[] columnNames = { "Tọa độ", "Giá trị"}; String[][] X = getItem(),X; int length = 0; if (X != null) length = X,length; Object[][] data = new Object[length][2]; int j = 0; for (int i = 0; i < length; i++) {data[i][0] = X[i][0]; data[i][1] = myFormatter,format(Double,parseDouble(X[i][1]));} mytable = new MyTableModel(columnNames, data);} public void setWindowTitle(String id) {setTitle("Calculate probability of the component with id: " + id);} public void setComboVariable() {FTAVariables _tmpVar; boolean check; if (arrVar != null) {txtVariables,setText(""); String value; boolean isNormal; String nameType; for (int i = 0; i < arrVar,size(); i++) {tmpVar = (FTAVariables)arrVar,get(i); value = _tmpVar,getVar(); isNormal = _tmpVar,isIsNormal(); if (isNormal) {if (LEVEL == 2) nameType = "Normal"; else {if (_tmpVar,getRule() == null) nameType = "Unknown"; else nameType = _tmpVar,getRule(),toUpperCase(); }} else {nameType = "Constant"; double[] val = _tmpVar,getValue(); String tmp = item,Postfix; item,Postfix = tmp,replaceAll(value, String,valueOf(val[0])); } txtVariables,append(value + "\t" + nameType + "\n");} }} public Items getItem() {return item;} public void setItem(Items item) 199 {this,item = item; setComboVariable();} private String[] _tmpVar; public String[] getTmpVar() {return _tmpVar;} public void setTmpVar(String[] tmpVar) {this,_tmpVar = tmpVar;} b) Tính độ tin cậy hệ thống theo cấp độ II double getProbability(char* text) {char *str, *found, *tmpStr=""; double tmp; size_t len; str = text; found = strchr(str,'='); if(found == NULL) found=""; len = strlen (found) + 1; tmpStr = (char*) malloc (len); strcpy (tmpStr, found); strcpy(tmpStr,tmpStr+1); tmp = atof(tmpStr); return tmp;} char *cutText(char *text) {char *str, *found, *tmpStr=""; size_t len; str = text; found = strchr(str,';'); if(found == NULL) found=""; len = strlen (found) + 1; tmpStr = (char*) malloc (len); strcpy (tmpStr, found); return tmpStr;} void calculateProbability(ITEM *item) {ITEM *currentItem, *tmpItem; char *str="hello", strResult[100]; double sum=0, multi=1, sub=1; if(item->num_children > 0) {if(is_gate(item->child)) {if(item->child->num_children > 0) {for(currentItem = item->child->child, tmpItem = item->child->child; currentItem != NULL; currentItem = currentItem->right_sib, tmpItem=tmpItem->right_sib) {if(currentItem->type == INTERMEDIATE) {calculateProbability(currentItem); if(currentItem->text == NULL) currentItem->text = "0,0"; if(item->child->type == OR) multi = multi * getProbability(currentItem->text); else if(item->child->type == AND) sub = sub*(1-getProbability(currentItem->text)); } else if(currentItem->type == BASIC {if(currentItem->text == NULL) currentItem->text = "0,0"; sum = sum + (1-getProbability(currentItem->text));}} if(item->child->type == OR && item->child->child->type == BASIC) {sum = - sum; if(item->text == NULL) item->text = ""; sprintf(strResult,"%s P=%f", item->text, sum); sprintf(item->text,"%s",strResult);} else if(item->child->type == OR && item->child->child->type == INTERMEDIATE) 200 {if(item->text == NULL) item->text = ""; sprintf(strResult,"%s P= %f",item->text,multi); sprintf(item->text,"%s",strResult); } else if(item->child->type == AND && item->child->child->type == INTERMEDIATE) {if(item->text == NULL) item->text = ""; sub = - sub; sprintf(strResult,"%s P su co= %f",item->text,sub); sprintf(item->text,"%s",strResult); } else if(item->child->type == AND && item->child->child->type == BASIC) {if(item->text == NULL) item->text = ""; sub = - sub; sprintf(strResult,"%s P su co= %f",item->text,sub); sprintf(item->text,"%s",strResult);}}}}} Phụ lục 4.2 Xác suất an tồn cơng trình theo LTĐTC cấp độ III public void calculateLEVEL3(ArrayList arrVar) { String RULES = ""; //1, Kiểm định luật phân phối ProbabilityDistributionTest testDis = new ProbabilityDistributionTest(); FTAVariables var; for (int i = 0; i < arrVar,size(); i++) {var = (FTAVariables)arrVar,get(i); String nameVar = var,getVar(); if (nameVar,equals("HD")) ((FTAVariables)arrVar,get(i)),setRule("STANDARD"); else if (nameVar,equals("HMN")) ((FTAVariables)arrVar,get(i)),setRule("WEIBULL"); else if (nameVar,equals("HS")) ((FTAVariables)arrVar,get(i)),setRule("LOGA"); else if (nameVar,equals("HG")) ((FTAVariables)arrVar,get(i)),setRule("EXPONENT"); else ((FTAVariables)arrVar,get(i)),setRule("REYLEICH");} setComboVariable(); double[] tmpVal; for (int i = 0; i < arrVar,size(); i++) {var = (FTAVariables)arrVar,get(i); RULES = var,getRule(); if (RULES,equals("STANDARD")) {tmpVal = testDis,shrinkRandomVariableByStandard(var); ((FTAVariables)arrVar,get(i)),setValue(tmpVal);} else if (RULES,equals("LOGA")) ((FTAVariables)arrVar,get(i)),setValue(testDis,shrinkRandomVariableByLoga(var)); else if (RULES,equals("EXPONENT")) ((FTAVariables)arrVar,get(i)),setValue(testDis,shrinkRandomVariableByExponent(var)); else if (RULES,equals("REYLEICH")) ((FTAVariables)arrVar,get(i)),setValue(testDis,shrinkRandomVariableByReyLeich(var)); else if (RULES,equals("WEIBULL")) ((FTAVariables)arrVar,get(i)),setValue(testDis,shrinkRandomVariableByWeibull(var)); } double p = testDis,calculateSafeProbabilityLEVEL3(arrVar); DecimalFormat myFormatter = new DecimalFormat("###,####"); lblResult,setText("Probability of the failure: " + myFormatter,format(1 - p));} public class ProbabilityDistributionTest { public static final int AMOUNT = 65000; public static final int K = 10; public void StandardDistributionTest(ArrayList arrVar) { boolean check = true; double[] X; 201 double Miu, XechMa, KHI; FTAVariables var; for (int k = 0; k < arrVar,size(); k++) {var = (FTAVariables)arrVar,get(k); if (var,isIsNormal() && var,getRule() == null) {X = var,getValue(); Miu = var,getMiu(); XechMa = var,getXechMa(); double tmpMin, tmpMax; tmpMin = findMin(X); tmpMax = findMax(X); double d = (tmpMax - tmpMin) / K; double sumP = 0; int[] H = new int[K]; int countH; double[] P = new double[K]; double dj1, dj; double Beta, BetaB, BetaA; double tmpT, tmpS; tmpT = tmpMin; tmpS = tmpT + d; for (int i = 0; i < K; i++) {countH = 0; if (i == K - 1) tmpS = tmpMax; dj1 = tmpT; dj = tmpS; for (int j = 0; j < X,length; j++) if (dj1 = KHI) ((FTAVariables)arrVar,get(k)),setRule("STANDARD");} } } public void StandardLogaDistributionTest(ArrayList arrVar) { boolean check = true; double[] X; double Miu, XechMa, KHI, Miu1, XechMa1; FTAVariables var; for (int k = 0; k < arrVar,size(); k++) {var = (FTAVariables)arrVar,get(k); if (var,isIsNormal() && var,getRule(),equals("")) { X = var,getValue(); Miu = var,getMiu(); XechMa = var,getXechMa(); XechMa1 = Math,log(1 + XechMa / Miu); Miu1 = Math,log(Miu) - XechMa1 / 2; double tmpMin, tmpMax; tmpMin = findMin(X); tmpMax = findMax(X); double d = (tmpMax - tmpMin) / K; double sumP = 0; int[] H = new int[K]; int countH; double[] P = new double[K]; 202 double dj1, dj; double Beta, BetaB, BetaA; double tmpT, tmpS; tmpT = tmpMin; tmpS = tmpT + d; for (int i = 0; i < K; i++) {countH = 0; if (i == K - 1) tmpS = tmpMax; dj1 = tmpT; dj = tmpS; for (int j = 0; j < X,length; j++) if (dj1 = KHI) ((FTAVariables)arrVar,get(k)),setRule("LOGA");}}} public void ExponentDistributionTest(ArrayList arrVar) { boolean check = true; double[] X; double Miu, XechMa, KHI, Alpha; FTAVariables var; for (int k = 0; k < arrVar,size(); k++) {var = (FTAVariables)arrVar,get(k); if (var,isIsNormal() && var,getRule(),equals("")) { X = var,getValue(); Miu = var,getMiu(); XechMa = var,getXechMa(); Alpha = / Miu; double tmpMin, tmpMax; tmpMin = findMin(X); tmpMax = findMax(X); double d = (tmpMax - tmpMin) / K; double sumP = 0; int[] H = new int[K]; int countH; double[] P = new double[K]; double dj1, dj; double Beta, BetaB, BetaA; double tmpT, tmpS; tmpT = tmpMin; tmpS = tmpT + d; for (int i = 0; i < K; i++) { countH = 0; dj1 = X[i]; dj = X[i] * d; for (int j = 0; j < X,length; j++) if (dj1 = KHI) {((FTAVariables)arrVar,get(k)),setGaMa(String,valueOf(Alpha)); ((FTAVariables)arrVar,get(k)),setRule("EXPONENT"); } } } } public void ReyLeichDistributionTest(ArrayList arrVar) { boolean check = true; double[] X; double Miu, XechMa, KHI, Alpha; FTAVariables var; for (int k = 0; k < arrVar,size(); k++) {var = (FTAVariables)arrVar,get(k); if (var,isIsNormal() && var,getRule(),equals("")) { X = var,getValue(); Miu = var,getMiu(); XechMa = var,getXechMa(); Alpha = Math,pow(0,88622 / Miu, 2); double tmpMin, tmpMax; tmpMin = findMin(X); tmpMax = findMax(X); double sumP = 0; int[] H = new int[K]; int countH; double[] P = new double[K]; double dj1, dj; double Beta, BetaB, BetaA; double tmpT, tmpS; tmpT = tmpMin; tmpS = tmpT + d; for (int i = 0; i < K; i++) { countH = 0; dj1 = X[i]; dj = X[i] * d; for (int j = 0; j < X,length; j++) if (dj1 = KHI) ((FTAVariables)arrVar,get(k)),setRule("REYLEICH");}}} public void WeibullDistributionTest(ArrayList arrVar) { boolean check = true; double[] X, Xi, Yi; double Miu, XechMa, KHI, Alpha, a = 0, b = 0, c = 0, Xtb, Ytb; FTAVariables var; for (int k = 0; k < arrVar,size(); k++) {var = (FTAVariables)arrVar,get(k); if (var,isIsNormal() && var,getRule() == null) { a = 0; X = var,getValue(); Miu = var,getMiu(); XechMa = var,getXechMa(); double[] Pi = new double[X,length]; 204 Xi = new double[X,length]; Yi = new double[X,length]; double Sxy, Rxy = 0, XechmaX, XechmaY; double oldRxy = 0, currentRxy = 0; //Tính Pi int count = 0; { oldRxy = Rxy; for (int i = 1; i = 1000) break; count++; } while (Rxy - oldRxy = Proba[0][j] && P < Proba[0][j + 1]) {KHI = Proba[i][j]; break; } else if (P >= Proba[0][8]) {KHI = Proba[i][8]; break;} } catch (IOException e) {e,printStackTrace();} return KHI;} public double lookForProbability(double beta) { double Proba = -1; String input; double[][] PosProba = new double[41][11]; double[][] NegProba = new double[41][11]; try { if (beta < 0) input = "NBeta,txt"; else if (beta > 0) input = "PBeta,txt"; else return 0,5; BufferedReader read = new BufferedReader(new FileReader(input)); String line = read,readLine(); int index = 0; while (line != null) {String[] tmp = line,split("\t"); for (int i = 0; i < tmp,length; i++) {NegProba[index][i] = Double,parseDouble(tmp[i]);} 206 index++; line = read,readLine();} int row = 0, col = 0; boolean check = false; if (beta < 0) {if (beta = SecA && beta < SecB) { row = 1; col = j; check = true; break; } else if (beta >= NegProba[1][0] + NegProba[0][10]) { row = 1; col = 10; check = true; break; }} if (!check) return 0; } else {for (int i = 1; i < NegProba,length - 1; i++) {if (beta > NegProba[i][0] && beta = SecA && beta < SecB) { row = i + 1; col = j; check = true; break; } else if (beta >= NegProba[i + 1][0] + NegProba[0][10]) { row = i + 1; col = 10; check = true; break;}} if (check) break; }}} if (check) Proba = NegProba[row][col]; } else if (beta > 0) {if (beta < NegProba[40][0]) {for (int i = 1; i < NegProba,length - 1; i++) {if (beta >= NegProba[i][0] && beta < NegProba[i + 1][0]) {for (int j = 1; j < NegProba[0],length - 1; j++) { double SecA = NegProba[i][0] + NegProba[0][j]; double SecB = NegProba[i][0] + NegProba[0][j + 1]; if (beta >= SecA && beta < SecB) { row = i; col = j; check = true; break; } else if (beta >= NegProba[i][0] + NegProba[0][10]) { row = i; col = 10; check = true; break;} } if (check) break; } } } else {for (int j = 1; j < NegProba[0],length - 1; j++) 207 { double SecA = NegProba[40][0] + NegProba[0][j]; double SecB = NegProba[40][0] + NegProba[0][j + 1]; if (beta >= SecA && beta < SecB) { row = 40; col = j; check = true; break; } else if (beta >= NegProba[40][0] + NegProba[0][10]) { row = 40; col = 10; check = true; break; }}} if (check) Proba = NegProba[row][col];} catch (IOException e) {e,printStackTrace();} return Proba;} public double[] shrinkRandomVariableByStandard(FTAVariables var) {double Miu, Xechma; Miu = var,getMiu(); Xechma = var,getXechMa(); double[] tmpX = var,getValue(); double[] X = new double[tmpX,length + AMOUNT]; System,arraycopy(tmpX, 0, X, 0, tmpX,length); double sumR = 0; for (int i = tmpX,length; i < X,length; i++) {try {sumR = getSum12RandomNumber(); X[i] = Xechma * (sumR - 6) + Miu; Thread,sleep(1);} catch (InterruptedException ex) {ex,printStackTrace(); } } var,setValue(X); return X;} public double[] shrinkRandomVariableByExponent(FTAVariables var) {double Miu, Xechma; Miu = var,getMiu(); Xechma = var,getXechMa(); double[] tmpX = var,getValue(); double[] X = new double[tmpX,length + AMOUNT]; System,arraycopy(tmpX, 0, X, 0, tmpX,length); Random ran = new Random(); for (int i = tmpX,length; i < X,length; i++) {try {X[i] = Miu * Math,abs(Math,log(ran,nextDouble())); Thread,sleep(1);} catch (InterruptedException ex) {ex,printStackTrace(); } } var,setValue(X); return X;} public double[] shrinkRandomVariableByReyLeich(FTAVariables var) {double Miu, Xechma; Miu = var,getMiu(); Xechma = var,getXechMa(); double[] tmpX = var,getValue(); double[] X = new double[tmpX,length + AMOUNT]; System,arraycopy(tmpX, 0, X, 0, tmpX,length); Random ran = new Random(); for (int i = tmpX,length; i < X,length; i++) {try {X[i] = Math,pow(-Math,pow(Miu / 0,88622, 2)* Math,log(ran,nextDouble()), / 2); 208 Thread,sleep(1);} catch (InterruptedException ex) {ex,printStackTrace();}} var,setValue(X); return X;} public double[] shrinkRandomVariableByWeibull(FTAVariables var) { double[] X, Xi, Yi; double Miu, XechMa, KHI, Alpha, a, b = 0, c = 0, Xtb, Ytb; a = 0; X = var,getValue(); Miu = var,getMiu(); XechMa = var,getXechMa(); double[] Pi = new double[X,length]; Xi = new double[X,length]; Yi = new double[X,length]; double Sxy, Rxy = 0, XechmaX, XechmaY; double oldRxy = 0, currentRxy = 0; {oldRxy = Rxy; for (int i = 1; i = 0,001 && Rxy - oldRxy >= 0,0001); a = a - 1; double sumX2i = 0, sumXYi = 0; for (int i = 0; i < Xi,length; i++) {sumX2i += Math,pow(Xi[i] - Xtb, 2);} for (int i = 0; i < Xi,length; i++) {sumXYi += (Xi[i] - Xtb) * (Yi[i] - Ytb);} c = sumX2i / sumXYi; b = Math,exp(Ytb - Xtb / c); double[] Xk = new double[X,length + AMOUNT]; System,arraycopy(X, 0, Xk, 0, X,length); Random ran = new Random(); for (int i = X,length; i < Xk,length; i++) {try {Xk[i] = a + Math,pow(-Math,pow(b, c) * Math,log(ran,nextDouble()), / c); Thread,sleep(1); } catch (InterruptedException ex) {ex,printStackTrace();}} var,setValue(Xk); var,setA(String,valueOf(a)); var,setB(String,valueOf(b)); 209 var,setC(String,valueOf(c)); return Xk; } public double[] shrinkRandomVariableByLoga(FTAVariables var) { double[] X = var,getValue(); double Miu, XechMa; double sumX = 0, sumX2 = 0; //Chuyển Xi Yi for (int i = 0; i < X,length; i++) { X[i] = Math,log(X[i]); sumX += X[i];} Miu = sumX / X,length; for (int i = 0; i < X,length - 1; i++) {sumX2 += Math,pow(X[i] - Miu, 2);} XechMa = Math,sqrt(sumX2 / (X,length - 1)); double[] Y = new double[X,length + AMOUNT]; System,arraycopy(X, 0, Y, 0, X,length); double sumR = 0; for (int i = X,length; i < Y,length; i++) {try {sumR = getSum12RandomNumber(); Y[i] = XechMa * (sumR - 6) + Miu; Thread,sleep(1); } catch (InterruptedException ex) {ex,printStackTrace();} } var,setValue(Y); return Y;} public double calculateSafeProbabilityLEVEL3(ArrayList arrVar) { double p; int m = 0; double[] Hd, Hm, Hs, Hg, Z; Hd = new double[AMOUNT]; Hm = new double[AMOUNT]; Hs = new double[AMOUNT]; Hg = new double[AMOUNT]; Z = new double[AMOUNT]; Hd = ((FTAVariables)arrVar,get(0)),getValue(); Hm = ((FTAVariables)arrVar,get(1)),getValue(); Hs = ((FTAVariables)arrVar,get(2)),getValue(); Hg = ((FTAVariables)arrVar,get(3)),getValue(); for (int i = 0; i < AMOUNT; i++) {Z[i] = Hd[i] - Hm[i] - Hs[i] - Hg[i]; if (Z[i] > 0) m++;} p = m * 1,0 / AMOUNT; return p; } public double getSum12RandomNumber() { Random ran = new Random(); double sum = 0; for (int i = 0; i < 12; i++) {sum += ran,nextDouble(); } return sum;} public double findMin(double[] a) { double = a[0]; for (int i = 1; i < a,length; i++) if (min > a[i]) = a[i]; return min; } public double findMax(double[] a) { double max = a[0]; for (int i = 1; i < a,length; i++) if (max < a[i]) max = a[i]; return max;} } 210