#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
Я выполнил поиск значений в таблице, чтобы получить график проблемы. Я прикрепил график.
Здесь минимальное значение графика, как вы можете видеть из графика, находится только в одной точке (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 Я натолкнулся на идею «прыгающего мутатора». Вот некоторый код, который использует байтовые распределения из фенотипов для выполнения мутаций и для случайного синтеза популяции.