Как «скрестить» две строки (1234 & abcd -> 12cd & ab34)

Я разрабатываю генетический алгоритм на Java, который, как и все они, требует кроссовера двух родительских хромосом. Эти хромосомы могут быть довольно длинными. , где-то от 30 до 500 (но независимо от длины, все они будут одного размера, поэтому, если длина равна 80, в этом прогоне GA все будет 80).

Я думал о разработке разными способами, но они все это кажется мне очень неэффективным, поэтому я подумал, что могу попросить новых, разных точек зрения и предложений.

Например, я думал, что одним из способов было преобразование строки в массив символов и повторение из от начальной точки до конца локуса кроссовера (т.е. от s1 & s2 [25] - s1 & s2 [40] ) копирование во временные массивы символов каждого из массивов между этими точками, а затем повторная итерация и замена их символами из временного массива " партнер ». Но, как я уже сказал, похоже, что программа с населением около 1000 хромосом и около 1000 поколений будет чрезвычайно медленной.


Вот иллюстрация того, как выглядит двухточечный кроссовер:

enter image description here


Существует также более простой одноточечный кроссовер:

enter image description here


Поскольку я совсем не продвинутый язык в Java, не могли бы вы посоветовать мне, какой подход выбрать, может быть, функция Java не известна, или какой-то алгоритм, который я мог бы реализовать?

5
задан Carlos 4 March 2011 в 03:14
поделиться