結(jié)構(gòu)力學優(yōu)化算法:遺傳算法(GA)在結(jié)構(gòu)優(yōu)化中的應用_第1頁
結(jié)構(gòu)力學優(yōu)化算法:遺傳算法(GA)在結(jié)構(gòu)優(yōu)化中的應用_第2頁
結(jié)構(gòu)力學優(yōu)化算法:遺傳算法(GA)在結(jié)構(gòu)優(yōu)化中的應用_第3頁
結(jié)構(gòu)力學優(yōu)化算法:遺傳算法(GA)在結(jié)構(gòu)優(yōu)化中的應用_第4頁
結(jié)構(gòu)力學優(yōu)化算法:遺傳算法(GA)在結(jié)構(gòu)優(yōu)化中的應用_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

結(jié)構(gòu)力學優(yōu)化算法:遺傳算法(GA)在結(jié)構(gòu)優(yōu)化中的應用1結(jié)構(gòu)力學優(yōu)化算法:遺傳算法(GA)應用教程1.1緒論1.1.1遺傳算法的基本概念遺傳算法(GeneticAlgorithm,GA)是一種基于自然選擇和遺傳學原理的全局優(yōu)化搜索算法。它通過模擬生物進化過程中的選擇、交叉(雜交)和變異等操作,對由編碼的可能解組成的種群進行迭代優(yōu)化,以尋找最優(yōu)或近似最優(yōu)的解。遺傳算法適用于解決復雜、非線性、多模態(tài)的優(yōu)化問題,尤其在結(jié)構(gòu)力學優(yōu)化中,能夠處理結(jié)構(gòu)設計中的離散變量和連續(xù)變量,以及多目標優(yōu)化問題。1.1.2遺傳算法在結(jié)構(gòu)優(yōu)化中的重要性在結(jié)構(gòu)優(yōu)化領域,遺傳算法因其全局搜索能力和處理復雜約束的能力而受到重視。傳統(tǒng)優(yōu)化方法如梯度下降法在面對多模態(tài)函數(shù)時容易陷入局部最優(yōu),而遺傳算法通過種群的多樣性保持和遺傳操作,能夠更有效地探索解空間,避免局部最優(yōu)陷阱,找到全局最優(yōu)解。此外,遺傳算法能夠處理結(jié)構(gòu)優(yōu)化中的離散變量,如材料選擇、截面類型等,這是許多傳統(tǒng)優(yōu)化算法難以做到的。1.2遺傳算法原理與結(jié)構(gòu)優(yōu)化應用1.2.1原理概述遺傳算法的基本步驟包括:1.初始化種群:隨機生成一組解作為初始種群。2.適應度評估:計算每個解的適應度值,用于衡量解的優(yōu)劣。3.選擇操作:根據(jù)適應度值選擇解進行遺傳操作,適應度高的解有更大的概率被選中。4.交叉操作:隨機選擇兩個解進行交叉,生成新的解。5.變異操作:以一定概率對解進行變異,增加種群的多樣性。6.迭代更新:重復選擇、交叉和變異操作,直到滿足終止條件。1.2.2結(jié)構(gòu)優(yōu)化中的應用在結(jié)構(gòu)優(yōu)化中,遺傳算法可以用于最小化結(jié)構(gòu)的重量、成本,同時滿足強度、剛度等約束條件。下面通過一個簡單的例子來說明遺傳算法在結(jié)構(gòu)優(yōu)化中的應用。1.2.2.1示例:梁的截面優(yōu)化假設我們有一個簡支梁,需要優(yōu)化其截面尺寸以最小化重量,同時滿足最大應力不超過材料的許用應力。梁的長度固定,材料已知,截面尺寸為優(yōu)化變量。#導入必要的庫

importnumpyasnp

fromdeapimportbase,creator,tools,algorithms

#定義問題的適應度函數(shù)

defevaluate(individual):

#individual是一個包含截面尺寸的列表

#假設截面尺寸直接影響重量和應力

weight=individual[0]*individual[1]#截面尺寸的乘積作為重量

stress=1000/individual[0]#假設應力與截面寬度成反比

ifstress>100:#如果應力超過許用應力,適應度為負無窮

return-np.inf,

return1/weight,#適應度為重量的倒數(shù),以最小化重量

#創(chuàng)建DEAP框架

creator.create("FitnessMax",base.Fitness,weights=(1.0,))

creator.create("Individual",list,fitness=creator.FitnessMax)

#初始化種群

toolbox=base.Toolbox()

toolbox.register("attr_float",np.random.uniform,low=1,high=10)

toolbox.register("individual",tools.initRepeat,creator.Individual,toolbox.attr_float,n=2)

toolbox.register("population",tools.initRepeat,list,toolbox.individual)

#注冊遺傳操作

toolbox.register("evaluate",evaluate)

toolbox.register("mate",tools.cxTwoPoint)

toolbox.register("mutate",tools.mutGaussian,mu=0,sigma=1,indpb=0.2)

toolbox.register("select",tools.selTournament,tournsize=3)

#設置遺傳算法參數(shù)

POP_SIZE=100

CXPB=0.7#交叉概率

MUTPB=0.2#變異概率

NGEN=50#迭代次數(shù)

#創(chuàng)建種群并運行遺傳算法

pop=toolbox.population(n=POP_SIZE)

hof=tools.HallOfFame(1)

stats=tools.Statistics(lambdaind:ind.fitness.values)

stats.register("avg",np.mean)

stats.register("std",np.std)

stats.register("min",np.min)

stats.register("max",np.max)

pop,logbook=algorithms.eaSimple(pop,toolbox,cxpb=CXPB,mutpb=MUTPB,ngen=NGEN,stats=stats,halloffame=hof,verbose=True)

#輸出最優(yōu)解

