基于遗传算法的大规模工程优化设计方法初探

第七章 基于遗传算法的大规模工程优化设计方法初探

§7.1 概述

前面的章节对单目标遗传算法作了较深入的研究,并作了一些改进,提出了摄动单目标遗传算法,并做了将一般的传统的优化算法(包括改进的MDOD﹑约束复合形法﹑约束变尺度法)与遗传算法进行结合的研究,取得了较好的效果。

但是如果要解的问题是大规模的优化问题,这些改进措施的效果并不理想。在采用规划类算法求解大规模优化问题时,遇到的问题主要有以下几个:(1)敏度分析计算代价很大,以常用的中心差分为例,假设问题的维数为 ,计算一次需要分析模型 次,对于复杂的结构有限元分析和CFD计算,进行一次完整的分析花费的时间是比较多的。随着维数的增加,需要的计算代价可能会超过我们的承受能力,所以现在在结构设计方面有一些基于结构刚度方程的近似敏度分析算法。但是离完全解决问题还有很长的距离,另外一点就是规划法往往采用一维搜索法,虽然采用的方法都比较的高效,但如果由于某种原因(比如初始点的原因﹑优化参数的原因)导致迭代的步数较多,一维搜索的总的计算量也是相当大的。(2)随着问题维数的增加,对于某些比较高效的算法,需要的存储代价也比较大,虽然现在对于节省内存的迫切性比以前有所降低,但是内存开销较大的缺点将使得采用常规配置的计算机计算时间显著增加,这是因为,目前计算机均是采用位于硬盘上的分页文件来模拟物理内存,所以即使系统满足对大内存的申请,也会付出速度上的较大的代价。(3)由于维数的增加,计算误差不可避免的会增加,对于某些存在误差积累问题的优化算法,这将会是一个比较严重的问题。

目前对于大规模的优化问题出现了一些新的算法,遗传算法就是其中的一个分支,但是关于采用遗传算法求解大规模优化问题目前还处在比较初始的阶段,由于维数的增加,出现的计算困难,采用一般遗传算法求解效果有限,本章将就遗传算法在大规模数值优化问题求解上做一些初步的工作。

§7.2 一种新的基于实数编码的稳态遗传算法

§7.2.1 实数编码的引入

在遗传算法中采用二进制编码有如下一些优点:

(1)二进制编码类似于生物染色体的组成,因而算法易于用生物遗传理论

来解释并使得遗传操作如杂交变异很容易实现;

2)采用二进制编码,算法处理的模式最多;

    但如果用二进制编码的遗传算法在求解连续变量优化问题时,存在以下的缺点:

(1)    相邻整数的二进制编码可能具有较大的Hamming距离,例如1516

的二进制表示为0111110000,因此,算法要从15改进到16,则必须改变所有的位。这种缺陷将降低遗传算子的收敛效率。二进制编码的这一缺点有时称为海明悬崖(Hamming cliffs);

(2)    二进制编码时,一般要先给出求解的精度以确定串长,而一当精度

确定后,就很难在算法执行过程中进行调整。从而使算法缺乏微调(fine-turning)的功能。若在算法一开始就选取较高的精度,那么串长就很大,这样也将降低算法的效率。

(3)    在求解高维优化问题时,二进制编码串将非常之长。从而使得算法

的搜索效率很低。

   为了克服二进制编码的缺点,对于问题的变量是实向量的情况,可以直接采用实数编码。采用实数编码也便于引入与问题领域相关的启发信息以增加遗传算法的搜索能力。

§7.2.2 一些常用的实数编码遗传算子

对于实数编码的情形,从理论上讲,二进制编码下的各种遗传操作同样可以使用,但在实际中往往是针对实数编码的特性,引入其他一些遗传算子。

以下是一些常用的实数编码的杂交算子:

是两个父代解向量, 是通过杂交获得的两个后代。

