⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 geneticnqueensolver.java

📁 This is a java implementation for solving NQueen problem using genetic algorithm.Enjoy it!
💻 JAVA
字号:
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;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -