【算法·论文翻译】The Stud GA: A Mini Revolution?

论文链接:https://link.springer.com/chapter/10.1007/BFb0056910

种马遗传算法论文翻译

摘要:

本文提出了一种使用 GA (遗传算法)的新变体进行功能优化的新方法。这种算法称为 Stud GA(种马遗传算法)。代替随机选择,最适合的个体,即种马,而是使用简单的 GA 运算符*与所有其他个体共享其遗传信息。本文保持标准格雷编码。添加了简单的技术来保持种群的多样性,并帮助在困难的多模式搜索空间中实现全局最优。这种方法的好处是提高了准确性、效率和可靠性方面的性能。这种方法似乎能够应用于广泛的功能,并提供优化性能的一致可重复性,各种测试函数用于说明这种方法。呈现的结果表明了对进化计算技术组合的可行且有吸引力的补充。

0.介绍

进化计算中的各种方法可以分组如下:
在这里插入图片描述
上面所有的各种技术都有许多倡导者。Fogel(1995)阐明了每种算法及其衍生物的各种优缺点。虽然进化计算有很多应用,但本文的工作是利用基于遗传的技术进行搜索和优化。
大多数遗传算法(GAs)使用“选择”和“交叉”作为两个主要操作符,以及“突变”作为次要操作符。GAs中的大多数工作都涉及到这些操作符中使用的机制。研究的另一个领域是表示:标准遗传算法使用具有离散位表示的染色体字符串;GAs的其他实现使用整数字符串,特别是用于组合优化。Breeder GA(Muhlenbein et al.,1991)直接使用实数进行连续函数优化。使用位表示使遗传算法适合编码任何类型的函数,在同一字符串中混合各种类型的数据。问题表示的编码技术的选择对可能的交叉运算符类型有影响。比特表示为在个体之间使用简单的比特交换进行交叉提供了更多的灵活性。实数字符串使用加权差异来执行交叉。选择和交叉的结合往往最终会减少种群的多样性,从而阻止遗传算法在优化方面取得进一步的进展,而突变被用来减少这种影响,尽管不能保证突变可以防止局部最佳区域的捕获。其他的方法,如适应度共享、交配限制和动态参数编码(DPE)也尝试这样做。

对各种算法进行基准测试,我们希望建立以下部分或全部算法(A.R.E. A.S):

  • 精度:算法达到全局最优的能力。
  • 可靠性:该算法重复性能的能力。
  • 效率:优化的成本(功能评估的数量)
  • 适用性:该算法处理不同问题类型的能力
  • 稳定性:在有限范围内的最小控制参数集。

1.目标

这项工作的主要目标是提供一种新的遗传算法,可以提高性能标准(AREAS)。BGAs和其他新兴的算法,如微分进化,(Storn,1996),给出了一些改进。然而,这些算法受到其实数表示的限制,无法优化具有连续函数搜索空间的问题。这项工作试图实现性能改进,同时保持基于离散位串的简单性和强大的算法。

2. 动机

多学科优化(MDO)领域主要存在在航空结构设计行业。MDO问题涉及到一个目标的优化,该目标的属性依赖于来自不同学科的贡献。各学科之间通常有很强的耦合。这些问题的本质给优化器带来了两个主要的挑战:

  • 计算成本:每个函数评估的单位成本通常较高。耦合器增加了优化成本。
  • 组织复杂性:不同学科之间的交互需要达到一个可行的整体设计。这些相互作用使这个过程进一步复杂化。

在试图将进化计算技术应用于MDO问题时,性能问题变得非常重要。这项工作的部分原因是,需要一种有效的算法来处理实际的MDO问题(Khatib和Fleming,1997)。性能的改进将使新算法适合于应用,不仅作为MDO问题的一个诱人的替代方案,而且适用于其他搜索和优化方案。

3. 种马遗传算法

种马遗传算法背后的基本思想是利用种群中最好的个体与所有其他个体交配,以产生新的后代,这里不使用随机选择个体。以下内容描述了SGA:

  1. 初始化随机种群
  2. 选择最优个体用来交配(种马)
  3. 在种马和剩余个体之间执行交叉
  4. 重复此操作,直到满足停止标准为止

交叉运算是该算法的核心。SGA的当前实现是执行以下功能:

  • 打乱两个种马元素(随机选择)
  • 检查被打乱的种马和当前交配之间的汉明距离的多样性:
    ----如果多样性高于设定的阈值,则执行交叉以产生一个子代
    ----否则,突变当前的交配以产生子代
  • 对所有其他交配重复测试。

这里使用的突变是低概率(0.001-0.003)的标准位突变。反转1 bit也被证明是一种有用的替代方法。本文尝试了两种交叉类型:标准的两点交叉和减少的替代均匀交叉。后一种类型是在两个父代之间随机交换不同的位来产生一个子代。在两点交叉的情况下,从产生的两个孩子中随机选择一个孩子。采用汉明距离作为多样性度量方法(不同位的数除以每个字符串的长度)。前门或逻辑门被用来查找不同的位。整个阈值被选择为10%。对每个决策变量进行多样性比较和交叉分析。

