nsga 的java实现_Java – Scala遗传算法(GA)库中的模拟二进制交叉(SBX)交叉运算符
我在一个很小的研究团队工作,在
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)交叉运算符相关推荐
- java 常用方法_Java常用方法总结(持续更新中)
1.开发中经常会遇到整数相除的情况,如果你想要得到一个带两位小数的值,可以使用一下方法 DecimalFormat df = new DecimalFormat("#.00"); ...
- ssha java接口_java – 从Spring在LDAP中设置SSHA密码
我在解决如何使用SSHA哈希而不是纯文本在Apache DS LDAP中保存密码时遇到问题.据我所知,正确的方法应该是配置Apache DS以使用SSHA存储密码,然后在设置密码时只发送纯文本.但是, ...
- 配置管理和Java开发_Java开发环境之------MyEclipse中服务器Server的配置,管理和启动...
1,MyEclipse中服务器的管理(以tomcat为例) (1),菜单--->Window--->Preferences--->MyEclipse--->Servers--- ...
- ie 访问 java接口_Java基础面试题 库(1~10)
1.下列哪个说法是正确的() A ConcurrentHashMap使用synchronized关键字保证线程安全 B HashMap实现了Collction接口 C Array.a ...
- java 捆绑_java – 如何在jar文件中捆绑图像
在这里似乎有两个问题: >如何让NetBeans在构建项目时将jar包含在生成的jar中? >如何从jar中访问映像文件? 此应用程序适用于NetBeans 6.8并解决了两个方面的问题. ...
- 撩妹java代码_Java程序媛深入浅出设计模式中的撩妹神技--中篇
开篇前言 遇一人白首,择一城终老,是多么美好的人生境界,她和他历经风雨慢慢变老,回首走过的点点滴滴,依然清楚的记得当初爱情萌芽的模样,时维十一月,眼看着光棍节就那么轻轻的来了,没有预告,没有准备`(* ...
- velocity java 静态方法_java – 如何访问Velocity模板中的静态成员?
我不知道在Velocity中是否有办法做到这一点: 我有一个用户POJO,一个名为Status的属性,它看起来像枚举(但不是,因为我被困在Java 1.4上),定义看起来像这样: public cla ...
- java机顶盒_Java技术在数字电视机顶盒中的应用
介绍数字电视广播一多媒体家庭平台(DVB一MHP)是通用的平台,允许用户透明地访问一定范围的多媒体服务,它包括软件结构和硬件设备.系统软件包括实时操作系统.交互引擎.后台数据库.浏览器和应用服务程序管 ...
- java 地址_java地址收藏(持续更新中...)
一.工具地址 1. http://java.sun.com/ 2. http://www.apache.org/ 3. http://www.jboss.com/ 4. http://www.spri ...
最新文章
- 圆圈中最后剩下的数字
- C#和Java的对比
- 构造先存储再计算的加法器电路
- 【PIFO】以线速编程数据包调度
- android服务绑定异步,Android中异步类AsyncTask用法总结
- Open3d之表面重建
- 全网独家:LINUX登录桌面后,如何自动运行自己的应用程序
- java saxreader 生成xml_SAXReader解析xml文件demo
- 正确区分LJMP、AJMP、SJMP、JMP跳转指令
- Brownie Slicing
- 邹恒甫:谈点2002年后海鬼/龟和特聘教授的工资待遇和福利
- 屏幕尺寸大全和UI设计规范
- 【开源项目】Android 手写记事 App(半成品)
- 计算机核心期刊排名及简介一览
- VRRP与BFD的联动
- java-集合-set(不重复集合)知识分解——庖丁解牛版
- 老黄历java_JQ实现程序员老黄历
- 联想m2600c微型计算机,联想ThinkCentre M2600c瘦客户机:简单性能介绍
- 抖音诉百度不正当竞争纠纷案撤诉
- 基于RNN的文本生成算法的代码运转