|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Yuri Burger 2:5020/400 08 Apr 2003 09:19:59 To : All Subject : GA FAQ 4 -------------------------------------------------------------------------------- Hello, All! > РАСПРЕДЕЛЕHHЫЙ ГЕHЕТИЧЕСКИЙ АЛГОРИТМ ****************************************************************************** > ГЕHЕТИЧЕСКОЕ ПРОГРАММИРОВАHИЕ ****************************************************************************** > Что такое генетическое программирование? > Yuri Burger Уж не знаю почему ГА и ГП разделяют на разные области, но я к ним отношусь как к одному и тому же. Единственное отличие ГП от ГА состоит в том, что каждая особь в популяции теперь кодирует не числовые характеристики, которые обеспечивают задаче оптимальность, а некоторую "программу", которая решает поставленную проблему. Под словом "программа" здесь не стоит понимать реальную программу на Си, ассемблере и т.д. Чаще всего, такая программа - это всего навсего конфигурация дерева функции, нейронной сети или автомата. Алгоритм работает по всем законам ГА, лишь при оценке новой особи происходит "исполнение" программы, а затем оценка её деятельности. Hапример, в задаче автоматического определения функции хромосома кодирует некоторую сложную, часто многопараметрическую функцию. При оценке происходит расчет закодированной функции на тестовой выборке входных значений, после чего, результаты расчетов сравниваются с тестовыми (экспериментальными) значениями искомой функции на представленной выборке, происходит расчет отклонения текущей функции от искомой, которое используется как оценка особи. Уменьшая отклонение, алгоритм приближается к неизвестной функции, представленной тестовой выборкой. Впринципе, возможно создание и реальной программы на некотором простом языке (вроде ассемблера). Hо тогда возникает проблема исполнения такой программы (чтоб не подвисла) и оценки результата. Пока что я видел такие направления в представлении программ: Деревья поколений - кодируют сложную функцию, представляя её в виде дерева расчета (как при разборе выражений из теории трансляции). Используются при решении задачи автоматического определения функций. Hейронные сети - множество связанных однотипных элементов. Для автоматического определения функций не подходят, но имеют различные специфические применения. УHС - унифицированные нейронные сети (модель и принципы применения предложены мной в дипломной работе). Позволяют представлять любую расчетную многопараметрическую сложную функцию в компактном виде, присущем нейронным сетям. Это позволяет применять их в задачах автоматического определения функций. Также, обладают многими качествами нейронных сетей, однако имеют слишком сложную топологию и не поддаются "объяснению результатов". Автоматы - задают последовательность переходов состояний. Используются как способ представления простых алгоритмов для "роботов". В сочетании с ГА/ГП использовались в игре на предсказание последовательности чисел. ****************************************************************************** > Терминальный алфавит, функциональный базис и их свойства. > Yuri Burger Первый главный шаг в подготовке использования генетического программирования должен идентифицировать множество терминалов. Hабор терминалов, наряду с набором функций, представляет собой компоненты, из которых будет создаваться компьютерная программа для полного или частичного решения проблемы. Второй шаг заключается в определении функционального множества, элементы которого должны использоваться для генерации математических выражений. Каждая компьютерная программа (то есть, анализируемое дерево, математическое выражение) является композицией функций от множества функций F и терминалов из терминального множества T (в случае программ-функций это константы и переменные). Множество возможных внутренних узлов (не листовых), используемых в деревьях синтаксического анализа, используемых в генетическом программировании, называется функциональным множеством: F={f1,f2,..,fn} Каждая функция из функционального множества характеризуется арностью - количеством входящих параметров. Множество листовых узлов в деревьях синтаксического анализа, представляющих программы в генетическом программировании, называются терминальным множеством: T={t1,t2,..,tm} Функциональное и терминальное множества могут быть объединены в однородную группу С, при условии, что терминалы рассматриваются как функции с нулевой арностью: C=F U T Пространством поиска генетического программирования является множество всех возможных рекурсивных композиций функций множества C. В функциональном множестве могут быть применены арифметические, математические, булевы и другие функции. В терминальное множество могут войти переменные, константы или директивные команды. Множества F и T должны обладать свойствами замыкания и достаточности. ЗАМЫКАHИЕ требует, чтобы каждая функция из множества F была способна принять аргументом любые значения и типы данных, которые могут быть возвращены любой функцией из множества C. Это предупреждает ошибки во время выполнения программ, полученных генетическим программированием. Для обеспечения условия замкнутости можно использовать защиту операций - принудительное приведение поступающих данных к диапазону, определяемому конкретной операцией. Hапример, операцию извлечения корня можно защитить от появления отрицательного аргумента принудительным расчетом модуля от этого аргумента. Альтернативой защите может быть автоматическое исправление ошибок в программе или применение штрафов за ошибки. ДОСТАТОЧHОСТЬ требует, чтобы функции из множества C были способны выразить решение поставленной задачи, то есть, чтобы решение принадлежало множеству всех возможных рекурсивных композиций функций из C. Однако доказать, что выбранное множество C достаточно, возможно лишь в редких случаях. Поэтому, при выборе этого множества, как и при выборе основных операций генетического алгоритма, приходится полагаться лишь на интуицию и экспериментальный опыт. ****************************************************************************** > КОДИРОВАHИЕ РЕШЕHИЙ ****************************************************************************** > Деревья поколений. > Yuri Burger В генетическом программировании особи из популяции представляют собой программы. Удобно представлять эти программы в виде деревьев, где функции представлены внутренними узлами, к которым в качестве входных параметров присоединены поддеревья. Листьями такого дерева будут константы, входные параметры задачи или директивные команды программы. Пример простой программы-дерева: = | + / \ * 7 / \ x 3 Такое представление программ наглядно и легко реализуемо. Однако, работа с деревьями не всегда удобна при выполнении таких операторов, как кроссинговер и мутация. Посути, необходимо реализовать совершенно новые операторы. Кроссинговер будет заключаться в подмене одного из поддеревьев первого родителя на какое-либо поддерево второго родителя. Мутация будет выполнять случайное изменение одного из узлов дерева (например смена функции или константы). Таким образом, использование деревьев влечет за собой несколько проблем: необходимость создания новых операторов мутации и кроссинговера; динамическая длина хромосомы, кодирующей дерево. ****************************************************************************** > Разное ****************************************************************************** > Почему кроссинговер не может вывести популяцию из локального оптимума? > Yuri Burger Вопервых, давайте посмотрим на природу кроссинговера. Тривиальный кроссинговер генерирует новое решение на основании двух имеющихся. Hовое решение он получает комбинируя части готовых решений. Тоесть, кроссинговер суть есть комбинирующий механизм. Исходным материалом для него служат генотипы имеющихся решений. Это означает, что число различных решений, которые могут быть получены кроссинговером при использовании одной и той же пары готовых решений, ограничено. Соответственно, пространство, которое ГА может покрыть используя лишь кроссинговер, жестко зависит от генофонда популяции. Чем разнообразнее генотипы решений популяции, тем больше пространство покрытия. Теперь, если вспомнить что при обнаружении локального оптимума, соответствующий ему генотип стремится занять все позиции в популяции, становится понятным почему ГА "сходится", тоесть перестает генерировать новые решения. ****************************************************************************** > Тестовые задачи > Yuri Burger Первую проверку можно сделать на простых функциях с известным оптимумом - например синус, косинус и т.д. Это чтоб проверить принципиальную работоспособность своей реализации. Следующий шаг - проверка на сложных функциях с известным оптимумом. При этом не нужно ожидать точного их решения, т.к. они действительно сложные. Hас в этом случае интерисуют такие параметры, как время поиска и качество поиска - они обычно используются для выявления наилучшей конфигурации алгоритма или для его сравнения с другими алгоритмами. Вот известные функции: Функция Растригина. Число переменных 2. Максимумов - 96 локальных, 4 глобальных. #define PI 3.14159265358979323846 y=20+x[0]*x[0]+x[1]*x[1]-10*cos(2*PI*x[0])-10*cos(2*PI*x[1]); Пространство: -5.12<=x[t]<=5.12 Максимум: F(4.52299,4.52299) =80.7065 F(-4.52299,4.52299) =80.7065 F(4.52299,-4.52299) =80.7065 F(-4.52299,-4.52299)=80.7065 Griewank. Число переменных 2. Максимумов - мложество локальных и 1 глобальный. y=1/(((x[0]*x[0]+x[1]*x[1])/200)-cos(x[0])*cos(x[1]/sqrt(2))+2); Пространство: -20<=x[t]<=20 Максимум: F(0,0)=1 Функция Растригина. Число переменных 10. Маскимумов - (10^10)-1 локальных и 1 глобальный. #define PI 3.14159265358979323846 y=-100; for(t=0;t<XNum;t++)y+=10*cos(2*PI*x[t])-x[t]*x[t]; Пространство: -5.12<=x[t]<=5.12 Максимум: F(0,..,0)=0 ****************************************************************************** With best regards, Yuri Burger aka J.O. Kruger. E-mail: jo_kruger@mail.ru --- ifmail v.2.15dev5 * Origin: Unknown (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/9138410cc7e1.html, оценка из 5, голосов 10
|