结构力学优化算法:遗传算法(GA):遗传算法的编码与解码技术_第1页
结构力学优化算法:遗传算法(GA):遗传算法的编码与解码技术_第2页
结构力学优化算法:遗传算法(GA):遗传算法的编码与解码技术_第3页
结构力学优化算法:遗传算法(GA):遗传算法的编码与解码技术_第4页
结构力学优化算法:遗传算法(GA):遗传算法的编码与解码技术_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

结构力学优化算法:遗传算法(GA):遗传算法的编码与解码技术1结构力学优化算法:遗传算法(GA):编码与解码技术1.1遗传算法在结构力学优化中的应用遗传算法(GeneticAlgorithm,GA)是一种基于自然选择和遗传学原理的全局优化搜索算法。在结构力学优化领域,GA被广泛应用于解决复杂结构的优化设计问题,如寻找最优的结构尺寸、形状或材料分布。GA通过模拟生物进化过程中的选择、交叉和变异操作,对种群中的个体进行迭代优化,最终收敛到问题的最优解或近似最优解。1.1.1示例:结构尺寸优化假设我们有一个简单的梁结构,需要优化其截面尺寸以最小化材料成本,同时满足强度和刚度要求。我们可以定义一个个体编码,其中每个基因代表梁的一个截面尺寸。例如,对于一个有三个截面的梁,一个个体可以编码为:#个体编码示例

individual=[10,15,20]#每个元素代表一个截面的宽度在优化过程中,GA会生成一个包含多个这种编码的种群,然后通过适应度函数评估每个个体的性能,选择性能较好的个体进行交叉和变异操作,生成新的种群,重复这一过程直到达到预设的迭代次数或满足收敛条件。1.2编码与解码技术的重要性编码与解码是遗传算法中的关键步骤。编码决定了个体在算法中的表示方式,而解码则是将编码后的个体转换回实际问题的解决方案。编码的选择直接影响到算法的搜索效率和效果。例如,对于结构力学优化问题,合理的编码可以确保算法在搜索空间中有效地探索,避免陷入局部最优。1.2.1编码技术进制编码二进制编码是最常见的编码方式,每个基因由一串二进制位组成,代表一个连续或离散的变量。例如,一个变量的取值范围为[0,100],可以使用8位二进制数进行编码:#二进制编码示例

gene='01100101'#代表十进制数9实数编码实数编码直接使用实数表示基因,适用于连续变量的优化问题。例如,对于结构尺寸的优化,可以直接使用实数表示截面宽度:#实数编码示例

gene=15.2#代表截面宽度1.2.2解码技术解码是将编码后的个体转换为实际问题解决方案的过程。对于二进制编码,通常需要将其转换为十进制数,再根据问题的约束条件进行调整。对于实数编码,解码过程相对简单,直接将基因值用于问题的解决方案中。进制编码解码示例假设我们使用8位二进制数编码一个变量,其取值范围为[0,100]:#二进制编码解码示例

defbinary_decode(gene):

#将二进制字符串转换为十进制数

decimal_value=int(gene,2)

#将十进制数映射到实际取值范围

real_value=decimal_value*100/(2**8-1)

returnreal_value

gene='01100101'

real_value=binary_decode(gene)

print(real_value)#输出:97.0实数编码解码示例对于实数编码,解码过程通常直接使用基因值,但可能需要根据问题的约束条件进行调整。例如,如果截面宽度不能小于10,我们可以设置一个解码函数来确保解的可行性:#实数编码解码示例

defreal_decode(gene):

#确保解的可行性

ifgene<10:

return10

returngene

gene=15.2

real_value=real_decode(gene)

print(real_value)#输出:15.2编码与解码技术的选择和设计对于遗传算法在结构力学优化中的应用至关重要,它们直接影响算法的性能和优化结果的准确性。合理的设计可以提高算法的搜索效率,避免无效搜索,从而更快地找到问题的最优解。2遗传算法的编码技术遗传算法(GeneticAlgorithm,GA)是一种基于自然选择和遗传学原理的全局优化搜索算法。在GA中,编码技术是将问题的解表示为染色体上的基因序列的过程,是GA应用的关键步骤之一。不同的编码方式适用于不同类型的问题,下面将详细介绍三种常见的编码技术:二进制编码、实数编码和排列编码。2.1进制编码二进制编码是最常用的编码方式,它将解空间中的每一个解表示为一个二进制串。这种编码方式简单直观,易于实现交叉和变异操作。2.1.1原理在二进制编码中,每个基因位上的0或1代表解空间中的一个参数或变量的取值。例如,如果要优化一个连续变量,可以将其取值范围映射到一个二进制串上,通过串的长度和二进制位的组合来表示不同的数值。2.1.2示例假设我们有一个连续变量x,其取值范围为0,#二进制编码示例