print("最優(yōu)解:",hof[0])1.2.2.2解釋適應度函數(shù):evaluate函數(shù)計算每個個體(即梁的截面尺寸)的適應度。如果應力超過許用應力,適應度為負無窮,表示該解不可行;否則,適應度為重量的倒數(shù),以最小化重量為目標。遺傳操作:mate和mutate分別用于交叉和變異操作,select用于選擇操作。運行算法:通過algorithms.eaSimple函數(shù)運行遺傳算法,種群大小、交叉概率、變異概率和迭代次數(shù)等參數(shù)影響算法的性能。結(jié)果分析:hof記錄了每一代的最優(yōu)解,logbook記錄了每一代的統(tǒng)計信息,如平均適應度、標準差、最小和最大適應度等。通過遺傳算法,我們能夠找到滿足約束條件下的最優(yōu)截面尺寸,從而實現(xiàn)結(jié)構(gòu)的優(yōu)化設計。1.3結(jié)論遺傳算法在結(jié)構(gòu)優(yōu)化中的應用展示了其強大的全局搜索能力和處理復雜約束的能力。通過上述示例,我們了解了遺傳算法的基本原理和在結(jié)構(gòu)優(yōu)化中的具體應用。在實際工程中,遺傳算法能夠幫助工程師在滿足各種設計約束的同時,找到最優(yōu)或近似最優(yōu)的結(jié)構(gòu)設計方案。2遺傳算法原理2.1生物遺傳學基礎遺傳算法(GeneticAlgorithm,GA)的靈感來源于生物進化論中的自然選擇和遺傳學原理。在自然界中,物種通過遺傳、變異和自然選擇的過程不斷進化,以適應環(huán)境。遺傳算法模擬了這一過程,通過編碼、選擇、交叉和變異等操作,對問題的解進行優(yōu)化搜索。2.1.1編碼在遺傳算法中,問題的解被編碼成染色體(Chromosome),通常使用二進制編碼。例如,假設我們有一個結(jié)構(gòu)優(yōu)化問題,需要確定梁的寬度和高度,可以將寬度和高度編碼為二進制串。2.1.2選擇選擇(Selection)是基于解的適應度(Fitness)進行的,適應度高的解有更大的概率被選中,參與后續(xù)的遺傳操作。這一步模擬了自然界中的“適者生存”。2.1.3交叉交叉(Crossover)是遺傳算法的核心操作之一,它模擬了生物遺傳中的基因重組。通過隨機選擇兩個染色體的交叉點,交換它們的部分基因,生成新的染色體。2.1.4變異變異(Mutation)是隨機改變?nèi)旧w中某些基因的操作,以增加種群的多樣性,避免算法陷入局部最優(yōu)。2.2遺傳算法的數(shù)學模型遺傳算法可以被看作是一個迭代的搜索過程,其數(shù)學模型可以表示為:1.初始化一個種群(Population)。2.計算每個個體的適應度。3.選擇適應度高的個體進行交叉和變異操作。4.生成新的種群。5.重復步驟2-4,直到滿足停止條件。2.2.1初始化種群種群初始化是隨機生成一定數(shù)量的個體,每個個體代表問題的一個可能解。2.2.2適應度函數(shù)適應度函數(shù)(FitnessFunction)用于評估個體的優(yōu)劣。在結(jié)構(gòu)優(yōu)化中,適應度函數(shù)可能基于結(jié)構(gòu)的重量、成本或應力等指標。2.2.3遺傳操作遺傳操作包括選擇、交叉和變異,用于生成新的個體。2.2.4停止條件停止條件可以是達到一定的迭代次數(shù),或者適應度函數(shù)的值不再顯著變化。2.3遺傳算法的操作步驟遺傳算法的操作步驟如下:初始化種群:隨機生成一定數(shù)量的個體。評估適應度:計算每個個體的適應度值。選擇:根據(jù)適應度值選擇個體進行遺傳操作。交叉:隨機選擇兩個個體進行交叉操作,生成新的個體。變異:對新個體進行變異操作,增加種群多樣性。更新種群:將新個體加入種群,替換舊個體。檢查停止條件:如果滿足停止條件,則結(jié)束算法;否則,返回步驟2。2.3.1示例:使用Python實現(xiàn)遺傳算法importnumpyasnp

importrandom

#定義適應度函數(shù)

deffitness_function(individual):

#假設適應度函數(shù)是基于個體的二進制編碼計算的

#這里簡化為計算二進制串的1的個數(shù)

returnsum(individual)

#初始化種群

definitialize_population(population_size,chromosome_length):

population=[]

for_inrange(population_size):

individual=[random.choice([0,1])for_inrange(chromosome_length)]

population.append(individual)

returnpopulation

#選擇操作

defselection(population,fitness_values,num_parents):

#使用輪盤賭選擇

parents=np.random.choice(population,num_parents,replace=False,p=fitness_values/np.sum(fitness_values))

returnparents

#交叉操作

defcrossover(parents,offspring_size):

offspring=[]

for_inrange(offspring_size):

parent1=random.choice(parents)

parent2=random.choice(parents)

crossover_point=random.randint(1,len(parent1)-1)

child=parent1[:crossover_point]+parent2[crossover_point:]

offspring.append(child)

returnoffspring

#變異操作

defmutation(offspring,mutation_rate):

foriinrange(len(offspring)):

forjinrange(len(offspring[i])):

ifrandom.random()<mutation_rate:

offspring[i][j]=1-offspring[i][j]

returnoffspring

#主函數(shù)

defgenetic_algorithm(population_size,chromosome_length,num_generations,mutation_rate):

#初始化種群

population=initialize_population(population_size,chromosome_length)

forgenerationinrange(num_generations):

#計算適應度

fitness_values=[fitness_function(individual)forindividualinpopulation]

#選擇

