NGHIÊN CỨU SỬ DỤNG NGÔN NGỮ SLANGTNG TRONG PHÂN TÍCH VÀ TỐI ƯU HÓA KẾT CẤU HỆ THANH CHỊU TẢI TRỌNG TĨNH

63 115 0
NGHIÊN CỨU SỬ DỤNG NGÔN NGỮ SLANGTNG TRONG PHÂN TÍCH VÀ TỐI ƯU HÓA KẾT CẤU HỆ THANH CHỊU TẢI TRỌNG TĨNH

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC XÂY DỰNG BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC SINH VIÊN NĂM HỌC 2016 - 2017 TÊN ĐỀ TÀI NGHIÊN CỨU SỬ DỤNG NGÔN NGỮ SLANGTNG TRONG PHÂN TÍCH VÀ TỐI ƯU HĨA KẾT CẤU HỆ THANH CHỊU TẢI TRỌNG TĨNH Mã số đề tài: XD-2017-15 Sinh viên thực hiện, mã số sinh viên, lớp: Vũ Văn Ngọ, 3049859, Lớp 59TH1 Nguyễn Văn Đức, 3052459, Lớp 59TH1 Nguyễn Thị Thảo, 3029589, Lớp 59TH2 Phạm Thị Phương Thảo, 3021359, Lớp 59TH2 Giáo viên hướng dẫn: PGS.TS Phạm Hoàng Anh Hà Nội, 2017 MỤC LỤC MỞ ĐẦU CHƯƠNG PHƯƠNG PHÁP PHẦN TỬ HỮU HẠN 1.1 GIỚI THIỆU CHUNG 1.2 TRÌNH TỰ THỰC HIỆN 1.3 VÍ DỤ: 1.3.1 Hệ dàn phẳng: 1.3.2 Hệ khung phẳng: 12 CHƯƠNG BÀI TỐN TỐI ƯU HĨA KẾT CẤU 17 2.1 GIỚI THIỆU CHUNG 17 2.1.1 Khái niệm tối ưu hóa kết cấu 17 2.1.2 Biến thiết kế 17 2.1.3 Hàm mục tiêu 18 2.1.4 Điều kiện ràng buộc 18 2.2 CÁC DẠNG BÀI TỐN TỐI ƯU HĨA KẾT CẤU 19 2.2.1 Tối ưu hóa tiết diện ngang 19 2.2.2 Tối ưu hóa hình dáng 20 2.2.3 Tối ưu hóa cấu trúc 20 2.3 CÁC PHƯƠNG PHÁP GIẢI BÀI TỐN TỐI ƯU HĨA KẾT CẤU 21 2.3.1 Các phương pháp quy hoạch toán học 21 2.3.2 Các phương pháp tiêu chuẩn tối ưu 22 2.3.3 Các phương pháp tìm kiếm ngẫu nhiên 22 CHƯƠNG GIỚI THIỆU SLANGTNG 23 3.1 GIỚI THIỆU 23 3.2 GIAO DIỆN CHÍNH CỦA CHƯƠNG TRÌNH 23 3.3 MỘT SỐ MƠ ĐUN SLANGTNG DÙNG TRONG PHÂN TÍCH VÀ TỐI ƯU KẾT CẤU 25 3.3.1 Mô đun tmath 25 3.3.2 Mô đun fem 26 3.3.3 Mô đun optimize 26 3.3.4 Mô đun graph 26 CHƯƠNG ỨNG DỤNG SLANGTNG TRONG PHÂN TÍCH VÀ TỐI ƯU TRỌNG LƯỢNG KẾT CẤU HỆ THANH 28 4.1 PHÂN TÍCH KẾT CẤU HỆ THANH 28 4.1.1 Khởi tạo mơ hình tính tốn 30 4.1.2 Khai báo nút 30 4.1.3 Khai báo kiện biên 31 4.1.4 Khai báo vật liệu 31 4.1.5 Khai báo kiểu tiết diện 32 4.1.6 Khai báo phần tử 32 4.1.7 Lập ma trận độ cứng tổng thể 33 4.1.8 Lập véc tơ lực nút tổng thể 33 4.1.9 Tính tốn chuyển vị nút 34 4.1.10 Tính tốn nội lực 34 4.1.11 Biểu diễn kết 35 4.2 TỐI ƯU HÓA TRỌNG LƯỢNG KẾT CẤU 36 4.2.1 Lập hàm mục tiêu 36 4.2.2 Lập hàm điều kiện ràng buộc 36 4.2.3 Khởi tạo công cụ tối ưu 37 4.2.4 Tính tốn tối ưu 38 4.2.5 Biểu diễn kết 38 4.3 MỘT SỐ VÍ DỤ 39 KẾT LUẬN 44 TÀI LIỆU THAM KHẢO 44 PHỤ LỤC 46 DANH MỤC HÌNH VẼ Hình 1.1: Sợi dây chịu tải trọng……………………… ………………………………6 Hình 1.2: Tấm phẳng chịu tải trọng tĩnh Hình 1.3: Ví dụ số loại phần tử Hình 1.4: Mơ hình thiết lập ma trận độ cứng Hình 1.5: Sơ đồ kết cấu dàn tĩnh định chịu tải trọng Hình 1.6: Sơ đồ rời rạc hóa thứ tự chuyển vị nút Hình 1.7: Sơ đồ kết cấu khung tĩnh địnhchịu tải trọng 12 Hình 1.8: Sơ đồ rời rạc hố thứ tự chuyển vị nút 12 Hình 1.9: Biểu đồ nội lực 16 Hình 2.1: Ví dụ số dạng tốn tối ưu 21 Hình 3.1: Giao diện chương trình slangTNG 24 Hình 3.2: Cửa số hiển thị giá trị biến 25 Hình 3.3: Đồ họa 2D slangTNG 26 Hình 3.4: Đồ họa 3D slangTNG 27 Hình 4.1: Khung phẳng chịu tải trọng 28 Hình 4.2: Mơ hình PTHH khung 28 Hình 4.3: Biểu đồ mơ men uốn biểu đồ lực cắt hệ khung phẳng 36 Hình 4.4: Sơ đồ biến dạng kết cấu khung tối ưu 39 Hình 4.5: Sơ đồ hệ dàn 10 39 Hình 4.6: Sơ đồ hệ dàn 25 41 Hình 4.7: Giao diện chương trình tính dàn 10 42 Hình 4.8: Giao diện chương trình tính dàn 25 43 DANH MỤC BẢNG BIỂU Bảng 4.1: Số liệu tọa độ nút 29 Bảng 4.2: Kết nối phần tử 29 Bảng 4.3: Số liệu tiết diện 29 Bảng 4.4: Kết tối ưu dàn 10 40 Bảng 4.5: Thông số tải trọng tác dụng lên hệ dàn 25 41 Bảng 4.6: Kết tính tốn tối ưu hệ dàn 25 42 MỞ ĐẦU Đặt vấn đề: Các mơn học phân tích kết cấu Sức bền vật liệu, Cơ học kết cấu,… phần kiến thức sở kỹ sư thuộc ngành xây dựng bố trí chương trình đào tạo nhiều trường đại học xây dựng, giao thông, thủy lợi,… [1] Tuy nhiên, hầu hết việc giảng dạy học tập môn học chưa tin học hóa Ngay môn Phương pháp phần tử hữu hạn, phương pháp số phổ biến phân tích kết cấu, sử dụng đến máy tính điện tử Một khó khăn áp dụng tin học giảng dạy học tập phân tích kết cấu thiếu cơng cụ tin học phù hợp Các ngơn ngữ lập trình thường khơng thực tiện lợi cho sinh viên lập trình tính tốn kết cấu đòi hỏi người dạy người học phải có kỹ lập trình tương đối tốt Ví dụ, MATLAB phần mềm giới thiệu cho sinh viên số lớp học Đại học Xây dựng, nhiên giới thiệu qua cho sinh viên, sinh viên chưa trang bị kĩ ngôn ngữ để tự thực việc phân tích kết cấu.Sinh viên phải dựa vào file mẫu có sẵn để thực việc phân tích kết cấu, giải tốn.Các phần mềm tính tốn thích hợp ứng dụng thực tế giảng dạy học tập Vấn đề quyền công cụ tin học trở ngại slangTNG (Structural Language – The Next Generation) ngơn ngữ lập trình miễn phí, phát triển Bucher Wolff [2] dùng cho mục đích học tập nghiên cứu phân tích kết cấu Bên cạnh hỗ trợ tính tốn ma trận, slangTNG cung cấp nhiều cơng cụ chun cho lập trình phân tích kết cấu biểu kết đồ họa Hiện nay, số trường đại học giới Vienna University of Technology, Bauhaus University Weimar ứng dụng ngôn ngữ slangTNG vào giảng dạy nghiên cứu mơn: học, phân tích kết cấu, tối ưu hóa kết cấu, động lực học cơng trình.Tại Việt Nam chưa nhiều người biết đến sử dụng ngơn ngữ Bên cạnh đó, tài liệu hướng dẫn slangTNG có tài liệu tiếng Anh hạn chế, thiếu diễn giải chi tiết trình tự, cấu trúc lệnh, ý nghĩa tham số khai báo… Nhằm tìm hiểu khả áp dụng slangTNG cho học tập nghiên cứu, nhóm sinh viên thực đề tài “Nghiên cứu sử dụng ngôn ngữ slangTNG phân tích tối ưu hóa kết cấu hệ chịu trọng tĩnh” Mục tiêucủa đề tài: Tìm hiểu ngơn ngữ slangTNG ứng dụng slangTNG tốn phân tích tối ưu hóa kết cấu hệ chịu tải trọng tĩnh,bao gồm: - Tìm hiểu phân tích kết cấu theo phương pháp phần tử hữu hạn (PTHH); - Tìm hiểu tốn tối ưu hóa kết cấu; - Tìm hiểu ngơn ngữ slangTNG ứng dụng phân tích, tối ưu kết cấu - Lập chương trình slangTNG để phân tích, tối ưu hóa số kết cấu hệ phẳng hệ không gian chịu tải trọng tĩnh; - Biên dịch tài liệu, diễn giải hướng dẫn sử dụng slangTNG phân tích tối ưu hóa kết cấu hệ thanh; Phương pháp nghiên cứu: - Nghiên cứu thông qua tài liệu ngôn ngữ slangTNG, phương pháp phần tử hữu hạn tối ưu hóa kết cấu - Thực hành, thử nghiệm tính tốn số ví dụ mơi trường slangTNG Đối tượng phạm vi nghiên cứu: Ngôn ngữ slangTNG kết cấu hệ chịu tải trọng tĩnh Cấu trúc báo cáo:sau phần mở đâu, báo cáo bao gồm phần sau: Chương I: Phương pháp phần tử hữu hạn Chương II: Bài tốn tối ưu hóa kết cấu Chương III: Giới thiệu slangTNG Chương IV: Ứng dụng slangTNG phân tích tối ưu trọng lượng kết cấu hệ Kết luận Tài liệu tham khảo phụ lục CHƯƠNG PHƯƠNG PHÁP PHẦN TỬ HỮU HẠN Trong tính tốn kết cấu, phương pháp phần tử hữu hạn (PTHH) sử dụng phổ biến, với kết cấu phức tạp Chương trình bày giới thiệu chung phương pháp PTHH mơ hình chuyển vị: khái niệm, trình tự thực hiện, số ví dụ đơn giản Các nội dung trình bày dựa tài liệu [3,4] 1.1 GIỚI THIỆU CHUNG Ra đời cách nửa kỷ, ban đầu, phương pháp PTHH phương pháp dùng phân tích trạng thái ứng suất Ngày nay, phương pháp PTHH phát triển cho nhiều lĩnh vực kỹ thuật khác nhau, như: tốn truyền nhiệt, dòng chảy, điện từ [4] Nội dung phương pháp Rời rạc hoá – Chia vật thể liên tục thành số hữu hạn miền nhỏ gọi phần tử hữu hạn (PTHH) Việc phân tích trạng thái ứng suất-biến dạng thực mơ hình rời rạc (mơ hình PTHH) Các PTHH mơ hình liên kết với nút Điều kiện tương đương hệ: - Năng lượng mơ hình thay tương đương lượng hệ thực; - Trên biên phần tử, điều kiện chập (liên tục lực chuyển vị) phảiđược thoả mãn Hình 1.1: minh họa mơ hình PTHH sợi dây chịu tải trọng Mơ hình hệ thực: - Vô số bậc tự Đường biến dạng hệ thực: - cong trơn Mơ hình PTHH: - Hữu hạn bậc tự Đường biến dạng hệ thay thế: - đường gãy khúc Hình 1.1: Sợi dây chịu tải trọng tĩnh Hình 1.2: minh họa mơ hình PTHH phẳng chịu tải trọng PTHH M hình hệ thực : - V ô số bậc tự M hình PTHH: - H ữu hạn bậc tự Hình 1.1: Tấm phẳng chịu tải trọng tĩnh Sự phát triển mạnh mẽ sử dụng rộng rãi máy tính điện tử thúc đẩy nhanh hồn thiện phong phú phương pháp PTHH Ở Việt Nam, phương pháp PTHH tiếp thu nghiên cứu từ năm70 kỷ trước [3] Phương pháp PTHH đưa vào giảng dạy bậc đại học cao học nhiều trường đại học kỹ thuật nước, có Đại học Xây dựng 1.2 TRÌNH TỰ THỰC HIỆN Khi áp dụng phương pháp PTHH mơ hình chuyển vị để phân tích kết cấu, ta cần thực bước sau: Bước 1:Chọn loại phần tử rời rạc hoá kết cấu: Ví dụ số loại PTHH bản: phần tử thanh, phần tử (Hình 1.3) Hình 1.2: Ví dụ số loại phần tử Bước 2:Thiết lập ma trận độ cứng phần tử Ma trậnđộ cứng, [K], ma trận biểu thị mối quan hệ ngoại lựcđặt nút (đã quy đổi) chuyển vị nút (Hình 1.4) {R}= [K] {q} Rk qk Ma trậnđộ cứng PTHH qj Rf qi Ri Hình 1.3: Mơ hình thiết lập ma trận độ cứng Ma trận độ cứng số loại PTHH chiều (phần tử thanh) thiết lập sẵn cho tài liệu [3,4] Bước 3:Thiết lập véc tơ lực nút tương đương Các tải trọng tác dụng phân bố, tập trung phần tử chuyển tải trọng tác dụng nút phần tử Việc chuyển đổi dựa tương đương công Tài liệu [3,4] cung cấp biểu thức quy đổi số dạng tải trọng tách dụng phần tử tải trọng taics dụng nút Bước 4:Ghép nối phần tử thành hệ kết cấu Trong mơ hình kết cấu, PTHH nối với nút Việc thực cách ghép ma trậnđộ cứng phần tử, ghép vec tơ ngoại lực tác dụng nút phần tử lại với Kết thu ma trậnđộ cứng véc tơ lực nút tổng thể cho toàn hệ Bước 5: Đưa vào điều kiện biên: Đưa vào điều kiện ràng buộc số nút (ví dụ: chuyển vị gối tựa 0) Bước 6: Giải hệ phương trình cân xác định chuyển vị nút Bước 7: Xác định chuyển vị,biến dạng ứng suất phần tử thông qua chuyển vị nút phần tử Bước 8: Biểu diễn kết (bảng, biểu đồ) Hiện có nhiều phần mềm phân tích kết cấu sử dụng phương pháp PTHH (ví dụ SAP2000, ETAB), hầu hết tính toán tự động Người sử dụng phải nhập số liệu cho hệ kết cấu cần tính (Bước Bước 5) 1.3 VÍ DỤ: 1.3.1 Hệ dàn phẳng: Tính chuyển vị vị trí đặt lực cho kết cấu dàn tĩnh định hình 1.5 EA=1 2m P=50KN EA=1 2m Hình 1.4: Sơ đồ kết cấu dàn tĩnh định chịu tải trọng Bài Giải: ′ ′ ` Hình 1.5:Sơ đồ rời rạc hóa thứ tự chuyển vị nút PTHH 1: Phần tử đầu khớp - Trong hệ toạ độ riêng(tra theo [4]): 48 E, F = tmath.ComplexMultiply(A, B, C, D) E, F = tmath.ComplexDivide(A, B, C, D) Khởi tạo ma trận A B đại diện cho số phức tạp ejk+i*fjk = (ajk+i*bjk)* (cjk+i*djk) ( với i đơn vị ảo) Khởi tạo ma trận A B đại diện cho số phức tạp ejk+i*fjk = (ajk+i*bjk)/ (cjk+i*djk) ( với i đơn vị ảo) 49 PHỤ LỤC 2: MODULE FEM structure=fem.Structure(”Frame”) Khởi tạo đối tượng kết cấu (hữu hạn phần tử) với tên “Frame” structure:AddNodes(nodes) Khai báo nút để giới hạn cấu tạo phần tử Ma trận nút chứa nhiều hàng có nghĩa nhiều nút thêm vào có cột cột chứa định danh (tên) cho nút, cột chứa tọa độ x,y,z nút Chú ý khai báo nút kết cấu ta phải khai báo thêm nút định vị cho nút định vị không thuộc phương phần tử kết cấu s = structure:AddSection(101, ”RECT”) Khởi tạo đối tượng với tên định danh 101 thuộc kiểu “RECT” thêm vào kết cấu Các loại đối tượng khác chấp nhận “SHELL” cho phần tử rỗng “VOLUME” cho phần tử âm s:SetColor(col) Thiết lập màu mắc cho đối tượng Đối số col vector có kích thước chứa màu đặc điểm kĩ thuật RGBA Giá trị màu có độ rộng từ đến 255 s:SetData(values) Thiết lập giá trị chứa liệu đối tượng kích thước giá trị vector phải phù hợp với số liệu theo yêu cầu loại đối tượng Chẳng hạn, Loại “RECT” số 2, loại “SHELL” số loại “VOLUME” số m=structure:AddMaterial(201, Khởi tạo loại vật chất với tên ”LINEAR ELASTIC”) định danh 201 thuộc kiểu “LINEAR_ELASTIC” thêm vào kết cấu m:SetData(values) Thiết lập giá trị chứa liệu vật chất Kích thước giá trị vector phải phù hợp với số liệu theo yêu cầu loại vật chất Các loại vật chất khác mà chấp nhận “DAMPER” “CONTACT” Chẳng hạn, loại “LINEAR_ALASTIC” (module đàn hồi, hệ số Poisson, trọng lượng riêng); loại “DAMPER” (độ ẩm, vận tốc số mũ); loại “CONTACT” (độ cứng bình thường = độ cứng bên trước trượt, độ cứng bên sau trượt, lực ma sát tối đa) 50 structure:AddElements(”RECT”, 201, 101,elms) structure:SetAvailDof(dofs) nd=structure:GlobalDof() M = structure:SparseMass() C = structure:SparseDamping() K = structure:SparseStiffness() U = K:Solve(F) eval, evec = K:Eigen(4) eval, evec = K:Eigen(M, 4) structure:SetDofDisplacements(U) Khai báo phần tử loại “RECT” với loại vật chất 201 đối tượng 101 cho kết cấu Các phần tử ma trận chứa nhiều hàng số phần tử khai báo nhiều, cột chứa tên định danh phần tử, cột chứa danh sách nút Số lượng nút cần thiết kiểu phần tử có sẵn “RECT” (3), “TRANHLE3N” (3), “TET4N” (4), “TRUSS”(3), “DAMPER”(#), “CONTACT”(3), “LINE”(2) Chú ý nút nên đọc từ trái sang phải Thiết lập bậc tự có sẵn cho tất nút kết cấu Các bậc tự thiết lập vector có kích thước 6, chứa số vị trí cụ thể nút có tương ứng có chuyển vị ngược lại khơng có chuyển vị chứa số Gán toàn số chuyển vị cho tất nút trả tổng số bậc tự Phương pháp phải gọi sau định nghĩa nút, phần tử ràng buộc, trước thực phân tích kết cấu Tổng hợp ma trận khối lượng chung cho toàn kết cấu theo cấu trúc Tổng hợp ma trận độ ẩm chung cho toàn kết cấu theo cấu trúc Tổng hợp ma trận độ cứng chung cho toàn kết cấu theo cấu trúc Giải hệ phương trình KU = F Thừa số K lưu trữ thân K sử dụng lại cho Tính tốn giá trị riêng λk vector riêng Фk toán tiêu chuẩn (K – λk*I)*Фk = K chứa ma trận độ cứng riêng Tính toán giá trị riêng λk vector riêng Фk toán tổng quát (K – λk*M)*Фk = K chứa ma trận độ cứng riêng, M chứa ma trận khối lượng riêng Gán giá trị chứa ma trận U đến nút chuyển vị theo bậc tự đặt sẵn 51 U=structure:GetDofDisplacements() structure:SetAllDisplacements(U1) U1 = structure:GetAllDisplacements() F2=structure:ToDofDisplacements(F1) F1=structure:ToAllDisplacements(F2) R = structure:GlobalResForce() structure:GlobalUpdate() str = ElementStress(comp) tri=structure:Draw(fac) tri = structure:ElementResults(str, fac) Hiện lại chuyển vị từ tất bậc tự nút lưu trữ chúng vector U Gán giá trị chứa ma trận U1 chuyển vị cho tất nút phân biệt bậc tự đặt sẵn U1 có nhiều hàng có nhiều nút chuyển vị, có cột ( cột chuyển vị thẳng chuyển vị xoay) Hiện lại chuyển nút phân biệt bậc tự có sẵn lưu trữ chúng ma trận U1 U1 có nhiều hàng có nhiều nút chuyển vị, cột (3 chuyển vị thẳng, chuyển vị xoay) Chuyển đổi ma trận chứa chuyển vị thành ma trận có cấu trúc (số nút nhân với chuyển vị nút) vector chứa chuyển bậc tự đặt sẵn Chuyển đổi ma trận chứa chuyển bậc tự đặt sẵn thành ma trận có cấu trúc (số nút x6) chứa tất chuyển vị Tính vector chuyển vị phụ thuộc vào lức khôi phục lại nút từ tất phần tử thơng thường cần cho phân tích phi tuyến Chấp nhận tất chuyển vị tính ứng suất vật liệu cuối cập nhật biến lịch sử vật chất phù hợp Thông thường sử dụng phân tích phi tuyến Tính ứng suất tất phần tử trả thành phần ứng suất cho tất phần tử Số lượng giá trị trả lại tổng số điểm ứng suất loại phần tử Nếu comp=0, trả lại Những giá trị khác có comp 1(σxx), 2(σyy), 3(σzz), 4(τxy), 5(τxz), 6(τyz) Lưới tam giác toàn cấu trúc để sử dụng sau đồ thị 3D Các biến dạng nhân yếu tố fac sau thêm vào tọa độ nút Các tam giác lưu trữ ma trận tri …toàn cấu trúc màu phần tử theo 52 lin = structure:Vector(U1, fac) n = structure:GetNode(key) n:SetAvailDof(dofs) giá trị ứng suất chứa str vector Kết cấu rút biến dạng nhà nước với yếu tố fac hình tam giác lưu trữ tri ma trận … đường thẳng 3D đại diện cho vector nút U2 Nó rút vectơ bắt đầ từ cấu trúc biến dạng (yếu tố fac) Các dòng lưu trữ ma trận lin Nhận tham chiếu đến nút với khóa ID Thiết lập bậc tự có sẵn nút n bậc tự vector có kích thước chứa cho bậc tự chứa cho bậc tự ngăn cản chuyển vị 53 PHỤ LỤC 3: MODULE OPTIMIZE ops = optimize.Conmin(3, 2) Khởi tạo đối tượng tối ưu hóa thuộc kiểu tối ưu CONMIN cho biến thiết kế bất đẳng thức ops:SetDesign(A) Chuyển biến thiết kế chứa vector A thành đối tượng tối ưu hóa Kích thước vector A phải phù hợp với số lượng biến thiết kế đối tượng tối ưu hóa x = ops:GetDesign() Khởi tạo vector X chứa biến thiết kế tính tốn trình tối ưu hóa ops:SetBounds(B) Gán ma trận B làm giới hạn cho trình tối ưu hóa Ma trận phải có cột nhiều hàng (số hàng số biến thiết kế) answer = ops:Compute() Tính bước tối ưu Thuật toán kết thúc câu trả lời Nếu không, cần hàm đối tượng hạn chế gán chúng cho tối ưu hóa ops:SetObjective(obj) Gán số đối tượng làm mục tiêu cho trình tối ưu hóa ops.SetConstraints(constr) Gán ma trận constr giá trị ràng buộc cho trình tối ưu hóa ops Constr phải ma trận có ràng buộc Đối với vấn đề khơng có giới hạn, chức khơng cần thiết pso = optimize.PSO(3, omega) Khởi tạo đối tượng tối ưu bày đàn (PSO) cho biến thiết kế PSO xử lý hàm ràng buộc cách trực tiếp, cần xây dựng hạn chế vi phạm ràng buộc Omega gọi "quán tính từ" Chọn omega = 0,8 khơng tốn khơng u cầu thêm pso:SetBounds(B) Gán ma trận B làm giới hạn cho trình tối ưu hóa bày đàn Ma trận phải có cột nhiều hàng (số hàng số biến thiết kế) X= pso:Start(30) Khởi tạo ma trận X ban đầu chứa bầy đàn có kích thước 30 Biến thiết kế xếp theo cột ma trận X pso:SetFitness(f) Gán nội dung vector f khung chínhcủa tối ưu hóa bầy đàn Giá trị chứa f phải tính tốn từ lần rút cuối từ trình tối ưu hóa bầy đàn (hoặc thơng qua pso:start() pso:compute() 54 x = pso:Compute(clamp) b = pso:GetBestDesign() Khởi tạo ma trận x có chứa phần tử cho thuật toán tối ưu bầy đàn Định nghĩa kẹp giới yếu tố vận tốc để tránh giới hạn Sử dụng kẹp = 0.2 trường hợp tốn khơng u cầu thêm Tìm biến thiết kế tốt thời điểm trình tối ưu hóa bầy đàn 55 PHỤ LỤC 4: MODULE GRAPH g = graph.Graph(”Curves”) Tạo cửa sổ đồ họa 2D với tiêu đề "Curves" sử dụng lược đồ màu mặc định g = graph.Graph(”Plots”, ”Mystic”) Tạo cửa sổ đồ họa với tiêu đề “Plots” sử dụng bảng màu định sẵn “Mystic” Các bảng màu có sẵn “Bright” “Artsy” g:AxisLabels(”x”, ”y”) Đặt văn cho nhãn x vào trục x trục y vào y g:Plot(x, y, s, ”Label”) Lập đường cong (đồ thị) cách sử dụng x cho giá trị trục x y cho giá trị trục y Độ dày dòng s Nếu s=0, đường cong vẽ chấm có kích thước s "Nhãn" văn đặt vào góc bên phải cửa sổ đồ họa xác định đường cong Nhiều đường cong(đồ thị) đưa vào cửa sổ đồ họa g:PDF(”file.pdf”) Viết nội dung cửa sổ đồ hoạ thành tệp PDF Kích thước đồ họa tệp có kích thước cố định 800x600 pixel kích thước cửa sổ đồ họa g:PNG(”file.png”) Viết nội dung cửa sổ đồ hoạ thành tệp PNG Kích thước đồ họa tệp có kích thước cố định 800x600 pixel kích thước cửa sổ đồ họa g3 = graph.Graph3D(”Surfaces”) Khởi tạo cửa sổ đồ họa với tiêu đề “Surfaces” g3:Clear() Xóa nội dung chứa cửa sổ đồ họa g3:Triangles(A) Vẽ tam giác xác định ma trận A với nội dung cửa sổ g3 g3:Autoscale() Thay đổi kích thước (phóng to thu nhỏ) nội dung chứa cửa sổ đồ họa g3(các tam giác, đường thẳng) cho phù hợp g3:Sphere(x, y, z, r, red, blue, green, Vẽ hình cầu có bán kính r có tâm đặt alpha, tag) điểm có tọa độ (x,y,z) hình cầu có màu định nghĩa mad đỏ, xanh da trời, xanh alpha Nó định danh nhãn g3:Cylinder(x1, y1, z1, x2, y2, z2, r, red, Vẽ mọt hình trụ có bán kính r đặt tạ điểm green, blue, alpha, tag) có tọa độ (x1,y1,z1) có đường sinh cao đến điển có tọa độ (x2,y2,z2) g3:Cuboid(x1, y1, z1, x2, y2, z3, red, Vẽ hình chữ nhật với điểm (x1, green,blue, alpha, tag) y1,z1) độ dài (x2, y2, z2) Sự định 56 g3:Render() g3:SetRange(xmin, xmax, ymin, ymax, zmin,zmax) g3:SaveSystem() g3:RestoreSystem() g3:RotateSystem(alpha, ax, ay, az) g3:TranslateSystem(dx, dy dz) g3:Rotate(alpha, ax, ay, az) g3:Translate(dx, dy, dz) g3:PNG(”pic.png”) g3:CBDraw(”pic.cb”) g3:Collada(”pic.dae”) hướng dựa hệ tọa độ thiết lập RotateSystem () TranslateSystem () Vẽ nội dung cửa sổ đồ họa Mở rộng nội dung cửa sổ đồ họa theo hình chữ nhật định nghĩa thông số xmin, xmax, ymin, ymax, zmin,zmax Lưu hệ tọa độ (đẩy chúng vào ngăn xếp) Phục hồi hệ thống tọa độ điểm lưu trước (lấy từ ngăn xếp) Xoay hệ tọa độ theo góc alpha cho trước trục xác định ax,ay,az Điều ảnh hưởng đến hoạt động vẽ không ảnh hưởng đến máy ảnh Dịch hệ tọa độ theo hiệu số định nghĩa dx,dy,dz Điều ảnh hưởng đến hoạt động vẽ không ảnh hưởng đến máy ảnh Xoay nội dung máy ảnh theo góc alpha trục định nghĩa ax,ay,az Dịch nội dung sang máy ảnh dx,dy,dz Viết nội dung lên tệp ảnh PNG Viết nội dung lên tệp vẽ CBDraw Viết nội dung lên tệp 3D Collada 57 PHỤ LỤC 5: CHƯƠNG TRÌNH TỐI ƯU DÀN 10 THANH [[ Example demonstrating structural optimization of 10-bar truss by FEM ]] function frame(x) Create FE object struct=fem.Structure("frame") Create nodes nodes = tmath.Matrix({ {11, 0,0,0}, {12, 0, -360, 0}, {13, -360, 0, 0}, {14, -360,-360, 0}, {15,-720, 0, 0}, {16, -720,-360, 0}, {17, -720,-1000, 0}}) struct:AddNodes(nodes) Define support conditions and fix reference node 16 struct:GetNode(17):SetAvailDof(tmath.Matrix({{0, 0, 0, 0, 0, 0}})) struct:GetNode(15):SetAvailDof(tmath.Matrix({{0, 0, 0, 0, 0, 1}})) struct:GetNode(16):SetAvailDof(tmath.Matrix({{0, 0, 0, 0, 0, 1}})) Define 10 cross sections for i=0,9 ss = struct:AddSection(i+1, "RECT") ss:SetColor(tmath.Matrix({{0,255,255,255}})) ss:SetData(tmath.Matrix({{x[i]^0.5,x[i]^0.5}})) end Define material local mm = struct:AddMaterial(8, "LINEAR_ELASTIC") mm:SetData(tmath.Matrix({{1e4, 3, 0.1}})) Define elements struct:AddElements("RECT", 8, 1, tmath.Matrix({{1, 15, 13, 17}})) struct:AddElements("RECT", 8, 2, tmath.Matrix({{2, 13, 11, 17}})) struct:AddElements("RECT", 8, 3, tmath.Matrix({{3, 16, 14, 17}})) struct:AddElements("RECT", 8, 4, tmath.Matrix({{4, 14, 12, 17}})) struct:AddElements("RECT", 8, 5, tmath.Matrix({{5, 13, 14, 17}})) struct:AddElements("RECT", 8, 6, tmath.Matrix({{6, 11, 12, 17}})) struct:AddElements("RECT", 8, 7, tmath.Matrix({{7, 15, 14, 17}})) struct:AddElements("RECT", 8, 8, tmath.Matrix({{8, 16, 13, 17}})) struct:AddElements("RECT", 8, 9, tmath.Matrix({{9, 13, 12, 17}})) struct:AddElements("RECT", 8, 10, tmath.Matrix({{10, 14, 11, 17}})) Assemble stiffness matrix and load vector local nd=struct:GlobalDof() local K=struct:SparseStiffness() local F1=struct:GetAllDisplacements() local node14 = struct:GetNodeIndex(14) F1[{node14,1}] = -100 local node12 = struct:GetNodeIndex(12) F1[{node12,1}] = -100 local F=struct:ToDofDisplacements(F1) Solve for displacements U=K:Solve(F) U1=struct:ToAllDisplacements(U) struct:SetDofDisplacements(U) dmax = math.max(math.abs(U1[{0,0}]),math.abs(U1[{0,1}]),math.abs(U1[{1,0}]),math.a bs(U1[{1,1}])) Compute section forces/moments FS = struct:ElementForce() smax = 58 for i=0,9 A = x[i] ss = math.abs(FS[{i,0}])/A if ss> smax then smax=ss end end Return max displacement and stress for constraints return dmax, smax end Objective function function v(x) local cc=360*(x[0]+x[1]+x[2]+x[3]+x[4]+x[5])+360*2^0.5*(x[6]+x[7]+x[8]+x[9]) return cc end Constraints function (scaling the values affects convergence!) function c(x) local dmax, smax = frame(x) local cc=tmath.Matrix({{dmax/ULIM-1},{smax/SLIM-1}}) return cc*SC_CONSTR end Main program starts here n=10 SC_CONSTR=30 ULIM=2.0 SLIM=25 construct optimizer and assign bounds and starting values ops=optimize.Conmin(n,2) bounds = tmath.Matrix(n,2) bounds:SetLinearCols(0.1, 40) ops:SetBounds(bounds) start = tmath.Matrix(n) start:SetConstant(1) ops:SetDesign(start) run optimizer until converging done = false iter = while (not done) iter = iter+1 done=(ops:Compute()==0) x = ops:GetDesign() obj = v(x) ops:SetObjective(obj) constraints = c(x) ops:SetConstraints(constraints) end get optimal design xopt = ops:GetDesign() print("Optimal cross sections:",xopt) dmax, smax=frame(x) print("obj:", v(x)*0.1,"dmax:",dmax,"smax:",smax) frame(xopt*5) Draw the structure first screen g = graph.Graph3D("Optimized structure") g:Clear() tris = struct:Draw() g:Triangles(tris) g:Autoscale() g:Render() 59 PHỤ LỤC 6: CHƯƠNG TRÌNH TỐI ƯU DÀN 25 THANH [[ Example demonstrating structural optimization of 25-bar space truss by FEM ]] function frame(x) Create FE object struct=fem.Structure("frame") Create nodes b=75 L=200 H=100 nodes = tmath.Matrix({ {11, -b/2, 0, 2*H}, {12, b/2, 0, 2*H}, {13, -b/2, b/2, H}, {14, b/2, b/2, H}, {15,b/2, -b/2, H}, {16, -b/2, -b/2, H}, {17, -L/2, L/2, 0}, {18,L/2, L/2, 0}, {19,L/2, -L/2, 0}, {20,-L/2, -L/2, 0}}) struct:AddNodes(nodes) Define support conditions and fix reference node 16 struct:GetNode(17):SetAvailDof(tmath.Matrix({{0, 0, 0, 1, 1, 1}})) struct:GetNode(18):SetAvailDof(tmath.Matrix({{0, 0, 0, 1, 1, 1}})) struct:GetNode(19):SetAvailDof(tmath.Matrix({{0, 0, 0, 1, 1, 1}})) struct:GetNode(20):SetAvailDof(tmath.Matrix({{0, 0, 0, 1, 1, 1}})) Define cross sections for i=0,7 cỏĐn ặa v o tiỏt diỏằn phỏĐn tỏằ "RECT" hoặc "BEAM3D" ss = struct:AddSection(i+1, "RECT") ss:SetColor(tmath.Matrix({{0,255,255,255}})) ss:SetData(tmath.Matrix({{x[i]^0.5,x[i]^0.5}})) end Define material local mm = struct:AddMaterial(8, "LINEAR_ELASTIC") mm:SetData(tmath.Matrix({{1e4, 3, 0.1}})) Define elements struct:AddElements("RECT", 8, 1, tmath.Matrix({{1, 11, 12, 13}})) struct:AddElements("RECT", 8, 2, tmath.Matrix({{2, 11, 14, 13}})) struct:AddElements("RECT", 8, 2, tmath.Matrix({{3, 12, 13, 14}})) struct:AddElements("RECT", 8, 2, tmath.Matrix({{4, 11, 15, 16}})) struct:AddElements("RECT", 8, 2, tmath.Matrix({{5, 12, 16, 15}})) struct:AddElements("RECT", 8, 3, tmath.Matrix({{6, 12, 15, 16}})) struct:AddElements("RECT", 8, 3, tmath.Matrix({{7, 12, 14, 13}})) struct:AddElements("RECT", 8, 3, tmath.Matrix({{8, 11, 13, 14}})) struct:AddElements("RECT", 8, 3, tmath.Matrix({{9, 11, 16, 15}})) struct:AddElements("RECT", 8, 4, tmath.Matrix({{10, 13, 16, 14}})) struct:AddElements("RECT", 8, 4, tmath.Matrix({{11, 14, 15, 16}})) struct:AddElements("RECT", 8, 5, tmath.Matrix({{12, 13, 14, 16}})) struct:AddElements("RECT", 8, 5, tmath.Matrix({{13, 15, 16, 14}})) struct:AddElements("RECT", 8, 6, tmath.Matrix({{14, 13, 20, 19}})) struct:AddElements("RECT", 8, 6, tmath.Matrix({{15, 16, 17, 18}})) struct:AddElements("RECT", 8, 6, tmath.Matrix({{16, 14, 19, 20}})) struct:AddElements("RECT", 8, 6, tmath.Matrix({{17, 15, 18, 17}})) struct:AddElements("RECT", 8, 7, tmath.Matrix({{18, 13, 18, 19}})) struct:AddElements("RECT", 8, 7, tmath.Matrix({{19, 14, 17, 20}})) struct:AddElements("RECT", 8, 7, tmath.Matrix({{20, 16, 19, 18}})) struct:AddElements("RECT", 8, 7, tmath.Matrix({{21, 15, 20, 17}})) struct:AddElements("RECT", 8, 8, tmath.Matrix({{22, 13, 17, 18}})) 60 struct:AddElements("RECT", 8, 8, tmath.Matrix({{23, 14, 18, 17}})) struct:AddElements("RECT", 8, 8, tmath.Matrix({{24, 15, 19, 20}})) struct:AddElements("RECT", 8, 8, tmath.Matrix({{25, 16, 20, 19}})) Assemble stiffness matrix and load vector local nd=struct:GlobalDof() local K=struct:SparseStiffness() local F1=struct:GetAllDisplacements() local F2=struct:GetAllDisplacements() local node11 = struct:GetNodeIndex(11) local node12 = struct:GetNodeIndex(12) local node13 = struct:GetNodeIndex(13) local node16 = struct:GetNodeIndex(16) load case F1[{node11,1}] = 20 F1[{node11,2}] = -5 F1[{node12,1}] = -20 F1[{node12,2}] = -5 load case F2[{node11,0}] = F2[{node11,1}] = 10 F2[{node11,2}] = -5 F2[{node12,1}] = 10 F2[{node12,2}] = -5 F2[{node13,0}] = 0.5 F2[{node16,0}] = 0.5 cross-section area A=tmath.Matrix({{x[0],x[1],x[1],x[1],x[1],x[2],x[2],x[2],x[2],x[3],x[3],x[4 ],x[4],x[5],x[5],x[5],x[5],x[6],x[6],x[6],x[6],x[7],x[7],x[7],x[7]}}) Solve for displacements local F=struct:ToDofDisplacements(F1) U=K:Solve(F) U1=struct:ToAllDisplacements(U) struct:SetDofDisplacements(U) dmax = math.max(math.abs(U1[{0,0}]),math.abs(U1[{0,1}]),math.abs(U1[{1,0}]),math.a bs(U1[{1,1}])) Compute section forces/moments FS = struct:ElementForce() smax = ss = tmath.Matrix(1,25) for i=0,24 ss[i] = (FS[{i,0}])/A[i] if ss[i]> smax then smax=ss[i] end end smin = tmath.Matrix(1,8) smin[0]=math.min(ss[0]) smin[1]=math.min(ss[1],ss[2],ss[3],ss[4]) smin[2]=math.min(ss[5],ss[6],ss[7],ss[8]) smin[3]=math.min(ss[9],ss[10]) smin[4]=math.min(ss[11],ss[12]) smin[5]=math.min(ss[13],ss[14],ss[15],ss[16]) smin[6]=math.min(ss[17],ss[18],ss[19],ss[20]) smin[7]=math.min(ss[21],ss[22],ss[23],ss[24]) Solve for displacements local F=struct:ToDofDisplacements(F2) U=K:Solve(F) U1=struct:ToAllDisplacements(U) struct:SetDofDisplacements(U) dmax = math.max(dmax,math.abs(U1[{0,0}]),math.abs(U1[{0,1}]),math.abs(U1[{1,0}]),m ath.abs(U1[{1,1}])) 61 Compute section forces/moments FS = struct:ElementForce() for i=0,24 ss[i] = (FS[{i,0}])/A[i] if ss[i]> smax then smax=ss[i] end end smin[0]=math.min(smin[0],ss[0]) smin[1]=math.min(smin[1],ss[1],ss[2],ss[3],ss[4]) smin[2]=math.min(smin[2],ss[5],ss[6],ss[7],ss[8]) smin[3]=math.min(smin[3],ss[9],ss[10]) smin[4]=math.min(smin[4],ss[11],ss[12]) smin[5]=math.min(smin[5],ss[13],ss[14],ss[15],ss[16]) smin[6]=math.min(smin[6],ss[17],ss[18],ss[19],ss[20]) smin[7]=math.min(smin[7],ss[21],ss[22],ss[23],ss[24]) Return max displacement and stress for constraints return dmax, smax, smin end Objective function function v(x) local cc=x[0]*75+x[1]*130.503831361382*4+x[2]*106.800046816469*4+x[3]*75*2+x[4]*7 5*2+x[5]*181.142209327368*4+x[6]*181.142209327368*4+x[7]*133.463478150391*4 return cc end Constraints function (scaling the values affects convergence!) function c(x) local dmax, smax = frame(x) local cc=tmath.Matrix({{dmax/ULIM-1}, {smax/SLIM-1}, {smin[0]/-35.092-1}, {smin[1]/-11.590-1}, {smin[2]/-17.305-1}, {smin[3]/-35.092-1}, {smin[4]/-35.092-1}, {smin[5]/-6.759-1}, {smin[6]/-6.959-1}, {smin[7]/-11.082-1}}) return cc*SC_CONSTR end Main program starts here n=8 SC_CONSTR=1 ULIM=0.35 SLIM=40 construct optimizer and assign bounds and starting values ops=optimize.Conmin(n,10) bounds = tmath.Matrix(n,2) bounds:SetLinearCols(0.01, 3.4) ops:SetBounds(bounds) start = tmath.Matrix(n) start:SetConstant(0.1) ops:SetDesign(start) run optimizer until converging done = false iter = while (not done) iter = iter+1 done=(ops:Compute()==0) x = ops:GetDesign() 62 obj = v(x) ops:SetObjective(obj) constraints = c(x) ops:SetConstraints(constraints) end get optimal design xopt = ops:GetDesign() print("Optimal cross sections:",xopt) dmax, smax, smin=frame(xopt) print("obj:", v(x)*0.1,"dmax:",dmax,"smax:",smax,"smin:",smin) Draw the structure first screen g = graph.Graph3D("Optimized structure") g:Clear() tris = struct:Draw() g:Triangles(tris) g:Autoscale() g:Render() ... tài Nghiên cứu sử dụng ngôn ngữ slangTNG phân tích tối ưu hóa kết cấu hệ chịu trọng tĩnh Mục tiêucủa đề tài: Tìm hiểu ngôn ngữ slangTNG ứng dụng slangTNG tốn phân tích tối ưu hóa kết cấu hệ chịu. .. trình slangTNG để phân tích, tối ưu hóa số kết cấu hệ phẳng hệ không gian chịu tải trọng tĩnh; - Biên dịch tài liệu, diễn giải hướng dẫn sử dụng slangTNG phân tích tối ưu hóa kết cấu hệ thanh; ... 3D slangTNG 28 CHƯƠNG ỨNG DỤNG SLANGTNG TRONG PHÂN TÍCH VÀ TỐI ƯU TRỌNG LƯỢNG KẾT CẤU HỆ THANH Nội dung chương trình bày chi tiết cách sử dụng slangTNG để phân tích tính tốn tối ưu kết cấu hệ

Ngày đăng: 04/07/2019, 23:19

Từ khóa liên quan

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

Tài liệu liên quan