defbinary_encoding(x):

"""

将连续变量x编码为4位二进制串

:paramx:连续变量,取值范围[0,15]

:return:二进制串表示

"""

returnformat(x,'04b')

#解码示例

defbinary_decoding(binary_str):

"""

将4位二进制串解码为连续变量x

:parambinary_str:二进制串

:return:连续变量x

"""

returnint(binary_str,2)

#示例

x=11

binary_str=binary_encoding(x)

print(f"编码后的二进制串:{binary_str}")

decoded_x=binary_decoding(binary_str)

print(f"解码后的连续变量:{decoded_x}")2.2实数编码实数编码直接将解空间中的连续变量表示为实数,适用于连续优化问题。这种编码方式避免了二进制编码中精度和串长度之间的权衡问题。2.2.1原理在实数编码中,每个基因直接表示一个实数,可以是解空间中的一个参数或变量的取值。这种编码方式在处理连续优化问题时更为直接和高效。2.2.2示例假设我们有一个连续变量x,其取值范围为0,#实数编码示例

defreal_encoding(x):

"""

将连续变量x直接表示为实数

:paramx:连续变量,取值范围[0,1]

:return:实数表示

"""

returnx

#解码示例(实数编码中解码操作通常不需要,因为编码和解码是同一操作)

defreal_decoding(real_val):

"""

将实数解码为连续变量x(在实数编码中,这通常是一个不必要的操作)

:paramreal_val:实数表示

:return:连续变量x

"""

returnreal_val

#示例

x=0.345

real_val=real_encoding(x)

print(f"编码后的实数值:{real_val}")

decoded_x=real_decoding(real_val)

print(f"解码后的连续变量:{decoded_x}")2.3排列编码排列编码适用于处理排列组合问题,如旅行商问题(TSP)。在排列编码中,染色体表示为一个元素的序列,每个元素代表解空间中的一个位置或元素。2.3.1原理在排列编码中,染色体的每个基因位上的值都是解空间中元素的索引,且每个索引在染色体中只出现一次。这种编码方式确保了染色体的解是一个有效的排列。2.3.2示例假设我们有一个旅行商问题,旅行商需要访问5个城市,我们使用排列编码来表示访问城市的顺序。#排列编码示例

defpermutation_encoding(cities):

"""

将城市访问顺序编码为染色体

:paramcities:城市列表

:return:染色体表示

"""

importrandom

random.shuffle(cities)

returncities

#解码示例(排列编码中解码操作通常不需要,因为编码和解码是同一操作)

defpermutation_decoding(chromosome):

"""

将染色体解码为城市访问顺序(在排列编码中,这通常是一个不必要的操作)

:paramchromosome:染色体表示

:return:城市访问顺序

"""

returnchromosome

#示例

cities=[1,2,3,4,5]

chromosome=permutation_encoding(cities)

print(f"编码后的染色体:{chromosome}")

decoded_cities=permutation_decoding(chromosome)

print(f"解码后的城市访问顺序:{decoded_cities}")以上示例展示了如何使用二进制编码、实数编码和排列编码来表示遗传算法中的解。不同的编码方式适用于不同类型的问题,选择合适的编码方式是遗传算法成功的关键之一。3解码技术3.1直接解码方法直接解码方法是遗传算法中将染色体转换为实际解的一种简单而直接的方式。在结构力学优化中,染色体可能代表结构的尺寸、形状或材料属性。直接解码意味着染色体的每个基因直接对应于结构优化问题中的一个变量。3.1.1示例:结构尺寸优化假设我们正在优化一个由三个不同尺寸的梁组成的结构,目标是最小化结构的总重量,同时满足强度和稳定性要求。我们可以定义一个染色体,其中包含三个基因,每个基因代表一个梁的尺寸(宽度、高度或长度)。#直接解码示例代码

