Генетический алгоритм Java, прохождение функций с двумя координатами - PullRequest
0 голосов
/ 12 декабря 2018

Я написал свой первый генетический алгоритм на Java и могу оптимизировать функции с одним аргументом x, но я не знаю, как оптимизировать функции с двумя аргументами x и y.Класс алгоритма и основное приложение работают правильно, поэтому я отправляю только Individual.java и Population.java.Если я правильно думаю в генах, у меня есть только x-координата, но я не уверен, как добавить y-координату.Любой совет будет полезным.

Individual.java

public class Individual {

private int[] genes;
private int fitness;
private Random randomGenerator;

public Individual() {
    this.genes = new int[Constants.CHROMOSOME_LENGTH];
    this.randomGenerator = new Random();
}

public void generateIndividual() {
    for(int i = 0; i < Constants.CHROMOSOME_LENGTH; i++) {
        int gene = randomGenerator.nextInt(2);
        genes[i] = gene;
    }
}

public double f(double x) {
//      return Math.pow(x,2);
    return (Math.pow((1-x),2)) + (100*(Math.pow((1-Math.pow(x,2)),2)));
//      return Math.sin(x)*((x-2)*(x-2))+3;
}

public double getFitness() {
    double genesToDouble = genesToDouble();
    return f(genesToDouble);
}

public double getFitnessResult() {
    double genesToDouble = genesToDouble();
    return genesToDouble;
}

public double genesToDouble() {

    int base = 1;
    double geneInDouble = 0;

    for( int i =0; i < Constants.GENE_LENGTH; i++) {
        if(this.genes[i] == 1) 
            geneInDouble += base;

        base = base*2;
    }

    geneInDouble = (geneInDouble / 1024) * 10.1;

    return geneInDouble;
}

public int getGene(int index) {
    return this.genes[index];
}

public void setGene(int index, int value) {
    this.genes[index] = value;
    this.fitness = 0;
}
}

Population.java

public class Population {

private Individual[] individuals;

public Population(int populationSize) {
    individuals = new Individual[populationSize];
}

public void initialize() {
    for(int i = 0; i < individuals.length; i++) {
        Individual newIndividual = new Individual();
        newIndividual.generateIndividual();
        saveIndividual(i, newIndividual);
    }
}

public Individual getIndividual(int index) {
    return this.individuals[index];
}

//maksimum lub minimum
public Individual getFittestIndividual() {

    Individual fittest = individuals[0];

    for(int i =0; i < individuals.length; i++) {
        if(getIndividual(i).getFitness() < fittest.getFitness())
            fittest = getIndividual(i);
    }

    return fittest;
}

public int size() {
    return this.individuals.length;
}

public void saveIndividual(int index, Individual individual) {
    this.individuals[index] = individual;
}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...