Re-write MPC cost function to QP formulation

조회 수: 3 (최근 30일)
MC
MC 2017년 4월 29일
답변: Nicolas Schmit 2017년 9월 5일
Hello!
I've been trying to make a simple script to re-write the cost function in the usual MPC formulation to the QP formulation used to solve the optmization problem. My code is as follows: (Note its using symbolics toolbox)
xd = xda+gradxda*(x7-thetaka);
yd = yda+gradyda*(x7-thetaka);
x = [x1 x2 x3 x4 x5 x6 x7].';
u = [u1 u2 u3 u4 u5].';
z = [x;u];
e_c = sinx*(x1-xd)-cosx*(x2-yd);
e_l = -cosx*(x1-xd)-sinx*(x2-yd);
Q = [q_c 0; 0 q_l];
J = [e_c;e_l].'*Q*[e_c;e_l] - q_t*x7;
H = hessian(J,z);
c = gradient(J,z);
c = subs(c, z, [0;0;0;0;0;0;0;0;0;0;0;0]);
f = 0.5*z.'*H*z+c.'*z;
isequal(simplify(J), simplify(f))
Should not J and f be equal? The isequal command will yield a logical 0 for me. However I tested it on an example cost function, found here: https://se.mathworks.com/help/optim/ug/quadprog.html#bssh6y6-8 and using that cost function with my above code will yield a logical 1, as I expect. Have I misunderstood the connection between J and f or have I made a coding mistake?
Best regards MC

답변 (1개)

Nicolas Schmit
Nicolas Schmit 2017년 9월 5일
J and f are not equal because of the constant term in J. If you take the Taylor expansion of J, you obtain:
J == J(z=0) + gradient(J, z=0)'*z + 1/2* z'*hessian(J, z=0)*z
Thus, f = J - J(z=0), Where J(z=0) = subs(J, z, zeros(size(z)).
The example cost function in the documentation yields a logical 1 because it has no constant term.
You can always remove the constant term from the cost function because it has no impact on the final solution.

카테고리

Help CenterFile Exchange에서 Controller Creation에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by