?? geneticnqueensolver.java
字號(hào):
package ir.ac.iust.evoalgs.nqueen;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class GeneticNQueenSolver implements IGeneticNQueenSolver {
private INQueenSolutionHelper helper;
private List<Gene> population;
public GeneticNQueenSolver() {
population = new ArrayList<Gene>();
}
public List<Gene> getPopulation() {
return population;
}
@Override
public void setSolutionHelper(INQueenSolutionHelper helper) {
this.helper = helper;
}
@Override
public NQueenSolution solve(NQueenProblem problem) {
helper.initPopulation(population);
int iter = 0;
for (iter = 0; !helper.hasBeenEnded(population, iter); iter++) {
helper.onProgress(helper.getTheBest(population), iter);
Gene[] children = null;
children = new Gene[2 * helper.getSleepSize()];
for (int i = 0; i < helper.getSleepSize(); i++) {
Gene p1 = helper.selectParent(population);
Gene p2 = helper.selectParent(population);
Random rand = new Random();
if (rand.nextDouble() <= helper.getCrossOverProb()) {
Gene[] tmpChildren = p1.crossOver(p2);
children[2 * i] = tmpChildren[0];
children[2 * i + 1] = tmpChildren[1];
} else {
children[2 * i] = new Gene(p1.getString());
children[2 * i + 1] = new Gene(p2.getString());
}
}
Random rand = new Random();
for (Gene aChild : children)
if (rand.nextDouble() <= helper.getMutationProb())
aChild.mutate();
helper.replacment(population, children);
}
NQueenSolution solution = new NQueenSolution(helper.getTheBest(population));
helper.onCompelete(problem, solution, iter);
return solution;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -