||
在(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修饰,为所有实例(个体)共享。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-22 14:18
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社