Filter löschen
Filter löschen

fmincon drives variables away from the solution

4 Ansichten (letzte 30 Tage)
shaunaksinha
shaunaksinha am 7 Mär. 2018
Kommentiert: shaunaksinha am 7 Mär. 2018
Hello,
I am trying to solve a constrained optimization problem for a vector function using fmincon. When I provide the initial point to my optimization problem equal to the true solution (I know what the true solution is), fmincon runs and then my output vector is totally away from the true solution.
Surprisingly, the value of the objective function evaluated at the true solution is 1.0027e-07 (theretically it should be ZERO). And the value of the objective function after running fmincon is 2.7724e-04. I am unsure why this is happening. I have posted my code snippets below. Thank you.
X0=[34.29; 0; 0.1490; 0.3341; 28.220; 0.2405];
% TRUE PARAMS: b1 = 34.29; b2=0; b3=0.1490; b4=0.3341; P=28.220; E=0.2405;
y=matched_ests(:,2);
y_dot=matched_ests(:,3);
y_ddot=matched_ests(:,4);
y_tdot=matched_ests(:,5);
u=matched_ests(:,6);
opt_f = @(X)opt_func_sync_gen(X, y, y_dot, y_ddot, y_tdot, u);
options = optimoptions('fmincon', 'MaxIterations', 10000,...
'MaxFunEvals', 10000, 'UseParallel', true);
A=[];
b=[];
Aeq=[];
beq=[];
lb = zeros(6,1);
ub=[100;100;100;100;100;100];
nonlcon = [];
[Y,fval] = fmincon(opt_f,X0,A,b,Aeq,beq,lb,ub,nonlcon,options);
b1 = Y(1);
b2 = Y(2);
b3 = Y(3);
b4 = Y(4);
P = Y(5);
E = Y(6);
fprintf('%.3f %.3f %.3f %.3f %.3f %.3f %.3f',b1,b2,b3,b4,P,E);
And the function used by fmincon is
function [obj_func_value] = opt_func_sync_gen(X, y, y_dot, y_ddot, y_tdot, u)
b1 = X(1);
b2 = X(2);
b3 = X(3);
b4 = X(4);
P = X(5);
E = X(6);
sin_y = sin(y);
cos_y = cos(y);
vector_func = (E*b1*(sin_y).^2 - b4*P.*(sin_y) + b2*b4.*y_dot.*sin_y...
+ b4*y_ddot.*sin_y + b1*b3.*(sin_y.^2).*cos_y...
+ b2*(sin_y.*y_ddot - (y_dot.^2).*cos_y)...
+ P.*y_dot.*cos_y - b1.*sin_y.^2.*u ...
+ y_tdot.*sin_y - y_dot.*y_ddot.*cos_y).^2;
obj_func_value = sum(vector_func);
end

Antworten (1)

Alan Weiss
Alan Weiss am 7 Mär. 2018
Surprisingly, there was another question at nearly the same time that has a solution equivalent to yours. To quote my solution to that question:
By default, fmincon uses the 'interior-point' algorithm, which strictly stays away from bounds. If you want results exactly at the bounds, then I suggest that you use the 'sqp' algorithm. Set the algorithm using the Algorithm option.
Alan Weiss
MATLAB mathematical toolbox documentation
  1 Kommentar
shaunaksinha
shaunaksinha am 7 Mär. 2018
Hi Alan,
Using the 'sqp' algorithm solved the problem.
Thank you.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Nonlinear Optimization finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by