Вход
Регистрация

GeneBase

Заинтересовался генетическими алгоритмами, почитал теорию и решил попробовать компонент GeneBase 2.0. Сделал следующие выводы:

1. На мой взгяд, в GeneBase совершенно необоснованно используется оператор инверсии. Не буду строго обосновывать, но если углубиться в теорию ШИМ, то такой оператор разрушает все шимы, которые являются сутью генетического алгоритма. Проще можно сказать, что нельзя переставлять биты в хромосоме т.к. нельзя, чтобы участки хромосомы отвечающие за строение ноги попадали в участок, отвечающий за строение руки.
В общем такая операция с точки зрения эволюции аналогична рандомизации хромосомы, убивает наследственные фичи особи и почти гарантированно приводит к появлению нежизнеспособной особи.

2. Обнаружил багу, вмеcто
if xI = 0 then
begin
fMinSutability := xS;
fMaxSutability := xS;
end;

должно быть

if xI = 0 then
begin
fMinSutability := xS;
fMaxSutability := xS;
fBestChromosome := xChromosome1;
end;
иначе довольно часто BestChromosome не является лучшей хромосомой, а изредка может статься что вобще равна nil, что непременно закончится AV

3. 4-х битное преобразование из кода Грея, которое используется в данной реализации, подходит только для 4-х битных чисел и не более. Представление более длинного числа в виде 4-х битных кусков для преобразования из кода Грея убивает весь смысл использования кода Грея т.к. изменение 1 бита может приводить к большому изменению в числе. Необходимо использовать "нормальное" преобразование, тем более что оно примитивно - каждый бит позиционного кода равен сумме по модулю 2 этого же и все более старших битов кода Грея.

4. Способ представления хромосомы как набора кусков одинаковой длины весьма не удобен.

Предлагаю Вашему вниманию собственную реализацию ГА (лежит тут http://irom.pochtamt.ru/genetic2.pas), которая является переделанной реализацией GeneBase. Эта раелизация лишена всех вышеперечисленных недостатков.