演化计算:基于面向对象设计的认知(2)
2021-6-15 00:42
阅读:1359
在(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://wap.sciencenet.cn/blog-260510-1291192.html?mobile=1
收藏
当前推荐数:0
推荐到博客首页
网友评论0 条评论