1)离散杂交(Discrete Crosssover

离散杂交又分为部分离散杂交和整体离散杂交。部分离散杂交即是在父代解向量中选择一部分变量(如一个分量或从某个分量以后的所有分量),然后交换这些分量以形成后代,如选择交换第 个分量以后的所有分量,则两个后代为

                                                  7-1

                                                         7-2

而整体杂交则是以 的概率交换 的所有分量,这有点象二进制编码时的均匀性杂交。也可以通过生成模板的形式来实现。若某一位是1,则交换相应的位置,否则保留。

2)算术杂交(arithmetical crossover

算术杂交也分为部分算术杂交和整体算术杂交。

部分算术杂交也是先在父代解向量中选择一部分分量,如第 个分量以后的所有分量,然后生成 区间的随机数 ,则两个后代定义为:

  7-3

7-4

当然这里我们也可以取 ,从而只需要一个随机数。

整体算术杂交生成 区间的 ,组合方式与部分算术杂交相同。

从几何的角度看,我们可以通过 产生 中的一个超立方体,则离散杂交产生的后代都是这个超立方体的顶点,而算术杂交产生的后代则是超立方体内部的点。从这一点来看,算术杂交的搜索范围比离散杂交要大。在实数编码时,杂交算子的作用远没有二进制编码时显得那样重要,故而采用何种杂交算子对算法的性能影响不是很大。

下面介绍在实数编码遗传算法中起很大作用的变异算子,在实数编码时,变异算子的作用不再象二进制编码时仅仅是简单地恢复群体中多样性的损失,它已经成为一个主要的搜索算子。为此,人们设计了很多的变异算子。

1)非一致性变异

在传统的遗传算法中,算子的作用和代数是没有直接关系的。从而,当算法演化到一定代以后,由于缺乏局部搜索,传统的遗传算子将很难获得收益。基于以上原因,Z.Michalewicz首先将变异算子的结果与演化代数联系起来,使得在演化的初期,变异算子范围相对较大,而随着演化的推进,变异的范围越来越小,起着一种对演化系统的微调作用。其具体描述如下:

是一个父解,分量 被选为进行变异,其定义区间是 ,则变异后的解为 ,其中

                                             7-5

注:上式中的 为产生均匀分布随机数的函数。

函数 的具体表达式可以取为

                                                                          7-6

这里 上的一个随机数, 为最大代数, 是决定非一致性程度的一个参数,它起着调整局部搜索区域的作用,其取值一般为25

2)自适应性变异

虽然非一致变异加强了算法的局部搜索能力,但局部搜索的范围只与演化代数有关,而与解的质量无关,即无论解的质量好坏,其搜索范围都是相同的。更为合理的情形应该是使适应值大的个体在较小的范围内搜索而使适应值小的个体在较大的范围内搜索。基于这样的认识,文献37】提出了自适应性变异的思想。

首先定义解的变异温度如下:

是解空间的一个向量, 是它的适应值, 是所解问题的最大适应值,则其变异温度可定义为:

                                                                                          7-7

对于很多问题 是难以确定的,我们这里只要一个粗略的上限即可,一般采用当前群体中的最大适应值作为

有了变异温度的概念以后,其变异方式与非一致性变异算子相同,函数表达式为:

                                                                                7-8

文献37】认为这样定义的变异算子将保护较好的解,使搜索在较小的范围内进行,而对适应度不好的解,搜索的领域较大。

    不过该假定的正确性是存在一些疑问的。这样导致的一个直接后果就是使得基于该思想构造的算法的适应性有限。

3)正态性变异

 在实数编码的遗传算法中正态性变异算子被采用的较多。具体介绍如下:

    在演化策略中,群体的一个个体是由一个解向量 和一个摄动向量 组成,这个摄动向量是变异解向量的控制向量,并且它自己也不断要进行变异,假如 是被选个体,则可按下式产生变异后的新个体

                                                                       7-9

                                                                     7-10

这里 称为二级步长控制参数, 是相互独立的均值为0,方差为 的符合正态分布的随机数。另外一种调整 的原则就是采用Rechenberg 提出的1/5成功法则。即:成功的变异概率应为1/5,如果实际成功的比例大于1/5,则增加 7-5

注:上式中的

函数

                                                                          7-6

这里 2)自适应性变异

