Генетический алгоритм — лучший оператор кроссовера для назначения весов

По вашему опыту, какой оператор кроссовера лучше всего подходит для задачи назначения весов. В частности, я сталкиваюсь с ограничением, которое заставляет быть 1 суммой всех весов. В настоящее время я использую оператор юниформ-кроссовера, а затем делю все параметры на сумму, чтобы получить 1. Кроссовер работает, но я не уверен, что таким образом смогу сохранить хорошую часть своего решения и перейти к сходимости к лучшее решение. Есть ли у вас предложения? Нет проблем, если мне нужно создать собственный оператор.


person user2297037    schedule 10.11.2014    source источник


Ответы (1)


Если ваша исходная популяция состоит из подходящих особей, вы можете попробовать дифференциальную эволюцию. -подобный подход.

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

offspring = A + f (B - C)

Вы можете попробовать фиксированный весовой коэффициент f в [0,6; 2.0] или экспериментировать, выбирая f случайным образом для каждого поколения или для каждого разностного вектора (метод, называемый dither, который должен значительно улучшить поведение сходимости, особенно для зашумленных целевых функций).

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

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

РЕДАКТИРОВАТЬ

При равномерном пересечении вы исследуете все n-мерное пространство, в то время как приведенная выше рекомбинация ограничивает индивидуумов подпространством H (гиперплоскостью i wi = 1, где wi — веса) исходного пространства поиска.

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

В любом случае любое возможное решение должно быть на H:

Если A = (a1, a2, ... an), B = (b1 , ... bn), C = (c1, ... cn):

  • я aя = 1
  • i bi = 1
  • i ci = 1

so

i (ai + f (bi - ci)) = i > ai + f (i bi - i ci) = 1 + f (1 - 1) = 1

Потомок находится на гиперплоскости H.

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

РЕДАКТИРОВАТЬ2

Вы могли бы аналитически определить «действительный» диапазон f, но, вероятно, достаточно что-то вроде этого:

f = random(0.6, 2.0);

double trial[] = {f, f/2, f/4, -f, -f/2, -f/4, 0};

i = 0;
do
{
  offspring = A +  trial[i] * (B - C);
  i = i + 1;
} while (unfeasible(offspring));

return offspring;

Это просто идея, я не уверен, как это работает.

person manlio    schedule 10.11.2014
comment
Прежде всего, спасибо за вашу помощь. Таким образом, вы бы предложили подход DE. Можете ли вы объяснить мне, почему вы считаете, что это должно работать лучше, чем простой равномерный кроссовер? И потом, да, моя популяция состоит из возможных особей, но я не понимаю, почему при таком подходе потомки должны быть автоматически возможными. На самом деле я мог получить и отрицательные значения, что в моем случае запрещено, но все равно сумма не всегда равна 1. Может я не так понял. - person user2297037; 11.11.2014
comment
Извините, вы правы! Конечно, я сделал некоторую ошибку раньше! :P Жаль, что я не могу использовать эту систему. К сожалению, отрицательные веса запрещены, и у меня нет других ограничений. Как вы думаете, выходы способ исправить это? Я мог бы выбрать случайное значение F для каждого вектора, удовлетворяющего ограничению, но я думаю, что это может занять много времени, не так ли? Я слышал о штрафных функциях, но понятия не имею, как они могут помочь мне в моей проблеме. - person user2297037; 11.11.2014
comment
С помощью штрафной функции вы заменяете задачу оптимизации с ограничениями на задачу без ограничений, образованную путем добавления члена, называемого штрафной функцией, к исходной целевой функции. Штраф состоит из параметра, умноженного на меру нарушения ограничений. Вы можете взглянуть на en.wikipedia.org/wiki/Penalty_method. - person manlio; 12.11.2014
comment
Насчет EDIT2 я именно это и имел в виду. В чем преимущество использования штрафной функции в задаче с ограничениями? Я имею в виду, я подозреваю, что требуется больше времени, чтобы сходиться. Я ошибся? - person user2297037; 12.11.2014