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