虽然非一致变异加强了算法的局部搜索能力,但局部搜索的范围只与演化代数有关,而与解的质量无关,即无论解的质量好坏,其搜索范围都是相同的。更为合理的情形应该是使适应值大的个体在较小的范围内搜索而使适应值小的个体在较大的范围内搜索。基于这样的认识,文献37】提出了自适应性变异的思想。

首先定义解的变异温度如下:

                                                                                          7-7

对于很多问题

有了变异温度的概念以后,其变异方式与非一致性变异算子相同,函数表达式为:

                                                                                7-8

文献37】认为    3)正态性变异

 

   

                                                                       7-9

                                                                     7-10

这里 0 Rechenberg 提出的1/5成功法则。即:成功的变异概率应为1/5,如果实际成功的比例大于1/5,则增加

    for(k=0;k<N;k=k+2)   :算法要求参考群体的群体大小能被2整除。

        {

        采用轮盘赌的方式在 中选择两个父体;

            生成0-1间的随机数r;

     if 执行复制和变异操作,即先将两个父体不加变更地插入

     到新群体 中,然后分别执行正态变异操作;正态变异操作

     采用前面的带二级控制步长的算子;

             为复制概率。

     else执行杂交和变异操作,即先将两个父体进行整体算术杂交,

     再将两子个体插入到新群体 中,再分别执行变异操作,变

     异方式同前;

     }

         if then

         {

                有变异后的个体和

               

          }

      如果当前代为第一代,可能不能得到最优个体(即搜索群体

      中所有的个体均为不可行的个体)。在这种情况下,在参考群体中任

      选一个可行个体作为最优个体。

      将最优个体随机地替换掉搜索群体中一个个体;

     

 }

}

从算法流程可以看出,本算法处理搜索群体

与惩罚函数法不同的是,可行解搜索法只使用目标函数作为适应性的度量,而不需要额外增加附加项,并且它总能返回可行解。它通过一些可行点作参照来进行搜索。其算法特征决定最好参考点的邻域将最有机会被“探测”。

下面为计算

{

       对每个个体 do

       if then

              直接计算

       else

       {

               随机选择

               随机生成

        给定的试探上限。

       

        {

       

             then

                  按替代概率

           }

       else

          采用罚函数法计算

    }

}

算法新增加的控制参数有:参考群体 替换概率

§7.2.5 算例

算例1采用前面计算过的十杆桁架只有应力约束的最轻重量设计。采用该算例的目的在于证明本算法的有效性,另外虽然本算法的主要目的在于计算大规模的优化问题,但是由于大规模的优化问题一般都非常费机时,不太适合作为初始的测试算例。

100

20

+0.6

10

500

0.2

0.1

0.2

 

1

1769.333258

1758.151105

2

1950.279207

1921.299365

3

1922.325182

1895.743759

4

1665.495266

1651.889819

5

1750.583766

1730.877040

6

1663.430915

1650.183034

7

1636.119745

1625.753858

8

1721.621357

1718.238496

9

1982.158213

1968.391852

10

1825.880554

1823.848546

1788.72275

1774.43769

1636.119745

1625.753858

 

    将参考群体减小为10,其他参数不变,随机运行十次得结果如下:

 

1

1611.539457

1609.797957

2

1762.332584

1754.502170

3

1624.950820

1622.669394

4

1702.037140

1695.211785

5

1776.785150

1771.267678

6

1663.548214

1655.143873

7

1729.877825

1722.938619

8

1732.291197

1725.324981

9

1666.098366

1654.351463

10

1654.919162

1648.088944

1692.43799

1685.92969

1611.539457

1609.797957

计算的效果非常惊人,确实体现出了实数编码较大的优越性。而且发现实际上并不需要设定过大的参考群体规模。

保持参考群体规模为10,最大允许测试次数(即用于修改不可行个体的适应度)减小为10,其他参数不变,随机运行十次得结果如下:

 

1

1811.546895

1809.474277

2

1744.998829

1737.641204

3

1817.052017

1802.090705

4

1616.249943

1617.108620

5

1672.453826

1668.948821

6

1944.128791

