Java 如何确保突变步骤后我的体能保持在范围内?
我使用sphere benchmark函数测试具有不相关一步变异的进化策略代码,如下所示:Java 如何确保突变步骤后我的体能保持在范围内?,java,benchmarking,evolutionary-algorithm,mutation,Java,Benchmarking,Evolutionary Algorithm,Mutation,我使用sphere benchmark函数测试具有不相关一步变异的进化策略代码,如下所示: public class cromosome { private double[] variable = new double[2]; private double[] stepSize = new double[2]; private double fitness=0; } //=========================method set fitness======
public class cromosome {
private double[] variable = new double[2];
private double[] stepSize = new double[2];
private double fitness=0;
}
//=========================method set fitness=========================================
public void setFitness() {
for (int i=0; i<variable.length; i++) {
fitness += variable[i]*variable[i];
}
System.out.println("fitness= " + fitness);
}
public class cromosome{
私有双精度[]变量=新双精度[2];
私有双精度[]步长=新双精度[2];
私人双适应度=0;
}
//=====================================方法集适应度=========================================
公众健康(英文){
对于(int i=0;i您使用的是r.nextGaussian()。此变量的价差大于1。这意味着您有时会得到低于-1或高于1的值。这可能是问题的根源。
要修复此问题,请添加验证,例如:
double a = r.nextGaussian();
if(a < -1){a = -1;}else if(a > 1){a = 1;}
double a=r.nextGaussian();
如果(a<-1){a=-1;}如果(a>1){a=1;}
在此之后,以与现在相同的方式处理它
double a = r.nextGaussian();
if(a < -1){a = -1;}else if(a > 1){a = 1;}