importnumpyasnp

#假设染色体是一个包含三个基因的数组

chromosome=np.array([10,20,30])

#定义解码函数,将染色体转换为结构尺寸

defdecode(chromosome):

#染色体的基因直接对应于结构的尺寸

dimensions=chromosome

returndimensions

#解码染色体

dimensions=decode(chromosome)

print("解码后的结构尺寸:",dimensions)在这个例子中,染色体[10,20,30]直接被解码为结构的尺寸[10,20,30]。这种解码方式适用于基因与优化变量之间存在一对一映射的情况。3.2适应度函数与解码适应度函数是遗传算法的核心,它评估解的质量。在结构力学优化中,适应度函数可能基于结构的重量、强度、稳定性或成本。解码后的解必须通过适应度函数来评估,以确定其在优化问题中的性能。3.2.1示例:基于结构重量的适应度函数继续使用上述结构尺寸优化的例子,我们可以定义一个适应度函数,该函数基于结构的总重量来评估解的质量。假设每个梁的重量由其尺寸决定,我们可以计算总重量并将其作为适应度函数的输出。#适应度函数示例代码

#定义每个梁的单位重量

unit_weights=np.array([0.5,0.7,0.9])

#定义适应度函数

deffitness(dimensions):

#计算结构的总重量

total_weight=np.sum(dimensions*unit_weights)

#适应度函数的目标是最小化总重量

return1/total_weight

#计算解码后的结构的适应度

fitness_value=fitness(dimensions)

print("结构的适应度值:",fitness_value)在这个例子中,dimensions数组通过适应度函数被评估,适应度值越低,表示结构的总重量越小,解的质量越高。3.3解码过程中的约束处理在结构力学优化中,解必须满足一系列约束条件,如强度、稳定性或材料限制。解码过程不仅需要将染色体转换为实际解,还需要确保解满足所有约束条件。3.3.1示例:处理尺寸约束假设在上述结构尺寸优化问题中,每个梁的尺寸必须在一定范围内。我们可以修改解码函数,以确保解码后的尺寸满足这些约束。#解码过程中的约束处理示例代码

#定义尺寸约束

min_dimensions=np.array([5,10,15])

max_dimensions=np.array([15,25,35])

#修改解码函数以处理约束

defdecode(chromosome):

#确保尺寸在约束范围内

dimensions=np.clip(chromosome,min_dimensions,max_dimensions)

returndimensions

#解码染色体并处理约束

dimensions=decode(chromosome)

print("处理约束后的结构尺寸:",dimensions)在这个例子中,np.clip函数用于确保解码后的尺寸不会超出预定义的约束范围。如果染色体中的基因值超出了约束,它们将被裁剪到最近的边界值。通过这些示例,我们可以看到遗传算法中的解码技术如何将染色体转换为实际的结构尺寸,如何评估解的质量,以及如何在解码过程中处理约束条件。这些技术是遗传算法应用于结构力学优化的关键步骤。4遗传操作遗传算法(GA)是一种搜索算法,它模仿自然选择和遗传学原理来寻找优化问题的解决方案。在GA中,解决方案被编码为“染色体”,并通过一系列遗传操作进行进化,以找到最优或近似最优的解。本教程将深入探讨GA中的选择、交叉与变异操作,以及这些操作中的编码应用。4.1选择操作详解选择操作是遗传算法中的关键步骤,它决定了哪些“染色体”(即解决方案)将被用于后续的遗传操作。选择操作通常基于染色体的适应度值,适应度值越高的染色体被选中的概率越大。4.1.1适应度函数适应度函数用于评估每个染色体的质量。例如,在结构力学优化中,适应度函数可能基于结构的重量、成本或强度。#适应度函数示例

deffitness_function(chromosome):

#假设染色体编码了结构的参数

#这里计算结构的强度作为适应度值

strength=calculate_strength(chromosome)

returnstrength4.1.2选择方法常见的选择方法包括轮盘赌选择、锦标赛选择和排名选择。轮盘赌选择轮盘赌选择中,每个染色体被选中的概率与其适应度值成正比。适应度值高的染色体有更大的概率被选中。#轮盘赌选择示例

