使用遗传算法求解多元函数最值(实例)
使用遗传算法求解多元函数最值
使用遗传算法求解多元函数最值
使使用用遗遗传传算算法法求求解解多多元元函函数数最最值值
这是我们的待求解问题模型,下面是我们的实现代码:
package test;
import java.util.Random;
public class GA {
public static final int varnum=5;//变量的个数
public static final double []lower=new double[varnum];
public static final double []uper=new double[varnum];
public static final int POP_SIZE=80;//种群数目
public static final double[][]initpop=new double[varnum][POP_SIZE];
public static final int M=22; //每一个变量编码位数
public static String[]pop=new String[POP_SIZE];//种群编码
public static double[][]result=new double[varnum][POP_SIZE];//种群代表的结果
public static final int LENGTH=M*varnum;//编码长度,因为要精确到小数点后六位,所以编为22位长,22*i,i
为变量个数
public static final int MJ2=4194304;//2^22
public static double[]fitness=new double[POP_SIZE];//存放种群适应度
public static final double PC=0.35;//交叉率
public static final double PM=0.08;//变异率
public static double[]p=new double[POP_SIZE];//轮盘赌方法个体适应度概率(按比例的适应度分配)
public static double[]q=new double[POP_SIZE];//q[i]是前n项p之和(累积概率)
public static Random random=new Random();//用于产生随机数的工具
public static Best best=new Best();//记录最佳答案的对象
public GA(double initpop[][])
{
for (int i = 0; i < initpop.length; i++) {
for(int j=0;j
result[i][j]=initpop[i][j];
}
}
}
public void encoding()
{
for (int i = 0; i < POP_SIZE; i++) {
pop[i]="";
for(int j=0;j
double d1=((initpop[j][i]-lower[j])/(uper[j]-lower[j]))*(MJ2-1);
String GeneCode=Integer.toBinaryString((int)d1);
if(GeneCode.length()
int k=M-GeneCode.length();
for(int l=0;l
GeneCode="0"+GeneCode;
}
}
pop[i]+=GeneCode;
}
}
}
public void decoding()//将2进制编码转换为10进制
{
for (int i = 0; i < pop.length; i++) {
for(int j=0;j
int k=Integer.parseInt((pop[i].substring(j*22, (j+1)*22-1)), 2);
result[j][i]=lower[j]+k*(uper[j]-lower[j]