parents=selection(population,fitness_values,population_size//2)

#交叉

offspring=crossover(parents,population_size-len(parents))

#變異

offspring=mutation(offspring,mutation_rate)

#更新種群

population=parents+offspring

#返回最優(yōu)個體

best_individual=max(population,key=fitness_function)

returnbest_individual

#參數(shù)設置

population_size=50

chromosome_length=10

num_generations=100

mutation_rate=0.01

#運行遺傳算法

best_solution=genetic_algorithm(population_size,chromosome_length,num_generations,mutation_rate)

print("最優(yōu)解:",best_solution)2.3.2代碼解釋適應度函數(shù):fitness_function計算個體的適應度,這里簡化為計算二進制串中1的個數(shù)。初始化種群:initialize_population函數(shù)隨機生成初始種群。選擇操作:selection函數(shù)使用輪盤賭選擇法,選擇適應度高的個體作為父母。交叉操作:crossover函數(shù)隨機選擇兩個父母進行交叉操作,生成新的后代。變異操作:mutation函數(shù)隨機改變后代中的某些基因,以增加種群多樣性。主函數(shù):genetic_algorithm函數(shù)實現(xiàn)了遺傳算法的完整流程,包括初始化種群、評估適應度、選擇、交叉、變異和更新種群。通過上述步驟,遺傳算法能夠在迭代過程中不斷優(yōu)化種群,最終找到問題的最優(yōu)解或近似最優(yōu)解。在結(jié)構(gòu)優(yōu)化領域,遺傳算法可以用于尋找結(jié)構(gòu)設計的最優(yōu)參數(shù),如材料、尺寸和形狀等,以達到最小化成本、重量或應力等目標。3結(jié)構(gòu)優(yōu)化基礎3.1結(jié)構(gòu)優(yōu)化的目標與約束在結(jié)構(gòu)優(yōu)化領域,目標通常涉及最小化結(jié)構(gòu)的重量、成本或應力,同時最大化其剛度、穩(wěn)定性或壽命。這些目標在實際工程設計中至關重要,因為它們直接影響結(jié)構(gòu)的性能和安全性。例如,在設計橋梁時,目標可能是最小化材料使用量以降低成本,同時確保橋梁能夠承受預期的載荷而不發(fā)生破壞。3.1.1目標函數(shù)目標函數(shù)是結(jié)構(gòu)優(yōu)化問題的核心,它定義了優(yōu)化的目標。在結(jié)構(gòu)優(yōu)化中,目標函數(shù)可以是結(jié)構(gòu)的重量、成本、應力或應變能等。例如,如果目標是最小化結(jié)構(gòu)重量,目標函數(shù)可以表示為:f(x)=w1*x1+w2*x2+...+wn*xn其中,w1,w2,3.1.2約束條件約束條件限制了設計變量的取值范圍,確保結(jié)構(gòu)滿足特定的安全和性能標準。約束可以是幾何約束(如尺寸限制)、物理約束(如應力限制)或經(jīng)濟約束(如成本限制)。例如,一個結(jié)構(gòu)可能需要滿足以下約束:應力不超過材料的屈服強度位移不超過允許的最大值結(jié)構(gòu)的重量不超過特定限制這些約束在優(yōu)化過程中必須嚴格遵守,以確保最終設計的可行性和安全性。3.2結(jié)構(gòu)優(yōu)化的常見方法結(jié)構(gòu)優(yōu)化方法多種多樣,從傳統(tǒng)的數(shù)學規(guī)劃方法到現(xiàn)代的智能優(yōu)化算法,每種方法都有其適用場景和優(yōu)缺點。下面介紹幾種常見的結(jié)構(gòu)優(yōu)化方法:3.2.1數(shù)學規(guī)劃方法數(shù)學規(guī)劃方法基于數(shù)學模型,通過求解優(yōu)化問題的數(shù)學公式來找到最優(yōu)解。這些方法包括線性規(guī)劃、非線性規(guī)劃、二次規(guī)劃等。例如,線性規(guī)劃可以用于解決結(jié)構(gòu)設計中的線性約束問題:#線性規(guī)劃示例

fromscipy.optimizeimportlinprog

#目標函數(shù)系數(shù)

c=[-1,4]#最小化-x1+4x2

#約束條件系數(shù)

A=[[-3,1],[1,2]]

b=[6,4]#約束條件-3x1+x2<=6和x1+2x2<=4

#求解線性規(guī)劃問題

res=linprog(c,A_ub=A,b_ub=b,bounds=(None,None),method='highs')

#輸出結(jié)果

print(res)這段代碼使用了scipy.optimize.linprog函數(shù)來求解一個線性規(guī)劃問題,其中目標是最小化函數(shù)?x3.2.2智能優(yōu)化算法智能優(yōu)化算法,如遺傳算法、粒子群優(yōu)化、模擬退火等,是近年來在結(jié)構(gòu)優(yōu)化領域得到廣泛應用的現(xiàn)代方法。這些算法模仿自然界的進化過程或物理現(xiàn)象,能夠處理非線性、多模態(tài)和復雜約束的優(yōu)化問題。3.2.2.1遺傳算法(GA)遺傳算法是一種基于自然選擇和遺傳學原理的搜索算法,適用于解決結(jié)構(gòu)優(yōu)化中的復雜問題。它通過模擬生物進化過程中的選擇、交叉和變異操作,逐步改進種群中的個體,最終找到最優(yōu)解。#遺傳算法示例

fromdeapimportbase,creator,tools,algorithms

importrandom

#定義問題

creator.create("FitnessMin",base.Fitness,weights=(-1.0,))

creator.create("Individual",list,fitness=creator.FitnessMin)

#初始化種群

toolbox=base.Toolbox()

toolbox.register("attr_float",random.random)

toolbox.register("individual",tools.initRepeat,creator.Individual,toolbox.attr_float,n=2)

toolbox.register("population",tools.initRepeat,list,toolbox.individual)

#定義目標函數(shù)

defevaluate(individual):

x,y=individual

returnx**2+y**2,

#注冊目標函數(shù)

toolbox.register("evaluate",evaluate)

#注冊遺傳操作

toolbox.register("mate",tools.cxTwoPoint)

toolbox.register("mutate",tools.mutGaussian,mu=0,sigma=1,indpb=0.1)

toolbox.register("select",tools.selTournament,tournsize=3)

#創(chuàng)建種群

pop=toolbox.population(n=50)

#進行遺傳算法優(yōu)化

algorithms.eaSimple(pop,toolbox,cxpb=0.5,mutpb=0.2,ngen=40)

#輸出最優(yōu)解

best_ind=tools.selBest(pop,1)[0]

print(best_ind)這段代碼使用了DEAP庫來實現(xiàn)遺傳算法,目標是最小化函數(shù)x23.2.3拓撲優(yōu)化拓撲優(yōu)化是一種特殊的結(jié)構(gòu)優(yōu)化方法,用于確定結(jié)構(gòu)內(nèi)部材料的最佳分布。這種方法在設計復雜形狀和結(jié)構(gòu)時非常有效,如飛機機翼、建筑結(jié)構(gòu)等。拓撲優(yōu)化通常涉及二值設計變量,表示材料的存在或不存在。3.2.3.1拓撲優(yōu)化示例拓撲優(yōu)化的實現(xiàn)通常需要專業(yè)的軟件,如OptiStruct或ANSYS,但在Python中,也有庫如Fenics可以用于拓撲優(yōu)化的初步探索。下面是一個使用Fenics進行拓撲優(yōu)化的簡化示例:#拓撲優(yōu)化示例(簡化)

fromdolfinimport*

importnumpyasnp

#定義網(wǎng)格和函數(shù)空間

mesh=UnitSquareMesh(32,32)

V=FunctionSpace(mesh,"CG",1)

#定義邊界條件

defboundary(x,on_boundary):

returnon_boundary

bc=DirichletBC(V,Constant(0),boundary)

#定義材料分布變量

rho=Function(V)

#定義目標函數(shù)和約束條件

#...(此處省略復雜計算)

#進行拓撲優(yōu)化

#...(此處省略優(yōu)化過程)

#輸出最優(yōu)材料分布

#...(此處省略輸出過程)這段代碼使用了Fenics庫來定義一個單位正方形網(wǎng)格,并設置邊界條件。雖然具體的優(yōu)化過程和目標函數(shù)計算被省略,但這個框架展示了如何使用有限元方法進行拓撲優(yōu)化的基本步驟。通過上述介紹,我們可以看到,結(jié)構(gòu)優(yōu)化是一個復雜但至關重要的工程領域,它結(jié)合了數(shù)學、力學和計算機科學的知識,以提高結(jié)構(gòu)的性能和安全性。不同的優(yōu)化方法適用于不同類型的問題,選擇合適的方法對于成功解決結(jié)構(gòu)優(yōu)化問題至關重要。4遺傳算法在結(jié)構(gòu)優(yōu)化中的應用4.1遺傳算法的編碼策略遺傳算法(GeneticAlgorithm,GA)是一種基于自然選擇和遺傳學原理的全局優(yōu)化搜索算法。在結(jié)構(gòu)優(yōu)化領域,GA通過模擬生物進化過程,對結(jié)構(gòu)設計參數(shù)進行優(yōu)化,以尋找最優(yōu)或近似最優(yōu)的解決方案。編碼策略是GA中的關鍵步驟,它決定了設計參數(shù)如何被表示為染色體,從而影響算法的搜索效率和效果。4.1.1進制編碼二進制編碼是最常見的編碼方式,將設計參數(shù)轉(zhuǎn)換為二進制串。例如,對于一個結(jié)構(gòu)的截面尺寸優(yōu)化問題,假設截面尺寸范圍為[10,100],可以將其編碼為8位二進制數(shù),這樣可以表示從10到100之間的所有整數(shù)值。#二進制編碼示例

defbinary_encoding(value,min_val,max_val,bits):

"""

將設計參數(shù)值轉(zhuǎn)換為二進制編碼

:paramvalue:設計參數(shù)值

:parammin_val:參數(shù)最小值

:parammax_val:參數(shù)最大值

:parambits:編碼位數(shù)

:return:二進制編碼字符串

"""

#將參數(shù)值映射到0到2^bits-1的整數(shù)范圍

scaled_value=int((value-min_val)/(max_val-min_val)*(2**bits-1))

#轉(zhuǎn)換為二進制字符串

binary_str=format(scaled_value,'0'+str(bits)+'b')

returnbinary_str

#示例

binary_str=binary_encoding(50,10,100,8)

print(binary_str)#輸出:011001104.1.2實數(shù)編碼實數(shù)編碼直接將設計參數(shù)值表示為實數(shù),適用于連續(xù)變量的優(yōu)化問題。這種編碼方式避免了二進制編碼中可能存在的精度損失問題。#實數(shù)編碼示例

defreal_encoding(value):

"""

將設計參數(shù)值直接表示為實數(shù)

:paramvalue:設計參數(shù)值

:return:實數(shù)編碼值

"""

returnvalue

#示例

real_value=real_encoding(50.23)

print(real_value)#輸出:50.234.2適應度函數(shù)的設計適應度函數(shù)是遺傳算法的核心,它用于評估個體(即結(jié)構(gòu)設計)的優(yōu)劣。在結(jié)構(gòu)優(yōu)化中,適應度函數(shù)通常與結(jié)構(gòu)的性能指標相關,如結(jié)構(gòu)的重量、成本、應力、位移等。設計適應度函數(shù)時,需要確保其能夠準確反映優(yōu)化目標,并且計算效率高。4.2.1示例:最小化結(jié)構(gòu)重量假設我們正在優(yōu)化一個橋梁的截面尺寸,目標是最小化橋梁的總重量。適應度函數(shù)可以定義為結(jié)構(gòu)重量的倒數(shù),這樣,重量越小的結(jié)構(gòu),其適應度值越高。#適應度函數(shù)示例

deffitness_function(section_size):

"""

計算橋梁截面尺寸的適應度值

:paramsection_size:截面尺寸

:return:適應度值

"""

#假設結(jié)構(gòu)重量與截面尺寸的立方成正比

weight=section_size**3

#適應度值定義為結(jié)構(gòu)重量的倒數(shù)

fitness=1/weight

returnfitness

#示例

fitness=fitness_function(10)

print(fitness)#輸出:0.0014.3遺傳算子的選擇與應用遺傳算子包括選擇、交叉和變異,它們模擬了自然進化過程中的遺傳操作,用于生成新的個體(即結(jié)構(gòu)設計)。4.3.1選擇算子選擇算子用于從當前種群中選擇個體進行繁殖,通常基于個體的適應度值。輪盤賭選擇是一種常用的選擇方法,個體被選中的概率與其適應度值成正比。#輪盤賭選擇示例

importrandom

defroulette_wheel_selection(population,fitness_values):

"""

使用輪盤賭選擇方法從種群中選擇個體

:parampopulation:當前種群

:paramfitness_values:種群中個體的適應度值

:return:被選中的個體

"""

#計算總適應度

total_fitness=sum(fitness_values)

#生成一個隨機數(shù)

pick=random.uniform(0,total_fitness)

#累加適應度值,直到超過隨機數(shù)

current=0

fori,individualinenumerate(population):

current+=fitness_values[i]

ifcurrent>pick:

returnindividual

#示例

population=[10,20,30,40,50]

fitness_values=[fitness_function(x)forxinpopulation]

selected_individual=roulette_wheel_selection(population,fitness_values)

print(selected_individual)#輸出:可能是種群中的任意一個個體,但更小的個體被選中的概率更高4.3.2交叉算子交叉算子用于生成新的個體,通過交換兩個父代個體的部分基因。單點交叉是一種簡單而有效的交叉方法,它在染色體的某個隨機位置進行基因交換。#單點交叉示例

defsingle_point_crossover(parent1,parent2):

"""

對兩個父代個體進行單點交叉,生成兩個子代個體

:paramparent1:父代個體1

:paramparent2:父代個體2

:return:子代個體1和子代個體2

"""

#選擇交叉點

crossover_point=random.randint(1,len(parent1)-1)

#生成子代個體

child1=parent1[:crossover_point]+parent2[crossover_point:]

child2=parent2[:crossover_point]+parent1[crossover_point:]

returnchild1,child2

#示例

parent1='01100110'

parent2='01111001'

child1,child2=single_point_crossover(parent1,parent2)

print(child1)#輸出:可能的子代個體1

print(child2)#輸出:可能的子代個體24.3.3變異算子變異算子用于增加種群的多樣性,通過隨機改變個體的某些基因。在結(jié)構(gòu)優(yōu)化中,變異可以防止算法陷入局部最優(yōu)解。#變異算子示例

defmutation(individual,mutation_rate):

"""

對個體進行變異操作

:paramindividual:個體

:parammutation_rate:變異概率

:return:變異后的個體

"""

mutated_individual=list(individual)

foriinrange(len(individual)):

ifrandom.random()<mutation_rate:

#翻轉(zhuǎn)基因

mutated_individual[i]='1'ifindividual[i]=='0'else'0'

return''.join(mutated_individual)

#示例

individual='01100110'

mutated_individual=mutation(individual,0.05)

print(mutated_individual)#輸出:變異后的個體,可能與原個體相同或有部分基因改變通過上述編碼策略、適應度函數(shù)設計以及遺傳算子的應用,遺傳算法能夠在結(jié)構(gòu)優(yōu)化問題中有效地搜索最優(yōu)解。在實際應用中,還需要根據(jù)具體問題調(diào)整算法參數(shù),如種群大小、交叉概率、變異概率等,以達到最佳的優(yōu)化效果。5遺傳算法在結(jié)構(gòu)優(yōu)化中的應用案例分析5.1橋梁結(jié)構(gòu)優(yōu)化遺傳算法(GeneticAlgorithm,GA)是一種基于自然選擇和遺傳學原理的全局優(yōu)化搜索算法,它通過模擬生物進化過程中的選擇、交叉和變異操作,來尋找問題的最優(yōu)解。在橋梁結(jié)構(gòu)優(yōu)化中,GA可以用來確定橋梁的最優(yōu)設計參數(shù),如梁的尺寸、材料類型、支撐位置等,以達到結(jié)構(gòu)的輕量化、成本最小化或強度最大化等目標。5.1.1案例描述假設我們正在設計一座簡支梁橋,目標是最小化橋梁的總重量,同時確保其滿足特定的強度和穩(wěn)定性要求。橋梁由多個平行的梁組成,每個梁的尺寸(寬度和高度)和材料類型(如鋼、混凝土或木材)都是可變的。我們使用GA來尋找最優(yōu)的梁設計參數(shù)。5.1.2GA應用步驟初始化種群:隨機生成一系列梁的設計參數(shù)作為初始種群。適應度評估:計算每個設計的總重量,并檢查其是否滿足強度和穩(wěn)定性要求。不滿足要求的設計將被賦予較低的適應度值。選擇:根據(jù)適應度值選擇設計進行遺傳操作。適應度高的設計有更大的機會被選中。交叉:隨機選擇兩個設計進行交叉操作,生成新的設計。變異:對新生成的設計進行隨機變異,以增加種群的多樣性。迭代:重復選擇、交叉和變異操作,直到達到預設的迭代次數(shù)或找到滿足要求的最優(yōu)解。5.1.3代碼示例以下是一個使用Python和deap庫實現(xiàn)的橋梁結(jié)構(gòu)優(yōu)化的簡化示例:importrandom

fromdeapimportbase,creator,tools,algorithms

#定義問題的適應度和個體

creator.create("FitnessMin",base.Fitness,weights=(-1.0,))

creator.create("Individual",list,fitness=creator.FitnessMin)

#設定參數(shù)范圍

BEAM_WIDTHS=[0.5,1.0,1.5,2.0]

BEAM_HEIGHTS=[0.2,0.4,0.6,0.8]

MATERIALS=['steel','concrete','wood']

#初始化種群

toolbox=base.Toolbox()

toolbox.register("width",random.choice,BEAM_WIDTHS)

toolbox.register("height",random.choice,BEAM_HEIGHTS)

toolbox.register("material",random.choice,MATERIALS)

toolbox.register("individual",tools.initCycle,creator.Individual,

(toolbox.width,toolbox.height,toolbox.material),n=5)

toolbox.register("population",tools.initRepeat,list,toolbox.individual)

#定義適應度函數(shù)

defevaluate(individual):

#假設的適應度計算,實際應用中應使用更復雜的模型

weight=sum([w*hforw,h,_inindividual])

strength=sum([1ifm=='steel'else0.5ifm=='concrete'else0.2for_,_,minindividual])

stability=sum([1ifw/h<2else0forw,h,_inindividual])

ifstrength<5orstability<3:

return10000,#不滿足要求的設計給予高適應度值

returnweight,

#注冊適應度函數(shù)

toolbox.register("evaluate",evaluate)

#遺傳操作

toolbox.register("mate",tools.cxTwoPoint)

toolbox.register("mutate",tools.mutShuffleIndexes,indpb=0.05)

toolbox.register("select",tools.selTournament,tournsize=3)

#創(chuàng)建種群并運行GA

population=toolbox.population(n=30)

hof=tools.HallOfFame(1)

stats=tools.Statistics(lambdaind:ind.fitness.values)

stats.register("avg",numpy.mean)

stats.register("std",numpy.std)

stats.register("min",numpy.min)

stats.register("max",numpy.max)

population,logbook=algorithms.eaSimple(population,toolbox,cxpb=0.5,mutpb=0.2,ngen=40,

stats=stats,halloffame=hof,verbose=True)

#輸出最優(yōu)解

print("最優(yōu)解:",hof[0])5.1.4解釋在這個示例中,我們首先定義了梁的寬度、高度和材料的可能選項。然后,我們使用deap庫初始化種群,每個個體代表一個梁的設計,由寬度、高度和材料組成。適應度函數(shù)evaluate計算每個設計的總重量,并檢查其強度和穩(wěn)定性是否滿足要求。如果設計不滿足要求,適應度值將被設置為一個高值,以避免選擇。遺傳操作包括交叉和變異,用于生成新的設計。最后,我們運行GA算法,直到找到最優(yōu)解。5.2建筑結(jié)構(gòu)優(yōu)化在建筑結(jié)構(gòu)優(yōu)化中,GA同樣可以用來尋找最優(yōu)的設計參數(shù),如柱子和梁的尺寸、材料選擇、建筑布局等,以達到結(jié)構(gòu)的高效、經(jīng)濟和美觀。5.2.1案例描述考慮一個高層建筑的設計,目標是最小化建筑的總成本,同時確保其滿足抗震和風荷載的要求。建筑由多個樓層組成,每個樓層的柱子和梁的尺寸、材料類型都是可變的。我們使用GA來尋找最優(yōu)的樓層設計參數(shù)。5.2.2GA應用步驟初始化種群:隨機生成一系列樓層的設計參數(shù)作為初始種群。適應度評估:計算每個設計的總成本,并檢查其是否滿足抗震和風荷載的要求。不滿足要求的設計將被賦予較低的適應度值。選擇:根據(jù)適應度值選擇設計進行遺傳操作。交叉:隨機選擇兩個設計進行交叉操作,生成新的設計。變異:對新生成的設計進行隨機變異。迭代:重復選擇、交叉和變異操作,直到達到預設的迭代次數(shù)或找到滿足要求的最優(yōu)解。5.2.3代碼示例以下是一個使用Python和deap庫實現(xiàn)的建筑結(jié)構(gòu)優(yōu)化的簡化示例:#假設的參數(shù)范圍和適應度計算

COLUMN_SIZES=[0.3,0.5,0.7,0.9]

BEAM_SIZES=[0.2,0.4,0.6,0.8]

MATERIALS=['reinforced_concrete','steel']

defevaluate(individual):

cost=sum([c*bforc,b,_inindividual])

safety=sum([1ifm=='steel'else0.8for_,_,minindividual])

ifsafety<4:

return10000,

returncost,

#注冊適應度函數(shù)和遺傳操作

toolbox.register("column",random.choice,COLUMN_SIZES)

toolbox.register("beam",random.choice,BEAM_SIZES)

toolbox.register("material",random.choice,MATERIALS)

toolbox.register("individual",tools.initCycle,creator.Individual,

(toolbox.column,toolbox.beam,toolbox.material),n=5)

toolbox.register("population",tools.initRepeat,list,toolbox.individual)

toolbox.register("evaluate",evaluate)

toolbox.register("mate",tools.cxTwoPoint)

toolbox.register("mutate",tools.mutShuffleIndexes,indpb=0.05)

toolbox.register("select",tools.selTournament,tournsize=3)

#創(chuàng)建種群并運行GA

population=toolbox.population(n=30)

hof=tools.HallOfFame(1)

stats=tools.Statistics(lambdaind:ind.fitness.values)

stats.register("avg",numpy.mean)

stats.register("std",numpy.std)

stats.register("min",numpy.min)

stats.register("max",numpy.max)

population,logbook=algorithms.eaSimple(population,toolbox,cxpb=0.5,mutpb=0.2,ngen=40,

stats=stats,halloffame=hof,verbose=True)

#輸出最優(yōu)解

print("最優(yōu)解:",hof[0])5.2.4解釋在這個示例中,我們定義了柱子和梁的尺寸以及材料的可能選項。每個個體代表一個樓層的設計,由柱子尺寸、梁尺寸和材料組成。適應度函數(shù)evaluate計算每個設計的總成本,并檢查其是否滿足安全要求。如果設計不滿足要求,適應度值將被設置為一個高值。遺傳操作包括交叉和變異,用于生成新的樓層設計。最后,我們運行GA算法,直到找到最優(yōu)解。通過這些案例,我們可以看到遺傳算法在結(jié)構(gòu)優(yōu)化中的強大應用能力,它能夠處理復雜的多參數(shù)優(yōu)化問題,找到滿足特定約束條件的最優(yōu)解。6遺傳算法的參數(shù)調(diào)整與優(yōu)化遺傳算法(GeneticAlgorithm,GA)是一種基于自然選擇和遺傳學原理的全局優(yōu)化搜索算法,廣泛應用于結(jié)構(gòu)力學優(yōu)化中。在GA中,參數(shù)的合理設置對算法的性能和優(yōu)化結(jié)果有著至關重要的影響。本教程將深入探討GA中種群大小的選擇、交叉與變異概率的設定以及收斂性與多樣性控制的原理和實踐。6.1種群大小的選擇種群大小是遺傳算法中的一個關鍵參數(shù),它直接影響算法的搜索效率和全局優(yōu)化能力。較大的種群可以提供更多的遺傳多樣性,有助于避免局部最優(yōu)解,但同時會增加計算成本。較小的種群雖然計算效率高,但可能過早收斂,導致搜索空間探索不足。6.1.1原理全局搜索能力:種群越大,包含的解越多樣,全局搜索能力越強。計算成本:種群越大,每一代的計算時間越長,整體運行時間增加。6.1.2實踐在實際應用中,種群大小通常根據(jù)問題的復雜度和計算資源來設定。對于結(jié)構(gòu)優(yōu)化問題,初始種群大小可以從問題變量數(shù)的10倍開始嘗試,然后根據(jù)算法的收斂速度和解的質(zhì)量進行調(diào)整。6.2交叉與變異概率的設定交叉和變異是遺傳算法中的兩個基本操作,用于生成新的解。交叉概率(Pc)和變異概率(Pm)的設定對算法的探索和開發(fā)能力有重要影響。6.2.1原理交叉概率(Pc):較高的Pc有助于算法快速收斂,但可能犧牲解的多樣性。變異概率(Pm):較高的Pm可以增加解的多樣性,避免早熟收斂,但過高的Pm會導致搜索過程變得隨機,降低算法效率。6.2.2實踐通常,交叉概率Pc設置在0.6到0.9之間,而變異概率Pm設置在0.001到0.1之間。這些值可以根據(jù)問題的特性進行微調(diào)。例如,對于高度非線性或復雜的問題,可以適當增加Pm以增強算法的探索能力。6.3收斂性與多樣性控制遺傳算法的收斂性是指算法找到最優(yōu)解或滿意解的能力,而多樣性控制則是指保持種群中解的多樣性,避免算法過早陷入局部最優(yōu)。6.3.1原理選擇操作:通過選擇操作,算法傾向于保留適應度高的個體,這有助于算法收斂。多樣性控制:通過適當?shù)慕徊婧妥儺惒僮鳎梢员3址N群的多樣性,避免早熟收斂。6.3.2實踐為了平衡收斂性和多樣性,可以采用以下策略:自適應調(diào)整:根據(jù)算法的運行情況動態(tài)調(diào)整Pc和Pm,例如,當種群多樣性降低時,適當增加Pm。精英策略:每一代保留一定比例的最優(yōu)個體,確保種群中始終存在高質(zhì)量的解。多樣性評估:定期評估種群的多樣性,如果多樣性過低,可以引入新的隨機個體或增加變異概率。6.3.3代碼示例下面是一個使用Python實現(xiàn)的遺傳算法框架,展示了如何調(diào)整種群大小、交叉概率和變異概率:importnumpyasnp

