我在一个很小的研究团队工作,在

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 = _.nextDouble) extends CrossOver [G, F] {

def this(rate: Double) = this( _ => rate)

def crossOver (genomes : IndexedSeq [G], factory: F) (implicit aprng : Random) = {

val g1 = genomes.random

val g2 = genomes.random

val crossoverRate = rate(aprng)

val EPS = 1.0e-14

val numberOfVariables = g1.wrappedValues.size

val distributionIndex = 2

val variableToMutate = (0 until g1.wrappedValues.size).map{x => !(aprng.nextDouble < 0.5)}

//crossover probability

val offspring = {

if (aprng.nextDouble < crossoverRate) {

(variableToMutate zip (g1.wrappedValues zip g2.wrappedValues)) map {

case (b, (g1e, g2e)) =>

if(b) {

if (abs(g1e - g2e) > EPS){

val y1 = min(g1e, g2e)

val y2 = max(g2e, g1e)

var yL = 0.0 //g1e.getLowerBound

var yu = 1.0 //g1e.getUpperBound

var rand = aprng.nextDouble // ui

var beta1 = 1.0 + (2.0 * (y1 - yL)/(y2 - y1))

var alpha1 = 2.0 - pow(beta1,-(distributionIndex+1.0))

var betaq1 = computebetaQ(alpha1,distributionIndex,rand)

//calcul offspring 1 en utilisant betaq1, correspond au β barre

var c1 = 0.5 * ((y1 + y2) - betaq1 * (y2 - y1))

// -----------------------------------------------

var beta2 = 1.0 + (2.0 * (yu - y2) / (y2 - y1))

var alpha2 = 2.0 - pow(beta2, -(distributionIndex + 1.0))

var betaq2 = computebetaQ(alpha2,distributionIndex,rand)

//calcul offspring2 en utilisant betaq2

var c2 = 0.5 * ((y1 + y2) + betaq2 * (y2 - y1))

if (c1 < yL) c1 = yL

if (c1 > yu) c1 = yu

if (c2 < yL) c2 = yL

if (c2 > yu) c2 = yu

if (aprng.nextDouble <= 0.5) {

(c2,c1)

} else {

(c1, c2)

}

}else{

(g1e, g2e)

}

}else{

(g2e, g1e)

}

}

}else{

// not so good here ...

(g1.wrappedValues zip g2.wrappedValues)

}

}

(factory.buildGenome(offspring.map{_._1}), factory.buildGenome(offspring.map{_._2}))

}

def computebetaQ(alpha:Double, distributionIndex:Double, rand:Double):Double = {

if (rand <= (1.0/alpha)){

pow ((rand * alpha),(1.0 / (distributionIndex + 1.0)))

} else {

pow ((1.0 / (2.0 - rand * alpha)),(1.0 / (distributionIndex + 1.0)))

}

}

非常感谢您的建议或帮助解决这个问题.

SR

nsga 的java实现_Java – Scala遗传算法(GA)库中的模拟二进制交叉(SBX)交叉运算符相关推荐

  1. java 常用方法_Java常用方法总结(持续更新中)

    1.开发中经常会遇到整数相除的情况,如果你想要得到一个带两位小数的值,可以使用一下方法 DecimalFormat df = new DecimalFormat("#.00"); ...

  2. ssha java接口_java – 从Spring在LDAP中设置SSHA密码

    我在解决如何使用SSHA哈希而不是纯文本在Apache DS LDAP中保存密码时遇到问题.据我所知,正确的方法应该是配置Apache DS以使用SSHA存储密码,然后在设置密码时只发送纯文本.但是, ...

  3. 配置管理和Java开发_Java开发环境之------MyEclipse中服务器Server的配置,管理和启动...

    1,MyEclipse中服务器的管理(以tomcat为例) (1),菜单--->Window--->Preferences--->MyEclipse--->Servers--- ...

  4. ie 访问 java接口_Java基础面试题 库(1~10)

    1.下列哪个说法是正确的() A    ConcurrentHashMap使用synchronized关键字保证线程安全 B    HashMap实现了Collction接口 C    Array.a ...

  5. java 捆绑_java – 如何在jar文件中捆绑图像

    在这里似乎有两个问题: >如何让NetBeans在构建项目时将jar包含在生成的jar中? >如何从jar中访问映像文件? 此应用程序适用于NetBeans 6.8并解决了两个方面的问题. ...

  6. 撩妹java代码_Java程序媛深入浅出设计模式中的撩妹神技--中篇

    开篇前言 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有准备`(* ...

  7. velocity java 静态方法_java – 如何访问Velocity模板中的静态成员?

    我不知道在Velocity中是否有办法做到这一点: 我有一个用户POJO,一个名为Status的属性,它看起来像枚举(但不是,因为我被困在Java 1.4上),定义看起来像这样: public cla ...

  8. java机顶盒_Java技术在数字电视机顶盒中的应用

    介绍数字电视广播一多媒体家庭平台(DVB一MHP)是通用的平台,允许用户透明地访问一定范围的多媒体服务,它包括软件结构和硬件设备.系统软件包括实时操作系统.交互引擎.后台数据库.浏览器和应用服务程序管 ...

  9. java 地址_java地址收藏(持续更新中...)

    一.工具地址 1. http://java.sun.com/ 2. http://www.apache.org/ 3. http://www.jboss.com/ 4. http://www.spri ...

最新文章

  1. 圆圈中最后剩下的数字
  2. C#和Java的对比
  3. 构造先存储再计算的加法器电路
  4. 【PIFO】以线速编程数据包调度
  5. android服务绑定异步,Android中异步类AsyncTask用法总结
  6. Open3d之表面重建
  7. 全网独家:LINUX登录桌面后,如何自动运行自己的应用程序
  8. java saxreader 生成xml_SAXReader解析xml文件demo
  9. 正确区分LJMP、AJMP、SJMP、JMP跳转指令
  10. Brownie Slicing
  11. 邹恒甫:谈点2002年后海鬼/龟和特聘教授的工资待遇和福利
  12. 屏幕尺寸大全和UI设计规范
  13. 【开源项目】Android 手写记事 App(半成品)
  14. 计算机核心期刊排名及简介一览
  15. VRRP与BFD的联动
  16. java-集合-set(不重复集合)知识分解——庖丁解牛版
  17. 老黄历java_JQ实现程序员老黄历
  18. 联想m2600c微型计算机,联想ThinkCentre M2600c瘦客户机:简单性能介绍
  19. 抖音诉百度不正当竞争纠纷案撤诉
  20. 基于RNN的文本生成算法的代码运转

热门文章

  1. 纯C++版俄罗斯方块
  2. HTPPS的域名部署项目请求头xx_xx问题解决
  3. moment的常见用法总结
  4. 秋意浓(2018.9.28)
  5. 树莓派4B安装中文拼音输入法
  6. 微信小程序简单介绍及例子,小白可看
  7. python石头剪刀布游戏代码输入格式随机数种子设置为0_Python模拟石头剪刀
  8. web全栈工程师技能介绍
  9. 常犇_专访丨《河神》制片人常犇:走夜路不怕黑,做好剧别怕累
  10. 基于Android手机校园外卖订餐系统