君子不器分享 http://blog.sciencenet.cn/u/foreverph

博文

演化计算:基于面向对象设计的认知(2)

已有 1636 次阅读 2021-6-15 00:42 |个人分类:算法|系统分类:科研笔记

在(1)中,我们提到一个演化算法可由三个类构成,即个体类、种群类和主类。

以采用遗传算法(GA)计算函数f(x)=x*sin(10*pi*x)+2.0在[-1.0,2.0]上的最大值为例,个体类Point设计如下:

class Point{
    int[] x;
    static int size;
    static double xmax=2.0;
    static double xmin=-1.0;
    
   //构建器 
    public Point()
    {
        x=new int[size];
        init();
   }
   //设定编码长度及自变量范围
   public static void set(int isize,double dmax,double dmin)
   {
        size=isize;
        xmax=dmax;
        xmin=dmin;
   }
   public void init()
   {
        for(int i=0;i<size;i++){
           if(Math.random()>0.5)
               x[i]=1;
           else
               x[i]=0;
        }
   }
   //解码器
   public double decode()
   {
        double X=0.0;
        double dx;
        for(int i=0;i<size;i++)
           X=X+x[i]*Math.pow(2,size-i-1);
        dx=xmin+X*(xmax-xmin)/(Math.pow(2,size)-1.0); 
        return dx;   
   }
   //计算适度器
   public double getFitness()
   {
        double dx=decode();
        double y=dx*Math.sin(10*Math.PI*dx)+2.0;
        return y;
   }
}

类Point描述了问题的解,把问题的属性和方法都封装为一体,形成一个抽象数据类型。

Point的x为实例成员;size、xmax和xmin为类成员,使用static修饰,为所有实例(个体)共享。



https://blog.sciencenet.cn/blog-260510-1291192.html

上一篇:演化计算:基于面向对象设计的认知(1)
下一篇:演化计算:基于面向对象设计的认知(3)
收藏 IP: 117.187.32.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-22 14:18

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部