1931.583628

7

1742.587601

1747.803736

8

1911.012015

1900.174607

9

1883.661044

1869.830386

10

1684.019360

1679.932879

1782.77103

1776.45889

1616.249943

1617.108620

    可以看出减小最大允许测试次数对算法的平均性能有不利的影响。

    前面提到过在实数编码的遗传算法中,起主要作用的算子是变异算子。为此,将复制加变异的概率提高到0.9,其他参数保持不变,随机运行十次得结果如下

 

1

1640.981128

1635.687514

2

1606.744433

1602.386323

3

1755.498511

1750.262869

4

1620.793123

1617.742462

5

1597.355384

1596.167686

6

1836.710158

1834.346607

7

1639.255559

1635.242699

8

1616.698132

1614.543106

9

1829.557425

1821.305559

10

1597.992405

1596.892439

1674.15863

1670.45773

1597.355384

1596.167686

    计算结果非常令人满意。尤其是最优解和采用规划类算法求解的结果非常接近,证实了在演化算法中变异算子的作用远大于杂交算子。

       作者认为,如果问题的值域是离散的,比较好的算法仍然是采用二进制编码的遗传算法。而问题的值域如果是连续的,那么比较好的算法是采用实数编码的遗传算法。当然对于取值属于混合变量的问题(即部分变量为离散值,部分变量为连续值),可以考虑采用部分变量采用二进制编码,部分变量采用实数编码,这时我们就需要考虑对遗传算子进行适当的修改。

    7-2为随机运行一次得到的收敛历程:


7-2

    从图中可以看出迭代过程比较平稳,不同于采用二进制编码的遗传算法开始阶段目标函数值急剧改善,而后改善变得非常缓慢的情况。

    2200杆最轻重量设计。200杆拓扑结构示意图见图7.3,材料参数

    结构有如下5个工况:

116﹑15﹑20﹑29﹑34﹑43﹑48﹑57﹑62﹑71有 正向载荷1000

2514﹑19﹑28﹑33﹑42﹑47﹑56﹑61﹑70﹑75有 负向载荷

     1000

312﹑3﹑4﹑5﹑6﹑8﹑10﹑12﹑14﹑15﹑16﹑﹑﹑73﹑74﹑75有y

     负向载荷10000

4)工况(1)和工况(3)工况的结合;

5)工况(2)和工况(3)工况的结合;

 

    

7.3 200杆拓扑结构

该算例共有独立的设计变量200个,约束经过化简为550个(200个应力约束150200个尺寸下限约束)。这里化简的意思是,对于不同的工况分别计算单元应力响应,节点位移响应,将其中最危险的结果作为单元或是节点的响应。

由于问题规模大,进行敏度分析计算代价较大。而且可能引入较大的误差。作者采用前面提到的改进的约束变尺度法进行计算,未能成功求解。后采用作者改进的序列规划法和倒变量策略,求得理论优化结果如下:

 

杆元编号

 

杆元编号

 

杆元编号

 

杆元编号

 

1

0.210111

51

0.332489

101

0.117325

151

0.156433

2

0.100000

52

4.714133

102

10.832509

152

11.396937

3

0.100000

53

0.100000

103

0.132075

153

1.130866

4

0.202961

54

0.267782

104

0.464708

154

0.313048

5

4.625652

55

7.884743

105

7.097006

155

0.307205

6

0.255035

56

0.100000

106

0.406070

156

1.112113

7

0.100000

57

0.100000

107

0.428955

157

10.670323

8

2.517969

58

0.100000

108

6.614382

158

1.887312

9

0.138652

59

0.100000

109

0.446958

159

0.156433

10

0.133123

60

0.100000

110

0.407249

160

11.004767

11

2.678647

61

0.100000

111

7.092706

161

1.364080

12

0.115250

62

0.100000

112

0.461859

162

0.375055

13

0.132279

63

0.100000

113

0.124650

163

8.309459

14

2.522145

64

9.091965

114

10.832217

164

0.384715

15

0.100000

65

0.100000

115

0.879140

165

1.315923

16

0.254432

66

0.348950