fromdeapimportbase,creator,tools,algorithms

#定義問題的適應度和個體

creator.create("FitnessMax",base.Fitness,weights=(1.0,))

creator.create("Individual",list,fitness=creator.FitnessMax)

#初始化種群

toolbox=base.Toolbox()

toolbox.register("attr_bool",np.random.randint,0,1)

toolbox.register("individual",tools.initRepeat,creator.Individual,toolbox.attr_bool,n=10)

toolbox.register("population",tools.initRepeat,list,toolbox.individual)

#定義遺傳操作

toolbox.register("evaluate",lambdaind:sum(ind))#示例適應度函數(shù)

toolbox.register("mate",tools.cxTwoPoint)

toolbox.register("mutate",tools.mutFlipBit,indpb=0.05)#變異概率

toolbox.register("select",tools.selTournament,tournsize=3)

#參數(shù)設置

POP_SIZE=50#種群大小

CXPB=0.7#交叉概率

MUTPB=0.2#變異概率

#創(chuàng)建種群

pop=toolbox.population(n=POP_SIZE)

#運行遺傳算法

stats=tools.Statistics(lambdaind:ind.fitness.values)

stats.register("avg",np.mean)

stats.register("std",np.std)

stats.register("min",np.min)

stats.register("max",np.max)

