【发布时间】:2018-04-20 10:35:31
【问题描述】:
请帮帮我, 我尝试在 java 中实现 GA 以解决 (Xi)^2 函数求和的最小化,即 X 值在 [-100,100] 之间是双倍的,i = 1,2,3,...,30 并且有 4 个人口。 我无法得到正确的结果。 Check Source Code 谢谢你
遗传算法.java
....
public Population evolvePopulation(Population population) {
Population newPopulation = new Population(population.size());
for (int i = 0; i < population.size(); ++i) {
Individual firstIndividual = randomSelection(population);
Individual secondIndividual = randomSelection(population);
Individual newIndividual = crossover(firstIndividual, secondIndividual);
newPopulation.saveIndividual(i, newIndividual);
}
for (int i = 0; i < newPopulation.size(); ++i) {
mutate(newPopulation.getIndividual(i));
}
return newPopulation;
}
遗传算法.java
public Individual randomSelection(Population population) {
Population newPopulation = new Population(Constants.TOURNAMENT_SIZE);
for (int i = 0; i < Constants.TOURNAMENT_SIZE; ++i) {
int randomIndex = (int)(Math.random()*population.size());
newPopulation.saveIndividual(i, population.getIndividual(randomIndex));
}
Individual fittestIndividual = newPopulation.getFittestIndividual();
return fittestIndividual;
}
人口.java
...
public Population evolvePopulation(Population population) {
Population newPopulation = new Population(population.size());
for (int i = 0; i < population.size(); ++i) {
Individual firstIndividual = randomSelection(population);
Individual secondIndividual = randomSelection(population);
Individual newIndividual = crossover(firstIndividual, secondIndividual);
newPopulation.saveIndividual(i, newIndividual);
}
for (int i = 0; i < newPopulation.size(); ++i) {
mutate(newPopulation.getIndividual(i));
}
return newPopulation;
}
...
个人.java
public void generateIndividual() {
df = new DecimalFormat(".##");
for (int i = 0; i < Constants.CHROMOSOME_LENGTH; i++) {
String gen = df.format((randomGenerator.nextDouble()*(201))-100);
double gene = Double.parseDouble(gen);
genes[i] = gene;
}
}
结果:
代:1 - 最适合的是:187840.0388
代:2 - 最适合的是:145642.2474
代:3 - 最适合的是:143804.0066
代:4 - 最适合的是:164595.30819999994
代:5 - 最适者为:192525.51659999997
代:6 - 最适合的是:176011.80959999998
世代:7 - 最适者为:165286.99679999996
代:8 - 最适合的是:181544.71279999998
代:9 - 最适者为:180144.33559999996
代:10 - 最适合的是:178226.74199999994
【问题讨论】:
-
请edit您的问题并在此处包含您的代码。有用吗?
-
请在您的问题中包含任何必要的代码(作为minimal reproducible example)。指向您的 Google 云端硬盘的链接不合适。
-
它有效,先生,但我不能得到一个好的结果,而且它不是为了所有世代。请在上面的链接上下载我的代码先生
-
请帮帮我,我不知道是什么问题
标签: java artificial-intelligence genetic-algorithm