Я разрабатываю генетический алгоритм на Java, который, как и все они, требует пересечения двух родительских хромосом.Эти хромосомы могут быть довольно длинными, от 30 до 500 (но какой бы длины они ни имели, все они будут одинакового размера, поэтому, если длина равна 80, в этом прогоне GA будет все 80).
Я думал о том, чтобы развиваться по-разному, но все они кажутся мне очень неэффективными, поэтому я подумал, что могу попросить о новых, разных точках зрения и предложениях.
Например, один из способов, который я думал, былпреобразования строки в массив символов и итерации от начальной точки до конца локуса кроссовера (т. е. от s1 & s2[25]
до s1 & s2[40]
), копирования во временные массивы каждого из символов массивов между этими точками, а затем повторения ипоменять их местами с символами из временного массива «партнера».Но, как я сказал, похоже, что для программы, которая будет иметь популяцию около 1000 хромосом и около 1000 поколений, будет очень медленно.
Вот иллюстрация того, как выглядит двухточечный кроссовер:
ТамЭто также более простое кроссовер с одной точкой:
Поскольку я не очень продвинут в Java, вы можете дать мне совет, какой подход выбрать, может быть,Я не знаю функцию Java или какой-то алгоритм, который я мог бы реализовать?