pop,logbook=algorithms.eaSimple(pop,toolbox,cxpb=CXPB,mutpb=MUTPB,ngen=40,stats=stats,verbose=True)

#輸出結(jié)果

print("Bestindividualis:%s\nwithfitness:%s"%(logbook.select("max")[-1],logbook.select("avg")[-1]))在這個示例中,我們定義了一個簡單的適應度函數(shù),即計算個體中1的個數(shù)。種群大小設置為50,交叉概率為0.7,變異概率為0.2。通過調(diào)整這些參數(shù),可以觀察到算法收斂速度和解質(zhì)量的變化。6.4結(jié)論遺傳算法在結(jié)構(gòu)力學優(yōu)化中的應用需要精心調(diào)整參數(shù),包括種群大小、交叉概率和變異概率,以平衡算法的收斂性和多樣性。通過上述實踐策略和代碼示例,可以更好地理解和應用遺傳算法于實際的結(jié)構(gòu)優(yōu)化問題中。7高級遺傳算法技術7.1多目標遺傳算法7.1.1原理多目標遺傳算法(Multi-ObjectiveGeneticAlgorithm,MOGA)是遺傳算法的一種擴展,用于解決具有多個相互沖突目標的優(yōu)化問題。在結(jié)構(gòu)優(yōu)化中,可能需要同時考慮結(jié)構(gòu)的重量、成本、強度和穩(wěn)定性等多個目標,而這些目標往往難以同時達到最優(yōu)。MOGA通過維護一個包含多個解的種群,每個解在不同的目標上可能表現(xiàn)不同,從而探索目標函數(shù)的Pareto最優(yōu)前沿。7.1.2內(nèi)容MOGA的核心在于定義適應度函數(shù)和選擇策略。適應度函數(shù)需要能夠評估解在所有目標上的表現(xiàn),而選擇策略則需要能夠有效地在種群中選擇出那些在Pareto前沿上的解。常見的多目標選擇策略包括非支配排序、擁擠度距離和Pareto排序。7.1.2.1示例假設我們有一個結(jié)構(gòu)優(yōu)化問題,目標是最小化結(jié)構(gòu)的重量和成本。我們可以定義兩個適應度函數(shù),一個用于評估重量,另一個用于評估成本。下面是一個使用Python和DEAP庫實現(xiàn)的多目標遺傳算法示例:importrandom

