Обсуждение статьи "Генетические алгоритмы - это просто!" - страница 14

 

Здравствуйте, вопросов задавать не буду.

Просто хочу выразить огромную благодарность за Вашу работу! Спасибо! 

Очень пригодилась. 

 

Здравствуйте, тоже хочу выразить большую благодарность. На ГА обратил внимание недавно. Все найденные источники "про ГА" вселили уныние. Уж и не знал, куда подацца... А тут по какой-то очередной ссылка попал на Вашу статью. Одним словом, ура!  ))

Имеется пара вопросов. Правда, прекрасно понимаю, что статья написана давно. Но всё-таки...

1. Объявленные переменные нигде не используются.

input int    FFNormalizeDigits_P  = 0;        //Кол-во знаков приспособлености
input int    GeneNormalizeDigits_P= 0;        //Кол-во знаков гена

Это задел на будущее?

2. Несколько раз прогнал  UGA и через раз получал разные значения, т.е. один раз правильные, второй раз не совсем правильные. Вопрос - какой из параметров ГА надо задать "побольше", чтоб увеличить количество правильных ответов.

В прицепе наблюдаемое... На левой картинке неверный результат.

Файлы:
111.png  8 kb
 
Alexey_74:

...Вопрос - какой из параметров ГА надо задать "побольше", чтоб увеличить количество правильных ответов.

Вообще, однозначного ответа, к сожалению, нет и быть не может. Все зависит задачи.

В Вашем конкретном случае попробуйте покрутить эти параметры:

input int    ChromosomeCount_P    = 100;    //Кол-во хромосом в колонии
input int    Epoch_P               = 50;    //Кол-во эпох без улучшения
//---
input string GA_OperatorParam     =        "----Параметры операторов----";
input double ReplicationPortion_P  = 100.0; //Доля Репликации.
input double NMutationPortion_P    = 10.0;  //Доля Естественной мутации.
input double ArtificialMutation_P  = 10.0;  //Доля Искусственной мутации.
input double GenoMergingPortion_P  = 20.0;  //Доля Заимствования генов.
input double CrossingOverPortion_P = 20.0;  //Доля Кроссинговера.
input double ReplicationOffset_P   = 0.5;   //Коэффициент смещения границ интервала
input double NMutationProbability_P= 5.0;   //Вероятность мутации каждого гена в %

:)

Изменение первых двух в сторону увеличения однозначно повышает сходимость, но, естественно, увеличивает время поиска.

 

Благодарю за ответ. Поигрался, понаблюдал... В общем, делиться всеми наблюдениями не имеет смысла. Вполне достаточно "крайних вариантов".

С первыми двумя параметрами, равными 50 и 2, соответственно, время работы алгоритма составляет 170-200 мс.

...., равными 100 и 50 время работы составило 103203 мс. Да, алгоритм выдал абсолютное совпадение по результатам, "как должно" и "как получилось".

Увы, как мне кажется, времязатраты совершенно не соответствуют достигнутым результатам.

 
Alexey_74:

Благодарю за ответ. Поигрался, понаблюдал... В общем, делиться всеми наблюдениями не имеет смысла. Вполне достаточно "крайних вариантов".

С первыми двумя параметрами, равными 50 и 2, соответственно, время работы алгоритма составляет 170-200 мс.

...., равными 100 и 50 время работы составило 103203 мс. Да, алгоритм выдал абсолютное совпадение по результатам, "как должно" и "как получилось".

Увы, как мне кажется, времязатраты совершенно не соответствуют достигнутым результатам.

Если задача решаема Ньютоновскими методами, то её нужно решать ими. Получите точные результаты за короткое время.

Если же нет, то велкам к ГА. Тут вспоминается поговорка про микроскоп и орехи.

 
Urain:

Если задача решаема Ньютоновскими методами, то её нужно решать ими. Получите точные результаты за короткое время.

Если же нет, то велкам к ГА. Тут вспоминается поговорка про микроскоп и орехи.

К сожалению, простыми методами никак. Какую задачу не возьми, тут же в полный рост встает задача оптимизации. Поскольку все ипостаси ВР, обзываемые индикаторами, являются параметрическими. Даже тот же зигзаг, казалось бы...

А раз есть параметры, значит, их надо пере(под)бирать. Простейший вариант - вложенные циклы. Как показывает практика, чаще всего не вариант. Поэтому и ГА. И совсем не от лукавого. )) А востребованная насущная необходимость.

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

сможет ли сумма нескольких синусоид повторить этот график. Накидал скрипт, который должен был подобрать 3 синусоиды. Сначала хотел 5, потом передумал на три (эксперимент же, чего горячицца?). Итого получилось 3 цикла (2 вложенных)

Заявленное количество часов оказалось трехзначным. Конечно, если убрать комменты из циклов, циклические алгоритмы работают быстрее. Но не в 100 раз, к сожалению, да и возможность слежение за процессом пропадает напрочь.

