У меня есть довольно сложная задача оптимизации установить, что я решил через fmincon, называя его как этотсравнивающие fmincon и GA (генетический алгоритм) результаты MATLAB: проблема с га
myfun = @(x5) 0.5 * (norm(C*x5 - d))^2 + 0.5 * (timeIntervalMeanGlobal * powerAbsMaxMaxGlobal * sum(x5(28:128),1))^2;
[x5, fval] = fmincon(myfun, initialGuess, -A, b, Aeq, beq, lb, []);
Компоненты далеко долго печатать здесь, но вот размеры
C: 49 x 128
x5: 128 x 1
d: 49 x 1
timeIntervalMeanGlobal, powerAbsMaxMaxGlobal: constants
initialGuess: 128 x 1
A: 44541 x 128
b: 44541 x 1
Aeq: 24 x 128
beq: 24 x 1
lb: 128 x 1
Это работает в коде, но я не получаю результаты, которые я полностью доволен. Я хотел бы сравнить его с встроенной функцией га в среде MATLAB, которая называется подобным образом, но я получаю сообщение об ошибке при попытке запустить его, как этот
[x5, fval] = ga(myfun, nvars, -A, b, Aeq, beq, lb, []);
где nvars = 128. Там в длинный список около 8 ошибок, начиная с
??? Error using ==> mtimes
Inner matrix dimensions must agree.
и заканчивая
Caused by:
Failure in user-supplied fitness function evaluation. GA cannot continue.
может кто-то пожалуйста, научи меня о том, как назвать га правильно, и дать представление о том, почему может возникнуть эта ошибка с гавызов, когда тот же код не вызывает ошибку с fmincon? Я пробовал все файлы справки MATLAB и примеры с несколькими разными перестановками, но не лучше. Благодарю.
ОБНОВЛЕНИЕ: Я думаю, что нашел проблему, но я не знаю, как ее исправить. В документации ga говорится: «Функция фитнеса должна принимать вектор-строку длины nvars». В моем случае myfun - это функция пригодности, но x5 - вектор столбца (так же, как и lb). Поэтому, хотя математически я знаю, что C * x5 = d совпадает с x5 '* C' = d 'даже для неквадратных матриц, я не могу сформулировать проблему таким образом для решателя ga. Я попробовал - это делает его мимо фитнес-функции, но затем я получаю ошибку
The number of rows in A must be the same as the length of b.
Любые мысли о том, как получить эту проблему в нужном формате для решателя? Благодаря!
Какова ваша ценность для 'nvars'? Ваша ошибка mtimes означает, что MATLAB жалуется, что умножение матрицы не имеет количества столбцов в первой матрице, равных числу строк во втором. –
nvars = 128. Это константа, поэтому я не вижу, как это может вызвать ошибку. Благодарю. – dustynrobots
В моем почтовом ящике есть комментарий. Я не вижу здесь, что говорит: «Можете ли вы попробовать его с nvars = 1?». Я сделал это, и он избавился от ошибки mtimes, но затем я получаю другую ошибку несоответствия измерения: ??? Ошибка при использовании ==> preProcessLinearConstr at 49 Число столбцов в A должно быть таким же, как длина X0. – dustynrobots