Diploid Genetic Algorithm with mortality Delphi unit
Модуль генетического алгоритма Версия 4.7
Диплоидная версия
- возможность онтогенезиса
- сегмент хромосомы, кодирующий одну переменную, рассматривается генетическими операторами как отдельная хромосома
- возможность смертности (Цена замещения Холдейна + кривая выживания для людей)
- лучшая особь обязательно дает потомство
Многонитевая версия
- возможность параллельной оценки приспособленности особей в пуле нитей
ОГРАНИЧЕНИЯ
- максимум 62 бита на переменную
ПО УМОЛЧАНИЮ
Для популяции:
- коэффициент давления отбора - 0.1
- активных родителей - 100%
Для особи:
- оценка приспособленности - новые
- онтогенезис - нет
- смертность - нет
Для хромосомы:
- вероятность рекомбинации групп сцепления - 0.5
- частота мутации - 1/250
- вероятность транслокации - 0.005
- вероятность инверсии - 0.002
- матожидание числа кроссоверов - 1
Число процессоров в системе - 2
1998-2018 (c) Махотило Константин Владимирович
Web: https://sites.google.com/site/kvmahotilo
31.01.18 v4.7g
- при малой популяции и смертности число потомков могло равняться 0
25.05.12 v4.7f
- Добавлена переменная GAThreadsPerProcessor, позволяющая задавать количество потоков на процессор
19.02.11 v4.7e
- В функции RandomGamma добавлена защита от редкой ситуации ln(0)
- В функции DaethProbability добавлена защита от ошибочной ситуации ln(0)
20.07.10 v4.7d
- Улучшено детектирование возникновения ошибок целевой функции в многопоточном режиме счета
- Свойство BestIndividual заменено на переменную для обеспечения правильного результата при обращении к ней в процессе сортировки 25.05.10 v4.7с
- Зависание при возникновении ошибки целевой функции в многопоточном режиме счета
15.11.09 v4.7b
- Из TIndividual убраны копии общих для всех особей параметров - указателей на Inf,Sup,Map и длины векторов и хромосом. Вместо них введен указатель на родительский TGeneticAlgorithm. Уменьшено использование памяти.
- В TGeneticAlgorithm введена карта смещений к началам групп сцепления в хромосомах, чтобы не рассчитывать их в особях каждый раз. +1% быстродействия
- В TGeneticAlgorithm введены общие для всех особей временные хромосомы +10% быстродействия
- Ошибка кодирования в TData_to_Bin, возникавшая при определенных вещественных значениях и больших длинах кода (> 53 бит)
11.11.09 v4.7а
- Изменена схема инверсии и транслокации. Вероятность проведения операции определяетя для каждой группы сцепления
- Изменены значения вероятности инверсии и транслокации по умолчанию 31.10.09 v4.7
- При вычислении целевой функции в параллельных нитях вместо постоянного создания/удаления нитей введен их постоянный пул
- Число потоков при многопоточном вычислении целевой функции равно числу процессоров в системе (по умолчанию 2)
- Изменена схема транслокации. Вместо перестановки головы и хвоста всей хоромосомы происходит обмен участками между двумя сегментами хромосомы
28.08.09 v4.6a
- Количество кроссоверов в хромосоме и число мутаций - случайная величина с законом распределения Пуассона (целочисленное гамма-распределение)
07.08.09 v4.6
- После создания особи по известному решению вектор параметров декодируется в соответствии с картой хромосомы
15.05.09 v4.5b
- Защита от перевода часов назад при расчете статистики времени счета
12.04.08 v4.5a
- Для служебных процедур введены директивы inline (условно) для повышения скорости в Delphi 2007
04.04.08 v4.5
- Статистика времени счета текущей эпохи
- Изменена схема мутации гена с последовательного на произвольный перебор состояний.
- Сокращено использование промежуточных битовых массивов.
- Последовательное копирование битов заменено на групповое с помощью TBitVector.CopyBitsTo()
09.12.07 v4.4e
- Защита от ситуации Inf >= Sup при создании ГА
31.10.07 v4.4d
- Оптимизирована функция перевода кода Грея в двоичный, изменен порядок ее аргументов
26.10.07 v4.4c
- Схема определения смертности особи строится по формле Вейбулла, на более достоверных данных и на базе величины средней продолжительности жизни
30.08.07 v4.4b
- Небольшая оптимизация математических вычислений
22.07.07 v4.4a
- Корректировка статистики времени счета на время, проведенное в спящем режиме
07.04.07 v4.4
- Изменен порядок расчета размеров детской и родительской группы при включенной смертности
! Перед включением многопоточного режима вычисления функции приспособленности необходимо задать реальное число процессоров в системе (глобальная переменная GAProcessorsCount)