我在一个很小的研究团队工作,在
Scala中创建/改编遗传算法库,用于使用Scientific Worklow System进行分布式计算,在我们的例子中,我们使用开源OpenMole软件(
http://www.openmole.org/).
最近,我尝试理解并重新实现在JMetal Metaheuristics库(http://jmetal.sourceforge.net/)中编写的SBX交叉运算符,以使其在我们的Scala库中的功能版本中进行调整.
第一个问题,我不了解JMetal的java版本,为什么他们使用两个不同的beta值?
> beta1在方程式中使用min [(y1-yL),…]的第一个arg
> beta2使用min […,(yu – y2)]的第二个arg)
Beta 1和2用于计算alpha值和2(所以这里和jmetal我们还有两个alpha不同的值alpha1和2)…
同样的问题/问题,我们在jmetal两个计算betaq(java代码)或Deb方程,结果:
第二个问题,在SBX的伪算法中,(2)和(3)过程中使用的符号的含义是什么,以及与简单β的差异?特别是当我们想要计算交叉父母的孩子/后代时,就像这里:
编辑
>更正no-op if / else块
> jmetal中的代码作者给了我Nsga-II算法原始源代码的链接,他解释说Deb的SBX描述与他的实现不同:/
我不明白jmetal和原始源代码中的描述和实现之间的区别,你有解释吗?
>更正if / else返回地图
开始翻译成scala
class SBXBoundedCrossover[G <: gagenome f gagenomefactory random=""> Double