Генетическое программирование
6.3. Инициализация начальной популяции
Данный этап в ГП является не таким простым, как в классическом ГА, где генерация случайных двоичных строк не представляет особых проблем. Это связано с различной сложностью особей и их структурой. Естественно методы инициализации начальной популяции различны для разных форм представления программ. Одним из важнейших параметров в ГП является максимально возможный размер (сложность) программы.
6.3.1. Инициализация древовидных структур
Для деревьев в качестве меры сложности используется максимальная глубина (иногда называется высота) дерева или общее число узлов в дереве. Глубиной узла называется минимальное число узлов, которые необходимо пройти от корня дерева к этому узлу. Максимальной глубиной дерева называется максимально возможная глубина в дереве для терминального символа (листа). Если арность каждого узла равна двум, то общее число узлов не превышает , которое также используется в качестве меры сложности.
Инициализация древовидных структур выполняется путем случайного выбора функциональных и терминальных символов при заданной максимальной глубине дерева. Пусть для определенности выбраны следующее терминальное и функциональное множества, где означает деление нацело. Применяются два основных метода: 1) полная (full) и 2) растущая (grow) инициализация [2].
Рис. 6.6. Деревья, генерируемые при инициализации разными методами: а) полная (левые 3 дерева); б) растущая (правые 3 дерева).
В полном методе при генерации дерева, пока не достигнута максимальная глубина, допускается выбор только функциональных символов, а на последнем уровне (максимальной глубины) выбираются только терминальные символы. Например, на рис.6.6 а) представлено дерево с .
В растущей инициализации генерируются нерегулярные деревья с различной глубиной листьев вследствие случайного на каждом шаге выбора функционального или терминального символа. Здесь при выборе терминального символа рост дерева прекращается по текущей ветви и поэтому дерево имеет нерегулярную структуру.
Например, для при растущей инициализации для указанных функциональных и терминальных символов могут быть построены деревья, приведенные на рис.6.6 б).
При использовании первого метода начальная популяция содержит однородное множество структур, что способствует вырождению генетического материала (и преждевременной сходимости к локальным экстремумам). Поэтому на практике часто эти два метода используют одновременно следующим образом. Начальная популяция генерируется так, чтобы в нее входили деревья с разной максимальной длиной примерно поровну (для нашего примера ). Для каждой глубины первая половина деревьев генерируется полным методом, а вторая – растущей инициализацией.
6.3.2. Инициализация линейных структур
В этом случае процесс инициализации выполняется совершенно по-другому. Прежде всего, особь-программа разбивается на следующие четыре части:
- заголовок;
- тело;
- "подвал";
- выход (возврат).
Из них только тело программы генерируется с помощью эволюции, остальные части программы являются стандартными и заготавливаются заранее. Алгоритм инициализации можно сформулировать следующим образом:
- Выбор случайной длины из заданного диапазона;
- Копирование заготовленного заголовка;
- Инициализация и пополнение собственно операторов в программу пока не достигнута длина, определенная в пункте 1. Операторы выбираются случайным образом, сначала тип, затем переменная или константа из заданного диапазона;
- Копирование в конец программы заготовленного "подвала";
- Копирование в конец программы заготовленных операторов выхода.