defroulette_wheel_selection(population,fitness_values):

#计算总适应度

total_fitness=sum(fitness_values)

#生成一个随机数

pick=random.uniform(0,total_fitness)

current=0

#遍历种群,找到被选中的染色体

foriinrange(len(population)):

current+=fitness_values[i]

ifcurrent>pick:

returnpopulation[i]4.2交叉与变异操作交叉和变异是遗传算法中用于生成新解的主要操作。4.2.1交叉操作交叉操作通过组合两个“父”染色体的部分信息来创建新的“子”染色体。这类似于生物体的有性繁殖。示例:单点交叉#单点交叉示例

defsingle_point_crossover(parent1,parent2):

#选择交叉点

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

#创建子代

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

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

returnchild1,child24.2.2变异操作变异操作通过随机改变染色体中的某些基因来增加种群的多样性,防止算法过早收敛。示例:位翻转变异#位翻转变异示例

defbit_flip_mutation(chromosome,mutation_rate):

#遍历染色体的每个基因

foriinrange(len(chromosome)):

#根据变异率决定是否变异

ifrandom.random()<mutation_rate:

#翻转基因

chromosome[i]=1-chromosome[i]

returnchromosome4.3操作中的编码应用在遗传算法中,编码是将解决方案表示为染色体的过程。编码方式的选择对算法的性能有重大影响。4.3.1编码示例:二进制编码二进制编码是最常见的编码方式,每个基因代表一个二进制位。#二进制编码示例

#假设我们优化一个结构的尺寸,每个尺寸有10个可能的值

#我们可以使用4位二进制数来编码每个尺寸

#例如,染色体可能表示为[0101,1010,0011,1100]

#这对应于尺寸[5,10,3,12]4.3.2解码示例解码是将染色体转换回实际解决方案的过程。#解码示例:将二进制编码转换为实际尺寸

defdecode_chromosome(chromosome):

#将二进制数转换为十进制数

decoded=[int(gene,2)forgeneinchromosome]

#将十进制数映射到实际尺寸

actual_dimensions=[dimension_map[i]foriindecoded]

returnactual_dimensions通过上述示例,我们可以看到遗传算法中的选择、交叉、变异操作以及编码和解码技术是如何工作的。这些操作和编码方式的选择对于遗传算法在结构力学优化等领域的应用至关重要。5编码解码与优化性能5.1编码方式对优化性能的影响遗传算法(GA)的性能在很大程度上取决于编码方式的选择。编码是将问题的解表示为染色体的过程,而染色体是遗传算法中的基本单位,由基因组成。基因编码方式的选择直接影响了算法的搜索效率和解的精度。5.1.1进制编码二进制编码是最常见的编码方式,它将解空间中的每个解表示为一串二进制数字。例如,考虑一个结构力学优化问题,其中需要优化的参数是梁的截面尺寸,假设截面尺寸的范围是[10,100],我们可以使用10位二进制数来表示这个范围内的任何尺寸。#二进制编码示例

defbinary_encoding(value,min_val,max_val,bits):

"""

将给定的值转换为二进制编码。

:paramvalue:需要编码的值

:parammin_val:值的最小可能范围

:parammax_val:值的最大可能范围

:parambits:编码的二进制位数

:return:二进制编码的字符串

"""

range_val=max_val-min_val

normalized_value=(value-min_val)/range_val

binary_value=bin(int(normalized_value*(2**bits)))[2:].zfill(bits)

returnbinary_value

#示例:编码梁的截面尺寸

min_size=10

max_size=100

bits=10

size=50

encoded_size=binary_encoding(size,min_size,max_size,bits)

print(f"编码后的尺寸:{encoded_size}")5.1.2实数编码实数编码直接使用解空间中的实际数值作为基因。这种方式在处理连续变量时更为直观,避免了二进制编码中可能存在的精度损失。#实数编码示例

defreal_encoding(value):

"""

直接使用实际数值作为基因编码。

:paramvalue:需要编码的实数值

:return:实数值本身

"""

returnvalue

#示例:编码梁的截面尺寸

size=50.23

encoded_size=real_encoding(size)

