Московский государственный университет путей сообщения
Опубликован: 10.10.2014 | Доступ: свободный | Студентов: 866 / 193 | Длительность: 22:10:00
Лекция 6:

Генетическое программирование

6.3. Инициализация начальной популяции

Данный этап в ГП является не таким простым, как в классическом ГА, где генерация случайных двоичных строк не представляет особых проблем. Это связано с различной сложностью особей и их структурой. Естественно методы инициализации начальной популяции различны для разных форм представления программ. Одним из важнейших параметров в ГП является максимально возможный размер (сложность) программы.

6.3.1. Инициализация древовидных структур

Для деревьев в качестве меры сложности используется максимальная глубина (иногда называется высота) дерева или общее число узлов в дереве. Глубиной узла называется минимальное число узлов, которые необходимо пройти от корня дерева к этому узлу. Максимальной глубиной дерева D_m называется максимально возможная глубина в дереве для терминального символа (листа). Если арность каждого узла равна двум, то общее число узлов не превышает 2^{D_m}, которое также используется в качестве меры сложности.

Инициализация древовидных структур выполняется путем случайного выбора функциональных и терминальных символов при заданной максимальной глубине дерева. Пусть для определенности выбраны следующее терминальное T=\{a,b,c,d,e\} и функциональное F=\{+,-,*,\% \} множества, где \% означает деление нацело. Применяются два основных метода: 1) полная (full) и 2) растущая (grow) инициализация [2].

Деревья, генерируемые при инициализации разными методами: а) полная (левые 3 дерева); б) растущая (правые 3 дерева).

Рис. 6.6. Деревья, генерируемые при инициализации разными методами: а) полная (левые 3 дерева); б) растущая (правые 3 дерева).

В полном методе при генерации дерева, пока не достигнута максимальная глубина, допускается выбор только функциональных символов, а на последнем уровне (максимальной глубины) выбираются только терминальные символы. Например, на рис.6.6 а) представлено дерево с D_m=3.

В растущей инициализации генерируются нерегулярные деревья с различной глубиной листьев вследствие случайного на каждом шаге выбора функционального или терминального символа. Здесь при выборе терминального символа рост дерева прекращается по текущей ветви и поэтому дерево имеет нерегулярную структуру.

Например, для D_m=3 при растущей инициализации для указанных функциональных и терминальных символов могут быть построены деревья, приведенные на рис.6.6 б).

При использовании первого метода начальная популяция содержит однородное множество структур, что способствует вырождению генетического материала (и преждевременной сходимости к локальным экстремумам). Поэтому на практике часто эти два метода используют одновременно следующим образом. Начальная популяция генерируется так, чтобы в нее входили деревья с разной максимальной длиной примерно поровну (для нашего примера D_m=1, D_m=2, D_m=3, D_m=4). Для каждой глубины первая половина деревьев генерируется полным методом, а вторая – растущей инициализацией.

6.3.2. Инициализация линейных структур

В этом случае процесс инициализации выполняется совершенно по-другому. Прежде всего, особь-программа разбивается на следующие четыре части:

  1. заголовок;
  2. тело;
  3. "подвал";
  4. выход (возврат).

Из них только тело программы генерируется с помощью эволюции, остальные части программы являются стандартными и заготавливаются заранее. Алгоритм инициализации можно сформулировать следующим образом:

  1. Выбор случайной длины из заданного диапазона;
  2. Копирование заготовленного заголовка;
  3. Инициализация и пополнение собственно операторов в программу пока не достигнута длина, определенная в пункте 1. Операторы выбираются случайным образом, сначала тип, затем переменная или константа из заданного диапазона;
  4. Копирование в конец программы заготовленного "подвала";
  5. Копирование в конец программы заготовленных операторов выхода.