2013-10-08 1 views
1

У меня есть довольно сложная задача оптимизации установить, что я решил через 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.

Любые мысли о том, как получить эту проблему в нужном формате для решателя? Благодаря!

+0

Какова ваша ценность для 'nvars'? Ваша ошибка mtimes означает, что MATLAB жалуется, что умножение матрицы не имеет количества столбцов в первой матрице, равных числу строк во втором. –

+0

nvars = 128. Это константа, поэтому я не вижу, как это может вызвать ошибку. Благодарю. – dustynrobots

+0

В моем почтовом ящике есть комментарий. Я не вижу здесь, что говорит: «Можете ли вы попробовать его с nvars = 1?». Я сделал это, и он избавился от ошибки mtimes, но затем я получаю другую ошибку несоответствия измерения: ??? Ошибка при использовании ==> preProcessLinearConstr at 49 Число столбцов в A должно быть таким же, как длина X0. – dustynrobots

ответ

1

Получил! Я просто должен был управлять функциями пригодности, чтобы сделать его использовать x5 как вектор-строки, даже если это вектор-столбец всех ограничений

myfun = @(x5) 0.5 * (norm(x5 * C' - d'))^2 + 0.5 * (timeIntervalMeanGlobal * powerAbsMaxMaxGlobal * sum(x5(28:128)))^2; 

Уф!

 Смежные вопросы

  • Нет связанных вопросов^_^