2015-04-16 3 views
1

У меня проблема с решением проблемы оптимизации в Matlab. У меня есть объективная функция, которую мне нужно свести к минимуму.Ошибка оптимизации lsqnonlin в Matlab

я запускаю этот код в Matlab, используя lsqnonlin функцию:

[objective] = @(E) objective(E); 
options = optimoptions(@lsqnonlin,'Algorithm','trust-region-reflective','MaxFunEvals',2000); 

lowb = [0.00001 0.00001 0.00001]; % lower bounds 
uppb = [30 30 30]; % upper bounds 

E0 = [0.00001 0.00001 0.00001]; %initial guess 

problem = createOptimProblem('lsqnonlin', 'objective', objective, 'x0', E0, 'lb', lowb, 'ub', uppb, 'options', options); 

ms = MultiStart; 
matlabpool open 
ms.UseParallel = 'always'; 
startpoints = RandomStartPointSet('NumStartPoints',100); 
[E, fval, exitflag, output, solutions] = run(ms, problem, startpoints); 

matlabpool close 

Я получаю эту ошибку в конце концов, и я не могу продолжать: Алгоритм Левенберга-Марквардт не обрабатывает связанные ограничения и алгоритм рефлексии в области доверия требует по крайней мере столько же уравнений, сколько переменные; прерывание.

Не могли бы вы рассказать мне, что происходит не так? Это мои первые попытки в инструментах оптимизации в Matlab, поэтому я не знаю много чего.

+0

использовать начальные точки в 'RandomStartPointSet' и не использовать ограничения' upper/lower', я думаю, что это источник ошибки, которую вы получаете –

ответ

0

Функция lsqnonlin позволяет вам выбирать между 'levenberg-marquardt' и 'trust-region-reflective'. Вы выбрали 'trust-region-reflective', но сообщение об ошибке вводит в заблуждение, поскольку оно сообщает о различных требованиях к каждой опции. Документация для lsqnonlinhere объясняет это более четко.

В вашем случае эта ошибка вызвана тем фактом, что ваша целевая функция E возвращает меньше значений («уравнения», упомянутые в сообщении об ошибке), чем есть переменные (3). Является ли вывод E скаляром или 2-вектором? Вы можете избежать этой ошибки, изменив решатель на 'levenberg-marquardt', но тогда вам придется отказаться от связанных ограничений.

Оптимизация сложна и очень чувствительна к конкретной проблеме. MathWorks предоставляет довольно полное руководство для choosing a solver. В вашем случае вам нужно охарактеризовать целевую функцию (которую вы пренебрегли отправкой). Это:

  1. Линейный?
  2. Квадратичный?
  3. Наименьшие квадраты? (Это то, что предлагает ваш выбор lsqnonlin, но я подозреваю, что ваша целевая функция E является скалярной функцией)
  4. Гладкий нелинейный?
  5. Негладкие?

В сочетании с вашими ограничениями тип целевой функции будет отображать варианты, доступные в таблице на странице choosing a solver. В этот момент обязательно прочтите документацию для выбранной функции оптимизации, чтобы получить наилучшие результаты.

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