print(f"编码后的尺寸:{encoded_size}")5.2解码技术在优化过程中的作用解码是将染色体转换回问题解空间中的实际解的过程。解码技术对于遗传算法的性能同样重要,因为它决定了算法如何理解和操作解空间。5.2.1进制解码二进制解码将二进制编码的染色体转换回实际的数值。这通常涉及到将二进制串转换为十进制数,然后根据解空间的范围进行反归一化。#二进制解码示例

defbinary_decoding(binary,min_val,max_val,bits):

"""

将二进制编码转换回实际数值。

:parambinary:二进制编码的字符串

:parammin_val:值的最小可能范围

:parammax_val:值的最大可能范围

:parambits:编码的二进制位数

:return:解码后的实际数值

"""

decimal_value=int(binary,2)

normalized_value=decimal_value/(2**bits)

real_value=normalized_value*(max_val-min_val)+min_val

returnreal_value

#示例:解码梁的截面尺寸

binary="0110010010"

min_size=10

max_size=100

bits=10

decoded_size=binary_decoding(binary,min_size,max_size,bits)

print(f"解码后的尺寸:{decoded_size}")5.2.2实数解码实数编码的解码过程相对简单,因为编码和解码是同一过程。然而,在某些情况下,可能需要对解码后的值进行边界检查,确保它们落在解空间的合法范围内。#实数解码示例(边界检查)

defreal_decoding(value,min_val,max_val):

"""

对实数编码进行边界检查,确保值在合法范围内。

:paramvalue:实数值

:parammin_val:值的最小可能范围

:parammax_val:值的最大可能范围

:return:检查边界后的实际数值

"""

ifvalue<min_val:

returnmin_val

elifvalue>max_val:

returnmax_val

else:

returnvalue

#示例:解码梁的截面尺寸

size=120

min_size=10

max_size=100

decoded_size=real_decoding(size,min_size,max_size)

print(f"解码后的尺寸:{decoded_size}")5.3实例分析:不同编码方式下的结构优化考虑一个简单的结构优化问题,目标是最小化梁的重量,同时保持其强度不低于某一阈值。我们将使用两种不同的编码方式(二进制编码和实数编码)来比较它们对遗传算法性能的影响。5.3.1进制编码下的结构优化#二进制编码下的结构优化示例

importrandom

#定义适应度函数

deffitness(binary,min_val,max_val,bits):

"""

计算染色体的适应度。

:parambinary:二进制编码的染色体

:parammin_val:值的最小可能范围

:parammax_val:值的最大可能范围

:parambits:编码的二进制位数

:return:适应度值

"""

size=binary_decoding(binary,min_val,max_val,bits)

#假设强度与尺寸成正比,重量与尺寸的立方成正比

strength=size

weight=size**3

#目标是最小化重量,同时保持强度不低于阈值

ifstrength>=50:

return1/weight

else:

return0

#初始化种群

population=[binary_encoding(random.uniform(10,100),10,100,10)for_inrange(100)]

#计算种群的适应度

fitness_values=[fitness(individual,10,100,10)forindividualinpopulation]

#打印种群中适应度最高的个体

best_individual=max(zip(population,fitness_values),key=lambdax:x[1])[0]

print(f"二进制编码下最优个体:{best_individual}")5.3.2实数编码下的结构优化#实数编码下的结构优化示例

#定义适应度函数

deffitness_real(size):

"""

计算实数编码的染色体的适应度。

:paramsize:实数编码的染色体

:return:适应度值

"""

#假设强度与尺寸成正比,重量与尺寸的立方成正比

strength=size

weight=size**3

#目标是最小化重量,同时保持强度不低于阈值

ifstrength>=50:

return1/weight

else:

return0

#初始化种群

population_real=[random.uniform(10,100)for_inrange(100)]

#计算种群的适应度

fitness_values_real=[fitness_real(individual)forindividualinpopulation_real]

#打印种群中适应度最高的个体

best_individual_real=max(zip(population_real,fitness_values_real),key=lambdax:x[1])[0]

