В настоящее время я работаю над программой генетического алгоритма набора высоты с использованием библиотеки p5.js.
Программа использует формат генетического алгоритма для воссоздания любого изображения, которое вы хотите.Он работает аналогично этой программе , на которой я нашел видео на YouTube.
У меня есть класс Gene, у которого, помимо прочего, есть атрибут с именем 'graphic', который устанавливается равным новому объекту p5.graphic после создания гена.
Существует также класс Population с атрибутом genes, представляющим собой массив из 10 объектов Gene.Метод getHealthiest () класса Population возвращает Gene в массиве genes, графическое изображение которого больше всего похоже на целевое изображение.Кроме того, в классе Population есть метод evolve ().
Здесь возникает моя проблема.В методе evolve () я хочу: 1. определить самый здоровый ген и 2. очистить массив генов, за исключением самого здорового гена, и пополнить его 9 другими генами, которые являются вариациями самого здорового гена.Для этого мне нужно установить графический атрибут новых генов, равный атрибуту самого здорового гена.
this.evolve = function() {
var healthiestGene = this.getHealthiest(); //sets a variable equal to the healthiest gene
this.genes = []; //clearing out the genes array of the population
for (var i=0; i < this.populationSize; i++) {
this.genes[i] = new Gene(this.target); //creating a new Gene object
//This is the problem area
this.genes[i].graphic.loadPixels();
for (var j=0; j < healthiestGene.numPixels; j++){
this.genes[i].graphic.pixels[j] = healthiestGene.graphic.pixels[j];
}
this.genes[i].graphic.updatePixels();
if (i!=0) {
this.genes[i].mutate(); //I mutate every Gene in the array but one
}
this.genes[i].evaluateFitness();
}
}
В настоящее время я делаю это, устанавливая два пиксельных массива равными друг другу пиксель за пикселемИнтересно, есть ли более эффективный способ сделать это?Я попытался просто написать:
this.genes[i].graphic.pixels = healthiestGene.graphic.pixels;
, но это ничего не дало.Я был бы рад любому предложению о том, как я могу установить эти два пиксельных массива равными друг другу без необходимости проходить их попиксельно.
Спасибо!