fromdeapimportbase,creator,tools,algorithms

#定義問題的適應度和個體

creator.create("FitnessMin",base.Fitness,weights=(-1.0,-1.0))

creator.create("Individual",list,fitness=creator.FitnessMin)

#初始化種群

toolbox=base.Toolbox()

toolbox.register("attr_float",random.random)

toolbox.register("individual",tools.initRepeat,creator.Individual,toolbox.attr_float,n=2)

toolbox.register("population",tools.initRepeat,list,toolbox.individual)

#定義適應度函數(shù)

defevalWeightCost(individual):

weight=sum(individual)/len(individual)

cost=sum([x**2forxinindividual])

returnweight,cost

#注冊適應度函數(shù)

toolbox.register("evaluate",evalWeightCost)

#定義遺傳算子

toolbox.register("mate",tools.cxTwoPoint)

toolbox.register("mutate",tools.mutGaussian,mu=0,sigma=1,indpb=0.2)

toolbox.register("select",tools.selNSGA2)

#創(chuàng)建種群

pop=toolbox.population(n=50)

#運行算法

hof=tools.ParetoFront()

stats=tools.Statistics(lambdaind:ind.fitness.values)

stats.register("avg",numpy.mean,axis=0)

stats.register("std",numpy.std,axis=0)