print(f"实数编码下最优个体:{best_individual_real}")5.3.3性能比较在上述示例中,我们使用了两种不同的编码方式来表示梁的截面尺寸,并计算了它们的适应度。实数编码通常提供更直接的搜索过程,避免了二进制编码中可能的精度损失和解的不连续性。然而,二进制编码在处理离散变量时可能更有效,因为它可以利用位操作进行高效的交叉和变异操作。在实际应用中,编码方式的选择应基于问题的特性。对于连续变量,实数编码通常更优;对于离散变量,二进制编码可能更合适。此外,编码方式还影响了遗传操作(如交叉和变异)的设计,因此在选择编码方式时,也应考虑这些操作的效率和效果。通过比较不同编码方式下的优化结果,我们可以更深入地理解编码方式对遗传算法性能的影响,从而在实际问题中做出更合理的选择。6高级编码解码策略6.1自适应编码解码技术6.1.1原理自适应编码解码技术在遗传算法中是一种动态调整编码方式和解码策略的方法,以适应不同优化问题的特性。传统遗传算法使用固定长度的二进制编码,但在复杂问题中,这种编码方式可能无法有效表示解空间的多样性。自适应技术通过在算法运行过程中根据种群的适应度和多样性动态调整编码方式,可以提高算法的搜索效率和全局优化能力。6.1.2内容自适应编码解码技术通常包括以下几个方面:编码长度自适应:根据问题的复杂度和种群的适应度动态调整编码长度,以减少冗余编码或增加编码的精细度。编码类型自适应:在算法运行过程中,根据解空间的特性选择最合适的编码方式,如二进制编码、实数编码或混合编码。解码策略自适应:解码策略应能根据编码方式的变化进行调整,确保解码后的个体在解空间中具有良好的分布。6.1.3示例假设我们正在解决一个结构优化问题,其中结构的尺寸和形状是优化变量。我们可以使用自适应编码解码技术来动态调整编码方式,以提高搜索效率。importnumpyasnp

importrandom

#定义自适应编码类

classAdaptiveEncoding:

def__init__(self,problem_complexity):

blem_complexity=problem_complexity

self.encoding_length=self._calculate_encoding_length()

def_calculate_encoding_length(self):

#根据问题复杂度动态计算编码长度

returnint(np.log2(blem_complexity))

defencode(self,individual):

#使用实数编码或二进制编码,根据种群适应度动态选择

ifself._is_binary_encoding_better():

returnself._binary_encode(individual)

else:

returnself._real_encode(individual)

def_binary_encode(self,individual):

#二进制编码示例

return''.join([bin(int(x))[2:].zfill(self.encoding_length)forxinindividual])

def_real_encode(self,individual):

#实数编码示例

returnindividual

def_is_binary_encoding_better(self):

#假设适应度高于平均值时,使用二进制编码

returnrandom.random()>0.5

defdecode(self,encoded_individual):

#根据编码方式动态解码

ifself._is_binary_encoding_better():

returnself._binary_decode(encoded_individual)

else:

returnself._real_decode(encoded_individual)

def_binary_decode(self,encoded_individual):

#二进制解码示例

return[int(encoded_individual[i:i+self.encoding_length],2)foriinrange(0,len(encoded_individual),self.encoding_length)]

def_real_decode(self,encoded_individual):

#实数解码示例

returnencoded_individual

#创建自适应编码实例

problem_complexity=1000

adaptive_encoding=AdaptiveEncoding(problem_complexity)

#生成一个个体

individual=[random.uniform(0,100)for_inrange(10)]

#编码个体

encoded_individual=adaptive_encoding.encode(individual)

#解码个体

decoded_individual=adaptive_encoding.decode(encoded_individual)

#输出结果

print("OriginalIndividual:",individual)

print("EncodedIndividual:",encoded_individual)

print("DecodedIndividual:",decoded_individual)在这个示例中,我们定义了一个AdaptiveEncoding类,它根据问题的复杂度动态计算编码长度,并在编码和解码过程中根据种群的适应度动态选择编码方式。这种自适应机制可以提高算法在不同问题上的适应性和效率。6.2多目标优化中的编码解码6.2.1原理在多目标优化问题中,遗传算法需要同时优化多个目标函数。编码解码技术在多目标优化中扮演着关键角色,因为它影响着算法如何在多个目标之间进行权衡和搜索。多目标优化中的编码解码技术通常需要能够表示多个目标的解空间,并且在解码时能够生成满足所有目标的解。6.2.2内容多目标

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论