遗传算法Scala实现

此实现参考了遗传算法Java实现源代码,我自己实现了scala版本的遗传算法,scala还在学习阶段,有误的地方请多指教

0. 说明

GA应用于数值函数优化计算
用于评价遗传算法性能:
例如:
De Jong函数F1:
f1(x1,x2,x3)=x1^2+x2^2+x3^2
-5.12<=xi<=5.12 (i=1,2,3)
编码方式:
二进制:取值范围是-5.12到5.12,用长度为10位的二进制编码串来分别表示三个决策变量
10为二进制编码可以表示0-1023之间的1024个不同数,因此将x1,x2,x3的定义域离散化
为1023个均等的区域,包括两个端点在内公有1024个不同的离散点。

1.染色体

package com.ga

import scala.collection.mutable.ArrayBuffer
/**
 * 染色体
 */
class Chrome(val length:Int) extends Cloneable {
  var chrome=new Array[Char](length);
  var chromeLength=length;
  
 //设置基因
 def setGene(begin:Int,end:Int,ge:String):Boolean={
   
   if(ge.length>end-begin+1) return false;
   for(i<-begin to end){
     chrome(i)=ge.charAt(i-begin)
   }
   
   true;
 }
 //获取基因
 def getGene(begin:Int,end:Int):String={
   chrome.subSequence(begin, end+1).toString()
 }
  override def toString():String={
    chrome.mkString
  }
  override def clone={
    val c = super.clone.asInstanceOf[Chrome]
    c.chrome=chrome.clone
    c
  }
}

2. 抽象个体

package com.ga
/**
 * 抽象个体
 */
trait Agent extends Cloneable{

  protected var chrome:Chrome=_;//染色体编码
  protected var geneLength:Int=_;//基因长度
  protected var fitness:Double=_;//适应度
  protected var targetValue:Double=_;//目标函数
  
  
  def coding//编码
  def decode//解码
  def calFitness//计算个体适应度
  def generateAgent//随机生成个体
  def calTargetValue//获取目标函数
  
  def getfitness=fitness
  def getTargetValue=targetValue
  def getChromLen=chrome.chromeLength
  de
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值