stats.register("min",numpy.min,axis=0)

stats.register("max",numpy.max,axis=0)

pop,logbook=algorithms.eaMuPlusLambda(pop,toolbox,mu=len(pop),lambda_=len(pop),cxpb=0.5,mutpb=0.2,ngen=40,stats=stats,halloffame=hof)

#輸出Pareto前沿解

forindinhof:

print(ind)7.2自適應遺傳算法7.2.1原理自適應遺傳算法(AdaptiveGeneticAlgorithm,AGA)是一種能夠根據(jù)優(yōu)化過程中的信息動態(tài)調(diào)整遺傳算子參數(shù)的遺傳算法。在結(jié)構(gòu)優(yōu)化中,自適應遺傳算法可以根據(jù)種群的多樣性、收斂速度等因素,自動調(diào)整交叉概率、變異概率和種群大小等參數(shù),以提高算法的搜索效率和效果。7.2.2內(nèi)容AGA的關鍵在于設計一個自適應機制,該機制能夠根據(jù)算法的運行狀態(tài)調(diào)整參數(shù)。例如,當種群多樣性較低時,可以增加變異概率以引入新的遺傳信息;當種群收斂速度較慢時,可以增加交叉概率以加速搜索。7.2.2.1示例下面是一個使用Python實現(xiàn)的自適應遺傳算法示例,該算法根據(jù)種群的平均適應度和標準差動態(tài)調(diào)整交叉和變異概率:importrandom