这种方法观察到的一个潜在弱点是,当函数为多模态且规模小时,局部最优区域的可能性,通常是2个决策变量。这可以归因于缺乏在高维空间中自然存在的多样性。为了避免这一问题,采用了一种新的扩展染色体结构。对于一个二维问题,比如说,染色体允许每个变量有多个条目,5对。交叉操作是在这个扩展的染色体上完成的。一旦染色体被解码到表型域,就会从可用的决策池中随机选择所需数量的决策变量。用这种方法进行的实验似乎证明了它的使用。请注意,在整个工作中使用了格雷编码。这种遗传算法的实现使用了精英策略,即让最优个体传代。

4. 测试功能

为了测试SGA算法的性能,使用了广泛的测试函数选择。这些函数是从之前的三个研究中选择的,这些研究着眼于使用进化计算技术进行优化的各个方面。

  • 组A: DeFalco等人(1996)研究了BGAs对9种不同GAs的性能,由ScottGordon和Whitley(1993)进行了测试。在这些研究中,De Jong与Rastrigin,Schwefel and Griewangk 的函数一起被用作试验。基于De Jong的测试函数,我们使用第一个和第二个。我们还使用了后三个函数。De Jong的第一个方法是一个简单的单峰函数,第二个是更难的多模态函数。Rastrigin的函数相当困难,大搜索空间具有许多局部最优。Schwefel的函数比Rastrigin的稍容易一些,但有一个次优,与全局最优相当远。Griewangk函数有一个积项,由于决策变量之间的强耦合,提出了额外的遗传算法。
    在这里插入图片描述
    在这里插入图片描述

  • 组B:Fogel(1995,pp 170)提出了Bohachevsky等人(1986)提出的三个二维函数。所有这些功能都是多模态的。这些函数使用进化规划算法(EP)、一个标准遗传算法和另一个使用DPE进行优化。
    在这里插入图片描述

  • 组C:Keane(1996)使用一种名为“Bump”的困难的约束多模态函数,对各种优化算法进行了研究:
    在这里插入图片描述
    这个函数产生了一些峰,这些峰随着距离原点的距离而变小,它们几乎对xi=xj,i,j=1……m.(见图2)对称在这里插入图片描述

5. 结果

为了便于比较,这些性能指标与之前的研究人员使用的指标相似。每一组功能都提出了不同的挑战,因此以不同的方式加以解决。
5.1 组A方法
DeJong的两个函数DJ F1和DJ F2的优化使用两个参数进行基准测试:实现收敛的平均代数(Gen),和该量的标准偏差(StdG)。当取值低于0.01时,可以实现收敛性。Rastrigin和Schwefel的功能也是一样的。为Griewangk的函数选择了一个更严格的值0.0001。GA可以使用400个个体最多运行1000代。可以这样说,这种方法并不真的需要这么多的个体才能正常工作。后三种功能则比较困难,他们的优化过程是通过GA达到最优的总共30次运行的次数来评估的,同时,还使用了平均最终值(AvV)。

表1的结果显示,StudGA与BGA具有竞争力,并且远远优于所有其他GAs。这在三个更困难的多模态问题的结果中更为深刻(表2)。如果选择合适的分辨率来进行位表示,SGA算法也可以在最终结果中获得较高的精度。通常,这里可能会使用14到50位之间的分辨率值。
在这里插入图片描述
在这里插入图片描述
暂时没翻完。。

a.cpp:35:5: error: extra qualification ‘Stud::’ on member ‘sum’ [-fpermissive] 35 | int Stud::sum=0; | ^~~~ a.cpp:35:15: error: ‘int Stud::sum’ conflicts with a previous declaration 35 | int Stud::sum=0; | ^ a.cpp:15:19: note: previous declaration ‘double Stud::sum’ 15 | static double sum; | ^~~ a.cpp:36:5: error: extra qualification ‘Stud::’ on member ‘num’ [-fpermissive] 36 | int Stud::num=0; | ^~~~ a.cpp:45:2: error: expected ‘}’ at end of input 45 | } | ^ a.cpp:9:12: note: to match this ‘{’ 9 | class Stud { | ^ a.cpp: In member function ‘void Stud::print()’: a.cpp:28:24: error: expected primary-expression before ‘,’ token 28 | cout <<number<<, name<<, score<< endl; | ^ a.cpp:28:32: error: expected primary-expression before ‘,’ token 28 | cout <<number<<, name<<, score<< endl; | ^ a.cpp:28:39: error: invalid operands of types ‘float’ and ‘<unresolved overloaded function type>’ to binary ‘operator<<’ 28 | cout <<number<<, name<<, score<< endl; | ~~~~~^~~~~~~ a.cpp: In member function ‘int Stud::main()’: a.cpp:40:8: error: ‘class Stud’ has no member named ‘disp’ 40 | s1.disp(); | ^~~~ a.cpp:41:8: error: ‘class Stud’ has no member named ‘disp’ 41 | s2.disp(); | ^~~~ a.cpp:42:8: error: ‘class Stud’ has no member named ‘disp’ 42 | s3.disp(); | ^~~~ a.cpp:43:25: error: ‘avg’ is not a member of ‘Stud’ 43 | cout<<"avg="<<Stud::avg()<<endl; | ^~~ a.cpp: At global scope: a.cpp:45:2: error: expected unqualified-id at end of input 45 | } | ^
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值