Использование генетического алгоритма для сходимости к глобальному минимуму функции с 2 переменными

#c #algorithm #genetic-algorithm #genetic-programming

#c #алгоритм #генетический алгоритм #генетическое программирование

Вопрос:

Я использую Visual Studio C в качестве платформы, чтобы попытаться сходиться к глобальному минимуму.

Давайте предположим, что функция представляет собой функцию черного ящика, где, если я ввожу (x, y), я получаю z.

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

https://karczmarczuk.users.greyc.fr/TEACH/IAD/GenDoc/carrGenet.pdf

Я использовал алгоритм, упомянутый в приложении B. Для нахождения минимума функции с 2 переменными.

f(x, y) = z

Я выполнил поиск значений в таблице, чтобы получить график проблемы. Я прикрепил график.

f(x, y) = z

Здесь минимальное значение графика, как вы можете видеть из графика, находится только в одной точке (0.6, 1.3).

Алгоритм сходится, если я использую дискретные значения (x, y), кратные 0,1. Например. 0,8, 0,9, 2,2, 5,6 и т.д. Но в остальном он не сходится.

Могу ли я в любом случае изменить график в соответствии с алгоритмом или могу ли я изменить алгоритм для минимизации функции?

Комментарии:

1. Зачем вам изменять график? Это похоже на фотошоп вашего дома, чтобы сделать его больше, когда вам нужно больше места в вашем доме. И какой алгоритм?

2. @plasmacel Я изначально взял логарифм от z, чтобы получить этот график. Если бы был какой-либо другой способ еще раз обработать его, чтобы алгоритм мог легко сходиться.

3. Вы не предоставляете никакой информации ни о функции, которую хотите минимизировать, ни об алгоритме минимизации. Как вы ожидаете помощи?

4. Не зная, что это за алгоритм, невозможно обсудить, как его можно изменить или приспособить.

5. Я предполагаю, что OP считает, что он создал график неправильно, поэтому он не получил надлежащих результатов. В любом случае, требуется дополнительная информация.

Ответ №1:

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

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

Комментарии:

1. Могу ли я каким-либо образом уточнить свой график, чтобы сделать его более плавным, или есть какие-либо другие алгоритмы, которые я могу попробовать для этого?

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

3. @Ray Явной функции нет, этот график в основном пытается связать 2 входные переменные в моем моделировании с одним из выходных данных. Я отсканировал функцию в области x — (-2,2) и y — (0,5,10) шириной 0,05 и сопоставил ее с результатами. Вот как я получил этот график.

Ответ №2:

Я не уверен, считаете ли вы генератор случайных чисел частью черного ящика, так есть ли структура вашей функции ввода, которую вы могли бы представить в случайной инициализации или в том, как происходят случайные мутации?

Комментарии:

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

2. @RahulKaruppiah Я натолкнулся на идею «прыгающего мутатора». Вот некоторый код, который использует байтовые распределения из фенотипов для выполнения мутаций и для случайного синтеза популяции.