fromdeapimportbase,creator,tools,algorithms

#定義問題的適應度和個體

creator.create("FitnessMin",base.Fitness,weights=(-1.0,))

creator.create("Individual",list,fitness=creator.FitnessMin)

#初始化種群

toolbox=base.Toolbox()

toolbox.register("attr_float",random.random)

toolbox.register("individual",tools.initRepeat,creator.Individual,toolbox.attr_float,n=10)

toolbox.register("population",tools.initRepeat,list,toolbox.individual)

#定義適應度函數(shù)

defevalStructure(individual):

returnsum(individual),

#注冊適應度函數(shù)

toolbox.register("evaluate",evalStructure)

#定義遺傳算子

toolbox.register("mate",tools.cxTwoPoint)

toolbox.register("mutate",tools.mutGaussian,mu=0,sigma=1,indpb=0.2)

#自適應選擇算子參數(shù)

defadaptiveSelect(population,toolbox,n):

avg_fitness=sum([ind.fitness.values[0]forindinpopulation])/len(population)

std_fitness=(sum([(ind.fitness.values[0]-avg_fitness)**2forindinpopulation])/len(population))**0.5

cxpb=0.5+0.5*(std_fitness/(avg_fitness+1e-6))

mutpb=0.2-0.1*(std_fitness/(avg_fitness+1e-6))

returntools.selTournament(population,n,tournsize=3,cxpb=cxpb,mutpb=mutpb)

#注冊自適應選擇算子

toolbox.register("select",adaptiveSelect)

#創(chuàng)建種群

pop=toolbox.population(n=50)

#運行算法

hof=tools.HallOfFame(1)

stats=tools.Statistics(lambdaind:ind.fitness.values)

stats.register("avg",numpy.mean)

stats.register("std",numpy.std)

stats.register("min",numpy.min)

stats.register("max",numpy.max)

pop,logbook=algorithms.eaSimple(pop,toolbox,cxpb=0.5,mutpb=0.2,ngen=40,stats=stats,halloffame=hof)

#輸出最優(yōu)解

print(hof[0])7.3混合遺傳算法7.3.1原理混合遺傳算法(HybridGeneticAlgorithm,HGA)結(jié)合了遺傳算法和局部搜索算法的優(yōu)點,通過在遺傳算法的迭代過程中嵌入局部搜索算法,可以加速算法的收斂速度,提高解的質(zhì)量。在結(jié)構(gòu)優(yōu)化中,HGA可以先通過遺傳算法進行全局搜索,找到可能的解空間,然后通過局部搜索算法對這些解進行精細化調(diào)整,以達到更高的優(yōu)化效果。7.3.2內(nèi)容HGA的關鍵在于選擇合適的局部搜索算法和確定嵌入局部搜索的時機。常見的局部搜索算法包括梯度下降、模擬退火和模式搜索等。嵌入局部搜索的時機通常是在遺傳算法的迭代過程中,當種群的多樣性降低到一定程度或適應度提高到一定程度時。7.3.2.1示例下面是一個使用Python實現(xiàn)的混合遺傳算法示例,該算法在每一代遺傳算法迭代后,對種群中的最優(yōu)解進行局部搜索:importrandom

fromdeapimportbase,creator,tools,algorithms

importnumpyasnp

#定義問題的適應度和個體

creator.create("FitnessMin",base.Fitness,weights=(-1.0,))

creator.create("Individual",list,fitness=creator.FitnessMin)

#初始化種群

toolbox=base.Toolbox()

toolbox.register("attr_float",random.random)

toolbox.register("individual",tools.initRepeat,creator.Individual,toolbox.attr_float,n=10)

toolbox.register("population",tools.initRepeat,list,toolbox.individual)

#定義適應度函數(shù)

defevalStructure(individual):

returnsum(individual),

#注冊適應度函數(shù)

toolbox.register("evaluate",evalStructure)

#定義遺傳算子

toolbox.register("mate",tools.cxTwoPoint)

toolbox.register("mutate",tools.mutGaussian,mu=0,sigma=1,indpb=0.2)

#定義局部搜索算子

deflocalSearch(individual,toolbox):

foriinrange(len(individual)):

individual[i]+=np.random.normal(0,0.1)

individual[i]=max(0,min(1,individual[i]))#確保解在有效范圍內(nèi)

returnindividual,

#注冊局部搜索算子

toolbox.register("local_search",localSearch)

#創(chuàng)建種群

pop=toolbox.population(n=50)

#運行算法

hof=tools.HallOfFame(1)

stats=tools.Statistics(lambdaind:ind.fitness.values)

stats.register("avg",numpy.mean)

stats.register("std",numpy.std)

stats.register("min",numpy.min)

stats.register("max",numpy.max)

#在每一代迭代后進行局部搜索

forginrange(40):

offspring=algorithms.varAnd(pop,toolbox,cxpb=0.5,mutpb=0.2)

fits=toolbox.map(toolbox.evaluate,offspring)

forfit,indinzip(fits,offspr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論