Библиотека генетических алгоритмов - часть 2 - Каталоги и генераторы случайных чисел

ОГЛАВЛЕНИЕ

Каталоги

Каталоги применяются для хранения доступных генетических операций. Каждый тип генетической операции имеет свой собственный каталог. Генетические операции хранятся в каталоге в виде пары [имя операции и указатель на объект операции]. Имя операции должно быть уникальным в каталоге. Пользователь может получить указатель на объект операции (функтор), указав имя операции. Шаблонный класс GaCatalogue управляет каталогами.

 

Схема - Класс GaCatalogue

Класс GaCatalogueEntry хранит указатели на объекты генетической операции и имя, под которым она зарегистрирована в каталоге.

Методы Register и Unregister добавляют или удаляют генетические операции из каталога. Метод GetEntryData находит генетические операции по их именам.

Библиотека генетических алгоритмов определяет 8 встроенных каталогов:
•    GaCrossoverCatalogue
•    GaMutationCatalogue
•    GaFitnessComparatorCatalogue
•    GaSelectionCatalogue
•    GaCouplingCatalogue
•    GaReplacementCatalogue
•    GaScalingCatalogue
•    GaStopCriteriaCatalogue

Прежде чем можно будет использовать каталог для конкретных типов операций, надо вызвать метод MakeInstance. FreeInstance должен вызываться, если каталог больше не нужен. Для встроенных каталогов эти методы вызываются при инициализации и при завершении библиотеки. Для определенных пользователем каталогов пользователь должен вручную вызывать эти методы.

// использование встроенного каталога
GaSelectionOperation* select =
    GaSelectionCatalgoue::Instance().GetEntryData(
    "GaRandomSelect" );

// определенный пользователем каталог
GaCatalgoue<UserOperationType>::MakeInstance();

// зарегистрировать
GaCatalgoue<UserOperationType>::Instance().Register(
    "UserOperation1", new UserOperation1() );
GaCatalgoue<UserOperationType>::Instance().Register(
    "UserOperation2", new UserOperation2() );

// извлечь данные
UserOperationType* operation =
    GaCatalgoue<UserOperationType>::Instance().GetEntryData(
    "UserOperation1" );

// разрегистрировать
GaCatalgoue<UserOperationType>::Instance().Unregister(
    "UserOperation1");

// освободить ресурсы, используемые каталогом
GaCatalgoue<UserOperationType>::FreeIntance();

Каталоги управляют памятью, используемой зарегистрированными объектами.

Генераторы случайных чисел

Класс GaRandomGenerator реализует алгоритм RANROT генерации случайных чисел. Он генерирует 64-битное целое число [два 32-битных целых числа] за раз. Все остальные встроенные генераторы случайных чисел в библиотеке построены поверх этого класса.

Тип данных

Интервал

Имя класса

Глобальный объект

int

0-2147483647

GaRandomInteger

GaGlobalRandomIntegerGenerator

float

(0, 1)

GaRandomFloat

GaGlobalRandomFloatGenerator

double

(0, 1)

GaRandomDouble

GaGlobalRandomDoubleGenerator

bool

true илиfalse

GaRandomBool

GaGlobalRandomBoolGenerator

 

Схема – Генераторы случайных чисел

Эти классы генератора случайных чисел имеют методы, генерирующие числа в заранее заданном интервале, между заранее заданным минимумом и определенным пользователем максимумом и между определенным пользователем минимумом и максимумом. GaRandomBool имеет два дополнительных метода, задающих вероятность генерации значения true.

Продолжение статьи вы найдете в третьей части данной серии.