2016-09-30 6 views
0

Я использую Visual Studio C++ в качестве платформы для сближения с глобальным минимумом.Использование генетического алгоритма для слияния с глобальным минимумом функции переменной 2

Предположим, что функция является функцией черного ящика, где in, если я ввожу (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

Почему бы вам не модифицировать графа? Это похоже на фотосъемку вашего дома, чтобы сделать его больше, если вам нужно больше места в вашем доме. И какой алгоритм? – plasmacel

+0

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

+3

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

ответ

2

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

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

+0

Есть ли способ, которым я могу уточнить свой график, чтобы получить более плавный наклон или есть ли какие-либо другие алгоритмы, которые я могу попробовать? –

+0

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

+0

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

0

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

+0

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

+0

@RahulKaruppiah Я столкнулся с идеей «прыгающего мутатора». [Здесь] (https://github.com/orthopteroid/psychic-sniffle) - это код, который использует байтовые распределения из фенотипов для выполнения мутаций и для случайного синтеза популяции. –