Алгоритм оптимизации в Matlab

Я хочу рассчитать максимум функции CROSS-IN-TRAY, которая показана здесь:

формула креста в лотке

Итак, я сделал эту функцию в Matlab:

function f = CrossInTray2(x)
%the CrossInTray2 objective function
%
f = 0.0001 *(( abs(sin(x(:,1)).* sin(x(:,2)).*exp(abs(100 - sqrt(x(:,1).^2 + x(:,2).^2)/3.14159 ))      )+1 ).^0.1);
end

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

Затем, когда я перехожу к инструментам оптимизации и выбираю алгоритм GA и определяю нижнюю и верхнюю границы как -3 и 3, он показывает мне результат примерно после 60 итераций, который составляет около 0,13, а конечная точка что-то вроде [0, 9,34]. И как это возможно, что конечная точка не находится в диапазоне, определяемом границами? И каков фактический максимум этой функции?


person Kamil Grosicki    schedule 04.05.2016    source источник
comment
Где написанный вами код, использующий Optimization Toolbox для нахождения минимума этой функции? Он отсутствует, и в этом суть того, что неправильно. Без этого мы не знаем, почему вы получаете ошибки, о которых вы утверждаете.   -  person rayryeng    schedule 04.05.2016
comment
я не писал никакого кода. Я набрал optimtool в командном окне, а затем выбрал ga в качестве решателя, определил нижнюю и верхнюю границы, как я уже говорил, и так далее.   -  person Kamil Grosicki    schedule 04.05.2016
comment
Note: ga does not enforce bounds to be satisfied when the PopulationType option is 'bitString' or 'custom'. mathworks.com/help/gads/ga.html   -  person Yvon    schedule 04.05.2016


Ответы (1)


Максимум равен (0,0) (фактически, когда любой вход равен 0 и периодически кратен числу пи). После того, как вы отрицаете, вы ищете минимум положительной величины. Просто взглянув на внешнее абсолютное значение, очевидно, что оно не может быть меньше 0. Это тривиально происходит, когда любое значение sin(x) равно 0. Подключив, вы получите f_min = f(0,0) = .0001(0 + 1)^0.1 = 1e-4

Это выражение тривиально вычислить и нанести на двумерную сетку. Делайте это до тех пор, пока не выясните, на что вы смотрите, и каким должен быть приблизительный ответ, и только после этого вызывайте настоящий оптимизатор. GA не кажется хорошим кандидатом на относительно гладкое выражение, подобное этому. Причина, по которой вы получаете странные ответы, заключается в том, что только один из входных параметров должен быть равен 0. Как только оптимизатор находит один из них, другим входным параметром может быть что угодно.

person Peter    schedule 04.05.2016