Ваша фитнес-функция должна возвращать скалярное значение
Я попытался выполнить оптимизацию, используя нейронную сеть и генетический алгоритм. Я обучил нейронную сеть с входом p (матрица 4x72) и целью t (матрица 2x72). Пересматривая оптимизацию с использованием генетического алгоритма, я использовал sim
функция нейронной сети как фитнес-функция. Код, который я использовал для этого, выглядит следующим образом:
objFcn=@(p) sim(net,p');
%'net' is the neural network I created with p as input and t as target
[xOpt,fVal,exitflag,target]=ga(objFcn,4,[],[],[],[],LB,UB,[],options);
Я предоставил LB и UB, которые являются нижней и верхней границами соответственно. А также options
Я попробовал это с
options = gaoptimset('Vectorized','on');
% even vectorized off doesnt solve the problem
Логично, как я использовал р ' в sim
команда, результирующая матрица будет 72x2, что соответствует населению для GA. Но по какой-то причине я всегда получаю сообщение об ошибке "Ваша фитнес-функция должна возвращать скалярное значение".
Пожалуйста, помогите мне решить эту проблему.
1 ответ
Функция "sim" возвращает матрицу со всеми выходами из вашей сети. Вы должны вычислить квадрат ошибки от этого, чтобы обеспечить скалярное значение, чтобы минимизировать с помощью GA.