Поэтому эксперимент был прекращен не начавшись. Но масштаб и тяжесть, казалось бы, простой ситуации "был услышан", удивил и почти испугал. ))

 

Андрей возникло ещё 2 вопроса:

1. В примере по альтернативному зигзагу Вы использовали фразу "...когда генотип хромосомы не соответствует фенотипу". Что сие означает применительно к ГА? 

2. Как я понял, ранжирование осуществляется по убыванию. Т.е. чем больше значение в Colony[0][chromos], тем более приспособленная особь?

Т.е. если я понял правильно, то в случае работы с кривулинами в ФФ можно (нужно) использовать коэффициенты корреляции r или R, поскольку они стремятся 0->1. И нельзя использовать MSE, поскольку оно ->0.

 
Alexey_74:

Андрей возникло ещё 2 вопроса:

1. В примере по альтернативному зигзагу Вы использовали фразу "...когда генотип хромосомы не соответствует фенотипу". Что сие означает применительно к ГА? 

2. Как я понял, ранжирование осуществляется по убыванию. Т.е. чем больше значение в Colony[0][chromos], тем более приспособленная особь?

3. Т.е. если я понял правильно, то в случае работы с кривулинами в ФФ можно (нужно) использовать коэффициенты корреляции r или R, поскольку они стремятся 0->1. И нельзя использовать MSE, поскольку оно ->0.

1. Если гены хромосомы одно и тоже, что аргументы оптимизируемой функции - генотип соответствует фенотипу (генотип - значения генов, фенотип - значения аргументов). Если же гены и аргументы не равны (используются некие преобразования) - то не соответствуют. Погуглите понятия в биологии генотип и фенотип.

2. Да. Но это не принципиально. Можно явно указывать направление ранжирования, а можно значение FF умножать на  -1.

3. Извините, не понял вопроса.

 
joo:

1. Если гены хромосомы одно и тоже, что аргументы оптимизируемой функции - генотип соответствует фенотипу (генотип - значения генов, фенотип - значения аргументов). Если же гены и аргументы не равны (используются некие преобразования) - то не соответствуют. Погуглите понятия в биологии генотип и фенотип.

2. Да. Но это не принципиально. Можно явно указывать направление ранжирования, а можно значение FF умножать на  -1.

3. Извините, не понял вопроса.

Благодарю.

1. Я так и догадывался. Но догадки вещь мутная и опасная. Гораздо желательнее знать точно. На счет погуглить, спасибо за совет, но не воспользуюсь, пожалуй. Ещё со школьной скамьи помню рецессивный, доминантный, аллель, фенотип, генотип, гомозиготен, гетерозиготен... Батюшки, сколько мусора в башке. М-да, знания в советской школе умели давать...  ))

2. Тоже понятно.

3. А вот третьего пункта не было. Просто третья строка (продолжение второго пункта), в которой мысль вслух, типа, "ежели я прав...". Это не вопрос. Хотя, и правда, возможно таковым выглядит. Ну, тогда, риторический вопрос. Смысл поясню. Например, чисто синтетически. Имеем кривой сигнал синусоидальной формы и знаем, что оный является суммой трех синусоид. Почти абсолютно уверен, что ГА с такой задачей справится легко и выдаст периоды всех трех синусоид. Но в процессе как-то же надо мерить на сколько сумма полученных трех синусоид похожа на эталон. В моём арсенале таких мерялок три: r (Пирсон), R (р-скварь) и MSE. Тем более, что эти штуки и в нейросетевых парадигмах используются, как показатели "пригодности".

 Ещё раз благодарю, стало попонятней, попрозрачней. Повторюсь, я в тему ГА нырнул совсем недавно. Так что все эпитеты типа новичок, чайник, валенок, увы, все мои...  )) 

P.S. Про биологические аналоги я, разумеется, знаю. Но это знание, это чисто для взращивания понималки сути процессов, описанных языками программирования высокого уровня. И то, не везде и не всегда. В тугой узел не связываю биологические аналоги с нейрокомпьютерными. Как-то в биологии (природе) всё работает на раз. А в нейрокомпьютинге почему-то чаще всего как раз не работает.

 

Андрей, ещё вопрос.  

input string GA_OperatorParam     =        "----Параметры операторов----";
input double ReplicationPortion_P  = 100.0; //Доля Репликации.
input double NMutationPortion_P    = 10.0;  //Доля Естественной мутации.
input double ArtificialMutation_P  = 10.0;  //Доля Искусственной мутации.
input double GenoMergingPortion_P  = 20.0;  //Доля Заимствования генов.
input double CrossingOverPortion_P = 20.0;  //Доля Кроссинговера.
input double ReplicationOffset_P   = 0.5;   //Коэффициент смещения границ интервала
input double NMutationProbability_P= 5.0;   //Вероятность мутации каждого гена в %

 Можно ли сказать, что такие значения этих переменных годятся для большинства задач оптимизации? Как пишут в некоторых источниках "... 90% задач могут быть решены с использованием обычного перцептрона".