我正在建立一个基于this guide的简单遗传算法。我创建了一个“个人”课程,如下所示。
package simpleGA;
public class Individual {
public static int defaultGeneLength = 64;
private static byte genes[] = new byte[defaultGeneLength];
private int fitness = 0;
public void generateIndividual(){
for (int i = 0; i < defaultGeneLength; i++){
byte gene = (byte) Math.round(Math.random());
genes[i] = gene;
}
}
public byte getGene(int index) {
return genes[index];
}
public int size(){
return genes.length;
}
public int getFitness(){
if (fitness == 0){
fitness = FitnessCalc.getFitness(this);
}
return fitness;
}
}
我还创建了一个名为'FitnessCalc'的课程,如下所示。
package simpleGA;
import java.util.Scanner;
public class FitnessCalc {
static byte[] solution = new byte[64];
static String newSolution;
static Scanner input = new Scanner(System.in);
static void setSolution(){
do{
newSolution = null;
System.out.println("Please enter a string of '1's and '0's of length 64.");
newSolution = input.next();
}
while(newSolution.length() != 64);
solution = new byte[newSolution.length()];
for (int i = 0; i < newSolution.length(); i++) {
String character = newSolution.substring(i, i + 1);
solution[i] = Byte.parseByte(character);
}
}
static int getFitness(Individual individual){
int fitness = 0;
for (int i = 0; i < solution.length && i < individual.size(); i++) {
if (individual.getGene(i) == solution[i]) {
fitness++;
}
}
return fitness;
}
}
我的问题是,在'FitnessCalc'类的getFitness
方法中,编译器会为size
和getGene
方法返回错误,说
“方法大小()未定义为Individual”和
类型“方法getGene(int)未定义为Individual”。
我不确定这意味着什么。我看过这样的其他问题,但没有一个场景似乎与我有关。有人可以帮忙吗?
修改
清理并重建项目后(我正在使用Eclipse),错误仍然存在,并且我的剩余课程“人口”中出现了一个新错误。
package simpleGA;
public class Population {
Individual[] individuals;
public Population (int populationSize, boolean initialise){
individuals = new Individual[populationSize];
if (initialise){
for (int i = 0; i < size(); i++){
Individual newIndividual = new Individual();
newIndividual.generateIndividual();
saveIndividual(i, newIndividual);
}
}
}
public int size(){
return individuals.length;
}
public void saveIndividual(int index, Individual indiv){
individuals[index] = indiv;
}
}
错误是在generateIndividual
方法中调用Population
方法,并且与其他两个方法相同:
“方法generateIndividual()未定义为Individual”类型。
generateIndividual
方法在“个人”类中定义。
答案 0 :(得分:0)
对于任何想知道的人,我通过稍微重写代码来摆脱这个问题。我将getFitness
方法移到了&#39;个人&#39;上课,这似乎有效。在此之后,我确保了&#39;个人&#39; class只使用自己类中的方法,因此类并不相互依赖。