我试图在阅读一本关于机器学习的书后用Java编写一个简单的遗传算法,并且偶然发现了基础知识。我没有使用Java,所以我可能会错过一些非常简单的东西。
个人
public class Individual {
int n;
int[] genes = new int[500];
int fitnessValue;
public int getFitnessValue() {
return fitnessValue;
}
public void setFitnessValue(int fitnessValue) {
this.fitnessValue = fitnessValue;
}
public int[] getGenes() {
return genes;
}
public void setGenes(int index, int gene) {
this.genes[index] = gene;
}
public int getN() {
return n;
}
public void setN(int n) {
this.n = n;
}
// Constructor
public Individual() {
}
}
人口
import java.util.Random;
public class Population {
public Population() {
}
public static void main(String[] args) {
Random rand = new Random();
int p = rand.nextInt(10);
int n = rand.nextInt(10);
Individual pop[] = new Individual[p];
System.out.println("P is: " + p + "\nN is: " + n);
for(int j = 0; j <= p; j++) {
for(int i = 0; i <= n; i++) {
pop[j].genes[i] = rand.nextInt(2);
}
}
}
public void addPopulation() {
}
}
此代码的目的是使用随机数填充Population和Genes。有人可以看看我的代码,看看我哪里出错了吗?
答案 0 :(得分:4)
前
pop[j].genes[i] = rand.nextInt(2);
添加
pop[j] = new Individual();
数组的元素为null。
答案 1 :(得分:0)
我相信你需要在做pop [j] .genes [i] = rand.nextInt();
之前初始化pop [j] Individual pop[] = new Individual[p];
这只是初始化数组,而不是单个元素。尝试在你的两个循环之间放置pop [j] = new Individual()。
答案 2 :(得分:0)
他们说了什么......
另外,你的意思是调用你的setGenes方法,还是只想直接访问基因数组。
答案 3 :(得分:0)
根据我对您的代码的理解,我认为您需要这样做:
for(int j = 0; j <= p; j++) {
pop[j] = new Individual();
for(int i = 0; i <= n; i++) {
pop[j].setGenes(i, rand.nextInt(2));
}
}