1. Trang chủ
  2. » Luận Văn - Báo Cáo

Sizing optimization of nonlinear planar steel trusses using genetic algorithm

101 2 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 101
Dung lượng 1,46 MB

Nội dung

การหาขนาดทีเ่ หมาะสมของโครงถักเหล็กในระนาบแบบไมเชิงเสน โดยใชขั้นตอนวิธีเชิงพันธุกรรม ดัค เทียน ทราน วิทยานิพนธนี้เปนสวนหนึง่ ของการศึกษาตามหลักสูตรปริญญาวิศวกรรมศาสตรมหาบันฑิต สาขาวิชาวิศวกรรมโยธา ภาควิชาวิศวกรรมโยธา คณะวิศวกรรมศาสตร จุฬาลงกรณมหาวิทยาลัย ปการศึกษา 2547 ISBN 974-53-1844-2 ลิขสิทธิ์ของจุฬาลงกรณมหาวิทยาลัย SIZING OPTIMIZATION OF NONLINEAR PLANAR STEEL TRUSSES USING GENETIC ALGORITHM Mr Tien-Dac TRAN A Thesis Submitted in Partial Fulfillment of the Requirements for the Degree of Master of Engineering in Civil Engineering Department of Civil Engineering Faculty of Engineering Chulalongkorn University Academic Year 2004 ISBN : 974-53-1844-2 Thesis Title Sizing Optimization of Nonlinear Planar Steel Trusses Using Genetic Algorithm By Tien-Dac TRAN Field of study Civil Engineering Thesis Advisor Assistant Professor Thanyawat Pothisiri, Ph.D Accepted by the Faculty of Engineering, Chulalongkorn University in Partial Fulfillment of Requirements for the Master’s Degree ……………………………… Dean of Faculty of Engineering (Professor Direk Lavansiri, Ph.D.) THESIS COMMITTEE ………………………………………… Chairman (Professor Thaksin Thepchatri, Ph.D.) ………………………………………… Thesis Advisor (Assistant Professor Thanyawat Pothisiri, Ph.D.) ………………………………………… Member (Associate Professor Teerapong Senjuntichai, Ph.D.) ………………………………………… (Naret Limsamphancharoen, Ph.D.) Member iv นายดัค เทียน ทราน : การหาขนาดที่เหมาะสมของโครงถักเหล็กในระนาบแบบไมเชิงเสน โดยใช ขั้นตอนวิธเี ชิงพันธุกรรม (SIZING OPTIMIZATION OF NONLINEAR PLANAR STEEL TRUSSES USING GENETIC ALGORITHM) อ ทีป ่ รึกษา: ผูชวยศาสตราจารย ดร.ธัญวัฒน โพธิศิริ, 90 หนา ISBN : 974-53-1844-2 วิธีการออกแบบโครงถักในปจจุบันอาศัยการวิเคราะหโครงถักกอนการกําหนดขนาดหนา ตั ด ของชิ้ น ส ว นโครงถั ก ดั ง นั้ น จึ ง มี ค วามจํ า เป น ในการตรวจสอบกํ า ลั ง และเสถี ย รภาพของ โครงสรางในภาพรวมภายหลังจากขั้นตอนการวิเคราะหโครงสราง นอกจากนี้วิธีการออกแบบใน ปจจุบันยังขาดการพิจารณาพฤติกรรมของโครงสรางในบางประเด็น ยกตัวอยางเชน การวิเคราะห ค า หน ว ยแรงและความเครีย ดใชการวิ เ คราะหแบบยืด หยุน ในขณะที่ การวิเ คราะหกํ า ลัง และ เสถียรภาพของโครงสรางอาศัยการวิเคราะหแบบไมยืดหยุน สงผลใหพฤติกรรมบางประการถูก ละเลยไปจากการใชสมมติฐานดังกลาว การศึกษานี้ คํานึงถึงพฤติกรรมแบบไมเชิงเสนทางเรขาคณิตและทางวัสดุในการวิเคราะห โครงถัก ซึ่งสงผลใหสามารถทํานายกําลังของชิ้นสวน รวมทั้งกําลังที่สภาวะขีดสุดและเสถียรภาพ ของโครงสรางโดยรวมได จึงสามารถลดขั้นตอนการตรวจสอบความสามารถในการรับน้ําหนักของ แตละชิ้นสวน และชวยใหขั้นตอนการออกแบบสะดวกขึ้นอยางมาก มีความเหมาะสมสําหรับการ ออกแบบโดยอัตโนมัติ ในวิธีการที่นําเสนอนี้ ขั้นตอนการออกแบบถูกกําหนดในรูปของปญหาการหาขนาดที่ เหมาะสม โดยเซตของขนาดหนาตัดที่เหมาะสมสําหรับแตละชิ้นสวนของโครงถักถูกเลือกโดยใช ขั้นตอนวิธีเชิงพันธุกรรมเปนเครื่องมือ และการกําหนดคาขอบเขตและฟงกชันปรับขนาดเพื่อการลู เขาของคําตอบ ซึ่งจากกรณีศึกษาโครงถักขนาด 10 ชิ้นสวน พบวาวิธีการที่เสนอมีประสิทธิภาพใน การออกแบบใหประหยัดขึ้นเมื่อเปรียบเทียบกับวิธีการออกแบบทั่วไปในปจจุบัน ภาควิชา วิศวกรรมโยธา ลายมือชื่อนิสิต สาขาวิชา วิศวกรรมโยธา ลายมือชื่ออาจารยที่ปรึกษา ปการศึกษา 2547 v # # 4670626021 MAJOR CIVIL ENGINEERING KEYWORDS: PLANAR STEEL TRUSSES / FINITE ELEMENT METHOD / GEOMETRICAL NONLINEARITY / INELASTIC ANALYSIS / GENETIC ALGORITHM / SIZING OPTIMIZATION TIEN-DAC TRAN : SIZING OPTIMIZATION OF NONLINEAR PLANAR STEEL TRUSSES USING GENETIC ALGORITHM THESIS ADVISOR : ASSISTANT PROFESSOR THANYAWAT POTHISIRI, PH.D., 90 pp ISBN : 974-53-1844-2 In the current steel truss design procedures, a whole truss would be analyzed prior to the determination of the member cross-sections It is therefore necessary to check for the strength and the stability of the whole structure after the analysis process The current design methods also lack certain considerations on the structural behaviors That is, the stresses and displacements are determined by elastic analysis, while the strength and stability are determined separately by inelastic analysis As a result, some effects are overlooked by this assumption For the present study, the geometry and material nonlinearities are accounted for in the process of truss analysis Consequently, not only the individual member strength can be predicted but also the limit state strength and the stability of the whole truss The capacity check for individual truss members is no longer required, which simplifies the design process considerably, and is more convenient for automatic design The current design procedure is cast as a sizing optimization problem In the proposed method, an optimal set of cross sections is selected for the members of the truss by using genetic algorithm (GA) as the search engine Certain constraints and penalty functions are adopted to ensure the convergence of the solution Through the case study of a ten-bar truss, it is found that the method is effective in obtaining a more economical design compared with the conventional procedures Department CIVIL ENGINEERING Student’s signature Field of study CIVIL ENGINEERING Advisor’s signature Academic year 2004 ACKNOWLEDGEMENTS First and foremost, the author wishes to express his sincere gratitude and heartfelt thanks to his advisor, Assistant Professor Thanyawat Pothisiri, who has always given him guidance, assistance and support since he first came to Chulalongkorn University Grateful acknowledgements are due to his committee members, Professor Thaksin Thepchatri, Associate Professor Teerapong Senjuntichai, and Dr Naret Limsamphancharoen for their encouragement and comment Naturally, this work has been influenced by many other researchers – the author especially thanks to Wai Fah Chen, Richard Liew, Seung Eock Kim and David Goldberg for their insights Special thanks are also due to everyone who has helped directly and indirectly in the preparation of the thesis It is worth noting that this work would not have been completed without the funding support from AUN/SEED-Net and JICA, who offer the author an invaluable opportunity to enroll in a high quality program abroad He greatly appreciates this precious sponsorship Finally, the author wishes to thank his Mom and Dad, his junior brother and his fiancée for their constant love and encouragement May 2005 Bangkok TABLE OF CONTENTS Page Abstract (Thai) …………………………………………………………………….…iv Abstract (English) ……………………………………………………………… …v Acknowledgements …… ……………………………………………………… vi Table of Contents ……………………………………………………………… vii List of Tables ……………………………………………………………………… ix List of Figures ………………………………………………………………….… x CHAPTER I INTRODUCTION ……………………………………… ……… I.1 Literature Review ……………………………………………… ……… I.2 Research Objectives ……………………………………………… ….… I.3 Scope of Research ………………………………………………… …… CHAPTER II ANALYSIS OF PLANAR STEEL TRUSS STRUCTURES…… II.1 Practical advanced analysis of planar steel trusses ………… ……… 10 II.2 The LRFD Specifications ……………………………………… … 14 II.3 The tangent modulus ……………………………………… ……… 16 II.4 The algorithms 18 CHAPTER III SIZING OPTIMIZATION OF PLANAR STEEL TRUSSES 23 III.1 Genetic algorithms ………………………………………… …… 23 III.2 Sizing optimization of planar steel trusses……………… ……… 31 CHAPTER IV CASE STUDY – A TEN-BAR TRUSS PROBLEM ……… 36 IV.1 Nonlinear analysis ………………… ……………………………… 37 IV.2 Sizing optimization using genetic algorithm ……………………… 43 viii Page CHAPTER V CONCLUSIONS ……………………… ……………… ……… 48 REFERENCES …………………………… 49 APPENDIX ……………………… ……… 51 VITA …………….………………………… 90 LIST OF TABLES Table 2.1 The possibilities of the truss passing or failing the check at each analysis step……………………………………………………… Table 4.1 19 The displacement and axial stress results from the linear elastic analysis …………………………………………………………… 38 Table 4.2 The displacement and axial stress results from the nonlinear analysis …………………………………………………………… 39 Table 4.3 The displacement and axial stress results from the ultimate analysis …………………………………………………………… 40 Table 4.4 The displacement and axial stress results from the ultimate analysis with ∆λ = 0.01…………………………………………… 42 LIST OF FIGURES Figure 2.1 Interaction between a structural system and its component members (Chen 2000) …………………………………………… Figure 2.2 Analysis and design methods (Chen 2000)……………………… Figure 2.3 General analysis types for framed structures (Chan 2001)……… Figure 2.4 The planar truss element in the global coordinates……………… 11 Figure 2.5 The tangent modulus in various models………………………… 17 Figure 2.6 The nonlinear structural analysis flowchart ………………….…… 20 Figure 3.1 The genetic algorithm (Pohlheim 1997) ………………………… 24 Figure 3.2 The roulette wheel………………………………………………… 26 Figure 3.3 An example of crossover ………………………………………… 27 Figure 3.4 Possible positions after discrete recombination (Pohlheim 1997)… 28 Figure 3.5 Area for variable value of offspring (Pohlheim 1997)…………… 29 Figure 3.6 An example of mutation………………………………………… 29 Figure 3.7 Effect of mutation (Pohlheim 1997)……………………………… 30 Figure 3.8 Typical penalty functions (Pezeshk and Camp 2003)…………… 31 Figure 3.9 The main flowchart of the genetic algorithm……………………… 33 Figure 3.10 The penalty function……………………………………………… 35 Figure 4.1 The geometry of the ten bar truss………………………………… Figure 4.2 The constant load ratio of the ten-bar truss in linear elastic analysis 37 Figure 4.3 The graphical representation of the truss displacements 36 from the linear elastic analysis …………………………………… 38 Figure 4.4 The load ratio history of the ten-bar truss in the nonlinear analysis 39 Figure 4.5 The graphical representation of the truss displacements from the nonlinear analysis ……………………………………… 40 Figure 4.6 The load ratio history of the ten-bar truss in the ultimate analysis… 40 Figure 4.7 The graphical representation of the truss displacements from the ultimate analysis ………………………………………… 41 Figure 4.8 The load ratio history of the ten-bar truss in the ultimate analysis with ∆λ = 0.01…………………………………………… 42 76 DUpdateGeometry.m function Length = DUpdateGeometry(Data,Disp) % Update the diplacements into the current coordinates % to get the current member's length vector % % Length = DUpdateGeometry(Data,Disp) % % Variable Description: % Length = (nElem x 1) vector, the member's length vector % Data = the global variables % Node = (nNode x nDOFs) matrix, the current coordinates % Disp = (sdof x 1) vector, the displacements vector % % % convertion of input data % nDOFs = Data{1}; nNode = Data{2}; nElem = Data{5}; Element = Data{6}; Node = Data{3}; % -% update the geometry % -CurrentNode = zeros(nNode,nDOFs); for i=1:nNode CurrentNode(i,1)=Node(i,1)+Disp(i*2-1); CurrentNode(i,2)=Node(i,2)+Disp(i*2); end % -% update the length % -for i=1:nElem % loop for the total number of elements nd(1)=Element(i,1); % 1st connected node for the (iel)-th element nd(2)=Element(i,2); % 2nd connected node for the (iel)-th element % coord of 1st node x1=CurrentNode(nd(1),1); y1=CurrentNode(nd(1),2); % coord of 2nd node x2=CurrentNode(nd(2),1); y2=CurrentNode(nd(2),2); Length(i)=sqrt((x2-x1)^2+(y2-y1)^2); % element length end 77 DUpdateResuls.m function [Disp,Stress] = DupdateResults(Disp,Stress,dispinc,stressinc,history) % Update the step results to the total results % % [Disp,Stress] = DupdateResults(Disp,Stress,dispinc,stressinc,history) % % Variable Description: % Disp = the column vector of global displacements % Stress = the column vector of global stresses % dispinc = the column vector of displacement increments % stressinc = the column vector of stresses increments % history = the vector of load ratio of all members % Disp = Disp + dispinc; nElem = size(Stress,1); % The summation is neglected for the members which reached to failures for i=1:nElem if (history(i)==0) Stress(i) = Stress(i) + stressinc(i); end end 78 DChecking.m function [His,Ult] = Dchecking(Sol,Data,Disp,Stress,Stop, YieldLim,BuckleLim,LR) % Record the load-ratio at which a member reach to yielding/buckling % Check whether all members reach to yielding/buckling % % [His,Ult] = Dchecking(Sol,Data,Disp,Stress,Stop,YieldLim,BuckleLim,LR) % % Variable Description: % His = (or History) store the limit load-ratio of all elements % Ult = (or Ultimate) boolean variable % Sol = (or Solution) the section indices vector of every element % Data = the given input data of the truss problem % Disp = the column vector of global displacements % Stress = the column vector of global stresses % YieldLim = Yield limit % BuckleLim = Buckle limits % LR = (or Load Ratio) the current value at the current step % Stop = The condition to stop the nonlinear analysis % Stop = : stop when the truss nearly collapse : for analysis % Stop = : stop when the maximum displacements is reached :for GA % % % convertion of input data % nElem = Data{5}; maxdisp = Data{18}; % % History % His = zeros(nElem,1); for i=1:nElem if Stress(i)>=0 % Member in tension if Stress(i)>YieldLim His(i)=LR; end else % Member in compression if abs(Stress(i))>BuckleLim(i) His(i)=LR; end end end % % Ultimate % % If Stop = 0, Ultimate status means the truss nearly collapse % If Stop = 1, The truss reaches to maximum displacement if Stop==1 % check for maximum displacement if max(abs(Disp))>maxdisp Ult = true; 79 else Ult = false; end elseif Stop==0 % check for maximum load ratio Failure = His > 0.0; if sum(Failure) == nElem Ult = true; % all members reach to yielding/buckling else Ult = false; % NOT all members reach to yielding/buckling end end 80 DRedoResults.m function [Disp,Stress] = DRedoResults(Disp,Stress,dispinc,stressinc,history) % Recover the total results % % [Disp,Stress] = DRedoResults(Disp,Stress,dispinc,stressinc,history) % % Variable Description: % Disp = the column vector of global displacements % Stress = the column vector of global stresses % dispinc = the column vector of displacement increments % stressinc = the column vector of stresses increments % history = the vector of load ratio of all members % Disp = Disp - dispinc; nElem = size(Stress,1); % The subtraction is neglected for the members which reached to failures for i=1:nElem if (history(i)==0) Stress(i) = Stress(i) - stressinc(i); end end 81 DRecoverGeometry.m function Length = DRecoverGeometry(Data,Disp) % Recover the diplacements from the current coordinates % % Length = DRecoverGeometry(Data,Disp) % % Variable Description: % Length = (nElem x 1) vector, the member's length vector % Data = the global variables % Node = (nNode x nDOFs) matrix, the current coordinates % Disp = (sdof x 1) vector, the displacements vector % % % convertion of input data % nDOFs = Data{1}; nNode = Data{2}; nElem = Data{5}; Element = Data{6}; Node = Data{3}; % -% update the geometry % -CurrentNode = zeros(nNode,nDOFs); for i=1:nNode CurrentNode(i,1)=Node(i,1)-Disp(i*2-1); CurrentNode(i,2)=Node(i,2)-Disp(i*2); end % -% update the length % -for i=1:nElem % loop for the total number of elements nd(1)=Element(i,1); nd(2)=Element(i,2); % 1st connected node for the (iel)-th element % 2nd connected node for the (iel)-th element % coord of 1st node x1=CurrentNode(nd(1),1); y1=CurrentNode(nd(1),2); % coord of 2nd node x2=CurrentNode(nd(2),1); y2=CurrentNode(nd(2),2); Length(i)=sqrt((x2-x1)^2+(y2-y1)^2); end % element length 82 DUpdateHistory.m function history = DUpdateHistory(history,now) % Update the limit load-ratio vector of all elements % % history = DUpdateHistory(history,now) % % Variable Description: % history = [nElem x 1] vector, store values of the greatest load% -ratio at which the particular member start to reach the failure % status % now = [nElem x 1] vector, store the same value of the load-ratio % at a arbitrary step to all the failed members upto that step % for i=1:size(history,1) if ((history(i)==0) & (now(i)~=0)) history(i)=now(i); end end 83 DFinalHistory.m function history = DFinalHistory(history,loadratio) % assign the greatest loadratio value to the last zero-value in history % % history = DFinalHistory(history,loadratio) % % Variable Description: % history = the vector of load ratio of all members % loadratio = the load coefficient at current step % for i=1:size(history,1) if (history(i)==0) history(i)=loadratio; end end 84 DPenalty.m function [score,volume] = DPenalty(Solution,Data,disp,history) % Calculate the penalty ratio by multiple linear segment approach % % [score,volume] = DPenalty(Solution,Data,disp,history) % % Variable Description: % Score = the fitness value for the solution under consideration % Volume = the total volume for the solution under consideration % Solution = the set of section indices for all members % Data = the global variables % Disp = the column vector of global displacements % history = the vector of load ratio of all members % % % convertion of input data % nElem = Data{5}; sdof = Data{7}; Length = Data{9}; Section = Data{16}; MaxD = Data{18}; % % % % % Total number of elements total system dofs = nnode x ndof Length of elements The lists of availabe cross-sectional areas maximum allowable dissplacement % % loop for nodes, check for the maximum allowable displacement % PenalD = 1.0; % coefficient ki = for all nodes for inode = 1:2:sdof dx = disp(inode,1); dy = disp(inode+1,1); if dx>MaxD PenalD = PenalD*(dx/MaxD); end if dy>MaxD PenalD = PenalD*(dy/MaxD); end end % % consider all elements, check for the load-ratio in vector history % PenalS = EPenalHistory(history); % -% total values of penalties % -penalty = PenalD*PenalS; volume = sum(Section(Solution).*Length'); score = penalty*volume; 85 Eassembly.m function [kk]=Eassembly(kk,k,index) % Assembly of element matrices into the system matrix % % [kk]=Eassembly(kk,k,index) % % Variable Description: % kk - system matrix % k - element matrix % index - d.o.f vector associated with an element % edof = length(index); for i=1:edof ii=index(i); for j=1:edof jj=index(j); kk(ii,jj)=kk(ii,jj)+k(i,j); end end 86 EassignDOF.m function [index]=EassignDOF(nd,nnel,ndof) % Compute system dofs associated with each element % % [index]=EassignDOF(nd,nnel,ndof) % % Variable Description: % index - system dof vector associated with element "iel" % nd - element number whose system dofs are to be determined % nnel - number of nodes per element % ndof - number of dofs per node % edof = nnel*ndof; k=0; for i=1:nnel start = (nd(i)-1)*ndof; for j=1:ndof k=k+1; index(k)=start+j; end end 87 EGstiffmat.m function kg = EGstiffmat(axial,area,leng) % Create the local Geometric Stiffness for the 2-d truss element % nodal dof {u_1 v_1 u_2 v_2} % % kg = EGstiffmat(axial,area,leng) % % Variable Description: % kg - element geometric stiffness matrix (size of 4x4) % axial - the axial stress of the element % area - area of truss cross-section % leng - element length % % stiffness matrix c = axial*area/leng; kg = c*[ 1.0 0.0 -1.0 0.0 0.0 1.0 0.0 -1.0 -1.0 0.0 1.0 0.0 0.0; -1.0; 0.0; 1.0]; 88 EIstiffmat.m function ki = EIstiffmat(el,leng,area,beta) % Create the local Inelastic Stiffness for the 2-d truss element % nodal dof {u_1 v_1 u_2 v_2} % % ki = EIstiffmat(el,leng,area,beta) % % Variable Description: % ki - element inelastic stiffness matrix (size of 4x4) % el - elastic modulus % leng - element length % area - area of truss cross-section % beta - angle between the local and global axes % positive if the local axis is in the ccw direction from % the global axis % % stiffness matrix c = cos(beta); s = sin(beta); ki = (area*el/leng)*[ c*c c*s -c*c -c*s c*s s*s -c*s -s*s -c*c -c*s c*c c*s -c*s; -s*s; c*s; s*s]; 89 EPenalHistory.m function coeff = EPenalHistory(history) % find the penalty value of the load ratio history % % coeff = EPenalHistory(history) % % Variable Description: % coeff = the output value % history = the vector of load ratio of all members % num = size(history,1); if num>3 num=3; end his = sort(history); for i=1:num lambda = his(i); if lambda

Ngày đăng: 17/02/2021, 10:21

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN