Генетический алгоритм против имитации отжига--сравнение производительности и варианты использования

каковы соответствующие различия, характеристики и варианты использования, между имитация отжига С bean search и Генетический Алгоритм?

Я знаю, что SA можно рассматривать как GA, где размер популяции только один, но я не знаю ключевой разницы между ними.

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

3 ответов


Ну, строго говоря, эти две вещи--имитация отжига (SA) и генетические алгоритмы не являются ни алгоритмами, ни их целью "интеллектуальный анализ данных".

оба мета-эвристики--на пару уровней выше "алгоритма" по шкале абстракции. Другими словами, оба термина относятся к метафорам высокого уровня-один заимствован из металлургии, а другой из эволюционной биологии. В мета-эвристики таксономии, СА один-государственный способ и GA-это способ населения (в подклассе вместе с PSO, ACO, et al, обычно называют биологически вдохновленные мета-эвристики).

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

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

любое решение техника решения задач cap, независимо от алгоритма, будет состоять в основном из следующих шагов (которые обычно кодируются как один блок в рекурсивном цикле):

  1. кодирование сведений о домене в функции затрат (это пошаговая минимизация значения возвращается из этой функции представляет собой решение с/о проблема);

  2. оцените проходить функции цены в начальной "догадке" (to начинать итерация);

  3. на основе значения, возвращаемого из функция затрат, генерировать последующие решение кандидата (или более один, в зависимости от мета-эвристика) к стоимости функция;

  4. оцените каждое решение кандидата передавая его в наборе аргументов, функция стоимости;

  5. повторите шаги (iii) и (iv) до либо некоторый критерий сходимости удовлетворено или максимальное число итерации достигнутый.

мета-эвристика направлена на шаг (iii) выше; следовательно, SA и GA отличаются тем, как они генерируют решения-кандидаты для оценки функцией затрат. Другими словами, это место, где можно посмотреть, чтобы понять, как эти две мета-эвристики отличаются.

неофициально суть алгоритма, направленного на решение комбинаторной оптимизации, заключается в том, как он обрабатывает решение-кандидат, значение которого возвращается из функции затрат хуже чем текущее лучшее решение кандидата (та, которая возвращает наименьшее значение из функции затрат). Самый простой способ для алгоритма оптимизации справиться с таким решением-это полностью отвергнуть его-это то, что делает алгоритм восхождения на холм. Но при этом простое восхождение на холм всегда будет упускать лучшее решение, отделенное от текущего решения холмом. Другими словами, сложный алгоритм оптимизации должен включать техника для (временного) принятия решения-кандидата хуже, чем (т. е. в гору от) текущего лучшего решения, потому что даже лучшее решение, чем текущее, может лежать на пути через это худшее решение.


Итак, как SA и GA генерируют решения-кандидаты?

сущность SA обычно выражается в терминах вероятности того, что будет принято более дорогостоящее решение-кандидат (все выражение внутри двойной скобки является показатель:

p = e((-highCost - lowCost)/temperature)

или в python:

p = pow(math.e, (-hiCost - loCost) / T)

термин "температура" - это переменная, значение которой уменьшается в ходе оптимизации, и поэтому вероятность того, что SA примет худшее решение, уменьшается по мере увеличения числа итераций.

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

Генетические Алгоритмы очень разные. Во-первых-и это большая вещь-она генерирует не одно решение кандидата, а целую "популяцию из них". Он работает следующим образом: GA вызывает функцию затрат для каждого члена (решение-кандидат) населения. Затем он ранжирует их от лучшего к худшему, упорядочивая по значению, возвращаемому функцией затрат ("лучшее" имеет наименьшее значение). Из этих ранжированных значений (и соответствующих им решений-кандидатов) создается следующая популяция. Новые члены населения создаются по существу одним из трех способов. Первое обычно называют "элитарностью", а на практике обычно подразумевают просто принятие решений кандидатов с наивысшим рейтингом и передачу их прямо-без изменений-следующему поколению. Два других способа, которыми новые члены популяции обычно называются "мутацией" и "кроссовером". Мутация обычно включает изменение одного элемента в векторе решения-кандидата из текущей популяции для создания вектора решения в новой популяции, например, [4, 5, 1, 0, 2] => [4, 5, 2, 0, 2]. Результат операции кроссовера похож на то, что произошло бы, если бы векторы могли заниматься сексом, то есть новый дочерний вектор, элементы которого состоят из некоторых от каждого из двух родителей.

таковы алгоритмические различия между GA и SA. Как насчет различий в производительности?

на практике: (мои наблюдения ограничены проблемами комбинаторной оптимизации) GA почти всегда бьет SA (возвращает более низкое "лучшее" возвращаемое значение из стоимости функция--т. е. значение, близкое к глобальному минимуму пространства решений), но с более высокой стоимостью вычислений. Насколько мне известно, в учебниках и технических изданиях содержится тот же вывод относительно резолюции.

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

в каких обстоятельствах SA может превзойти GA? Общий сценарий, который я думаю, будет теми проблемами оптимизации, которые имеют небольшое пространство решений, так что результат SA и GA практически одинаковы, но контекст выполнения (например, сотни подобных проблем, выполняемых в пакетном режиме) благоприятствует более быстрый алгоритм (который всегда должен быть SA).


Это действительно трудно сравнить два, так как они были вдохновлены из разных областей..

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

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


Я далек от эксперта по этим алгоритмам,но я постараюсь помочь.

Я думаю, что самая большая разница между ними-это идея кроссовера в GA, и поэтому любой пример учебной задачи, которая лучше подходит для GA, чем SA, будет зависеть от того, что означает кроссовер в этой ситуации и как он реализуется.

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

I думаю, что трудно придумать убедительный довод для одного над другим, потому что они действительно очень похожи на алгоритмы, возможно, разработанные с очень разных исходных точек.