Эволюционная стратегия с индивидуальными размерами - PullRequest
2 голосов
/ 01 декабря 2010

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

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

function f = sphere(x)
    f = sum(x.^2);
end

Приведенные результаты ES с одним размером шага по сравнению с индивидуальным с размером шага:

results

Синяя линия - это производительность ES с отдельными размерами шагов, а красная - для ES с одним размером шагов.

Код для (1, лямбда) ESс несколькими размерами шага:

% Strategy parameters
tau = 1 / sqrt(2 * sqrt(N));
tau_prime = 1 / sqrt(2 * N);
lambda = 10;

% Initialize
xp = (ub - lb) .* rand(N, 1) + lb;
sigmap = (ub - lb) / (3 * sqrt(N));
fp = feval(fitnessfct, xp');
evalcount = 1;

% Evolution cycle
while evalcount <= stopeval

    % Generate offsprings and evaluate
    for i = 1 : lambda
        rand_scalar = randn();

        for j = 1 : N
            Osigma(j,i) = sigmap(j) .* exp(tau_prime * rand_scalar + tau * randn());
        end

        O(:,i) = xp + Osigma(:,i) .* rand(N,1);
        fo(i) = feval(fitnessfct, O(:,i)');
    end

    evalcount = evalcount + lambda;

    % Select best
    [~, sortindex] = sort(fo);
    xp = O(:,sortindex(1));
    fp = fo(sortindex(1));
    sigmap = Osigma(:,sortindex(1));
end

Кто-нибудь видит проблему?

1 Ответ

0 голосов
/ 06 февраля 2011

Ваши мутации имеют уклон: они могут только увеличивать параметры, но никогда не уменьшать их.sigmap - это вектор (масштабированных) верхних минус нижних границ: все положительные.exp (...) всегда положительно.Поэтому элементы Осигмы всегда позитивны.Тогда ваше изменение - Osigma. * Rand (N, 1), и rand (N, 1) также всегда положительный.

Возможно, вы хотели использовать randn (N, 1) вместо rand (N1)?С этим односимвольным изменением я нахожу, что ваш код оптимизирует, а не пессимизирует: -).

...