![]() |
|
![]() ![]() ![]() |
|
serega721 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 15.5.2010 Репутация: нет Всего: нет |
Добрый день!
Только вот начал изучать предмет генетические алгоритмы и столкнулся с непониманием использования оператора мутации, а именно: Всегда ли после оператора скрещивания мы используем мутацию? Все ли хромосомы подвергаются мутации? И как мы определяем какие именно биты и в каком количестве будем инвертировать? За любые ответы буду очень признателен. |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 4 Всего: 17 |
В классических генетических алгоритмах есть несколько независимых операций модификации генов:
1. Кроссинговер (скрещивание). Он бывает одноточечным и многоточечным. 2. Мутация В генетике есть еще пара операций, которые в генетических алгоритмах не используются - вставка и выпадение. Операции скрещивания и мутации независимы. многоточечное скрещивание имеет следующий алгоритм. Определяем набр точек скрещивания i1,...ik далее определяем двух потомков по формуле первый a[1],...,a[i1],b[i1+1],...,b[i2],a[i2+1],... второй b[1],...,b[i1],a[i1+1],...,a[i2],b[i2+1],... Теперь мутация. Мутация определяется своей вероятностью. Для каждого потомка кидаем кости - если получили больше заданной величины, быть мутации. ген (позицию) для мутации определяем вторым бросанием костей (генератором случайных чисел). Небольшое замечание. Только в крайне примитивных случаях параметры модели в генетическом программирвании кодируют битовой цепочкой. Такое кодирование делает мутацию разных битов имеющей (слишком) разное влияние на результат. Другие варианты кодирования можно найти в литературе. -------------------- Mirkes |
|||
|
||||
serega721 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 15.5.2010 Репутация: нет Всего: нет |
||||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 4 Всего: 17 |
Прошу прощения за иносказательность. Пусть вероятность мутации равна 0<=p<=1. Генерируем случайное число из диапазона [0,1] (бросаем кости). Если число больше p, тогда мутация состоится. Генерируем случайное целое число из диапазона [0,число генов]. Ген с выброшенным номером подвергается мутации. -------------------- Mirkes |
|||
|
||||
Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 4 Всего: 17 |
Перечитал все и понял что получается скомканная куча.
Поэтому решил еще раз записать один из классических вариантов. Начнем с терминологии. ген - единица информации в коде. В простейшем случае - 1 бит. геном - полная последовательность, кодирующая одну особь. Хромосом в генетических алгоритмах нет. Для алгоритма в целом определяются несколько параметров 1. Вероятность мутации pm 2. Размер популяции n 3. Число рождающихся особей m 4. Спсоб вычисления фитнес функции (всегда неотрицательна, чем больше, тем лучше) 5. Число разрезов в геноме k (кратность кроссинговера), в классике 1. Для каждой особи в популяции определено значение финтес функции. Генетический алгоритм в каждой эпохе проходит два этапа 1. размножение. 2. отбор. Размножение. Для каждой особи определяется вероятность принять участие в размножении. Есть множество алгоритмов рассчета этих вероятностей. Наиболее простой и классический - пропорционально значению фитнес функции: Кроме того, фиксируется способность одной особи принять участие в нескольких операциях размножения за один этап размножения. Один этап размножения состоит в m последовательных выполнениях следующей процедуры Генерируем случайное число из диапазона от 0 до суммы фитнес функции всех особей, претендующих на участие в размножении. Далее перебирая последовательно по номерам особей имеющейся популяции вычитая из полученного случайного числа значение фитнес функции. Та особь, на которой значение числа станет меньше нуля, отбирается для скрещивания. Аналогично выбирается партнер. Для отобранной пары выполняется процедура скрещивания с рождением двух новых особей. Определяем набр точек скрещивания i1,...ik далее определяем двух потомков по формуле первый a[1],...,a[i1],b[i1+1],...,b[i2],a[i2+1],... второй b[1],...,b[i1],a[i1+1],...,a[i2],b[i2+1],... Для каждой из новых особей выполняем следующую процедуру Генерируем случайное число из диапазона [0,1]. Если число больше p, тогда мутация состоится. Генерируем случайное целое число из диапазона [0,число генов]. Ген с выброшенным номером подвергается мутации. Потом проводится этап селекции. Как правило задается доля старого поколения, переходящая в новое. Остальное выбирается из новых особей. Отбор ведется по значению фитнес функции. Вроде так. -------------------- Mirkes |
|||
|
||||
_Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Когда-то прочитал вот такую книжку:
Melanie Mitchell An Introduction to Genetic Algorithms Просто так прочитал, для развлечения. Отлично написана: все понятно и ясно, да, к тому же, сразу хочется только ими всегда и заниматься ![]() Если удасться ее найти - очень рекомендую ![]() -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
Avrilfun41 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 18.2.2012 Репутация: нет Всего: нет |
Прощу прощения что вмешиваюсь. Тоже начал заниматься генетическими алгоритмами - не могли бы подсказать литературу на русском по этой теме? Буду очень признателен.
|
|||
|
||||
Polesinskij |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 31.10.2013 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |