Генетическое программирование
6.7. Интроны
Программы, построенные с помощью методов ГП, имеют тенденцию к накоплению интронов – ненужных и непригодных участков кода
Например:
(NOT(NOT x)) , (AND (ORXX)), (+… (-XX)), (+X0), (*X1), (*(DIV XX)), (MOVE_LEFT MOVE_RIGHT), (IF (2=1) . . . ), A:=A.
Таких фрагментов в программе возникает достаточно много (их количество может достигать 60%), и обнаружение и удаление интронов представляет серьезную проблему в ГП. Разработаны специальные методы для их устранения. Интересно отметить, что в живой природе интронов также достаточно много (в частности, на генном уровне существуют "лишние" участки ДНК).
6.8. Общий алгоритм генетического программирования
Таким образом, для решения задачи с помощью ГП необходимо выполнить описанные выше предварительные этапы:
- Определить терминальное множество;
- Определить функциональное множество;
- Определить фитнесс-функцию;
- Определить значения параметров, такие как мощность популяции, максимальный размер особи, вероятности кроссинговера и мутации, способ отбора родителей, критерий окончания эволюции (например, максимальное число поколений) и т.п
После этого можно разрабатывать непосредственно сам эволюционный алгоритм, реализующий ГП для конкретной задачи. Как и в случае ГА здесь также возможны различные подходы, которые рассмотрены в разделах 4 и 5.
Например, решение задачи на основе ГП можно представить следующей последовательностью действий:
- установка параметров эволюции;
- инициализация начальной популяции;
- оценка особей, входящих в популяцию;
- отбор родителей;
- создание потомков выбранных пар родителей – выполнение оператора кроссинговера;
- мутация новых особей;
- расширение популяции новыми порожденными особями;
- сокращение расширенной популяции до исходного размера;
- если критерий останова алгоритма выполнен, то выбор лучшей особи в конечной популяции – результат работы алгоритма. Иначе переход на шаг 4.
Следует отметить, что в ГП достаточно часто применяется асинхронный ГА, рассмотренный в разделе 4.6.