116

0.727912

166

10.970353

17

4.630455

67

5.436994

117

0.721261

167

0.156433

18

0.113690

68

0.255224

118

0.871439

168

1.872591

19

0.104213

69

0.381524

119

10.594874

169

10.691177

20

0.104550

70

5.333691

120

1.526672

170

0.156433

21

0.100000

71

0.388906

121

0.117325

171

0.156433

22

0.100000

72

0.260952

122

8.243121

172

0.156433

23

0.100121

73

5.429994

123

0.322219

173

0.156433

24

0.100121

74

0.348614

124

0.759840

174

0.156433

25

0.112353

75

0.100000

125

7.068655

175

0.156433

26

6.549132

76

9.096941

126

0.706100

176

0.156433

27

0.100000

77

0.157768

127

0.323981

177

0.156433

28

0.344073

78

0.100000

128

8.250747

178

11.342563

29

3.579805

79

0.100000

129

0.117325

179

0.168929

30

0.170422

80

0.171449

130

1.508217

180

1.984326

31

0.217004

81

9.889715

131

10.611878

181

11.846449

32

3.846152

82

0.374440

132

0.117325

182

0.420454

33

0.195036

83

0.100000

133

0.117325

183

1.411970

34

0.148202

84

6.509815

134

0.117325

184

9.309460

35

3.585978

85

0.363901

135

0.127500

185

1.361184

36

0.344639

86

0.366837

136

0.127500

186

0.428781

37

0.100000

87

6.012130

137

0.117325

187

11.814208

38

6.552405

88

0.410056

138

0.117325

188

1.965139

39

0.100000

89

0.444205

139

0.117325

189

0.183595

40

0.100000

90

6.506427

140

11.379923

190

11.363489

41

0.100000

91

0.100000

141

0.144894

191

7.857562

42

0.100000

92

0.372654

142

1.624329

192

6.776273

43

7.879161

93

9.889707

143

8.760705

193

6.786799

44

0.269327

94

0.100000

144

0.783204

194

7.862092

45

0.100000

95

0.100000

145

0.354403

195

14.188158

46

4.721721

96

0.100000

146

7.593633

196

13.985725

47

0.323962

97

0.100000

147

0.346010

197

8.520397

48

0.215902

98

0.100000

148

0.729926

198

8.553420

49

4.592184

99

0.100000

149

8.767548

199

13.952599

50

0.217054

100

0.100000

150

1.607218

200

14.195867

结构重量为28888.035328

    参考文献【26】对于该问题求得的结果如下:

DCOC

DUAL

DOC-FSD

28903.41

28890.30

28906.38

    需要指出的是参考文献【26】的算法是基于桁架结构最轻重量的一些特殊性来得出的,因而不具有普遍性。注:上表中FSD意为满应力法。

由于问题的规模较大,显然搜索群体的规模和搜索代数均需相应增大。

200

20

+0.9

10

2000

2.0

3.0

0.2

0.130.0

 

1

36763.111904

36783.179274

2

36297.883100

36307.744050

28.0,最大遗传代数增大到3000代,随机运行四次结果如下:

 

1

32164.046678

32164.046678

2

32205.974839

32181.220107

3

33835.051844

33823.328592

4

32407.606855

32400.431731

7.4§7.3 结论

本章提出了一种基于实数编码的适用于求解大规模问题的遗传算法,算法采用正态变异算子,对于约束的处理采用带最大试探次数的可行解搜索法,对于超过上限试探次数的个体采用罚函数法构造其适应度,对搜索群体和参考群体分别采取了不同的措施以保证算法的稳态。算例说明了本算法对于求解大规模优化问题是适合的,是一种具有工程实用价值的算法,值得进一步的研究。

作者认为进一步研究的方向有如下几个:(1)将算法进行分布式;(2)提出新的有效的变异算子;(3)提出更有效的处理非线性约束的方法;(4)考虑求解具有等式约束的问题。

 


7.4

§7.4 附录

    下面给出作者改进的序列线性规划法(SLP)的示意流程:

1

2

满足约束条件

      

3 4 2

4 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值