mpcCustomSolverにおけるスラッグ変数の扱い
8 views (last 30 days)
Show older comments
Ken Tsuruta
on 27 Sep 2020
Answered: Kohei Iwamoto
on 28 Sep 2020
こんにちは。
通常、MPCでQP問題を解いていく際、
MPC tool boxにてスラッグ変数の設定が行われていますが、
MPCにCustom QP Solverを適用し、(Obj.Optimizer.CustomSolver = true;)
自作QPソルバーにてシミュレーションを行う際にはスラッグ変数は
どのように扱われるのでしょうか?通常通りMPC tool boxのスラッグ変数が適用されているのでしょうか?
以下は自分が作成したコードになります。
本コードでは、CVXを用いて二次計画法を解いています。
function [X, status] = mpcCustomSolver(H,f,A,b,x0)
%% cvxで解く
persistent n; %Keep variable 'n' in memory
if isempty(n)
% Run just first time step
n = evalin('base','Obj.ControlHorizon'); %Extract variable from base workspace
end
cvx_begin quiet
variable X(n+1)
% 二次計画問題
minimize (0.5*X'*H*X+f'*X)
subject to
A*X >= b;
cvx_end
% % Get cvx status
str = cvx_status;
if strcmp('Solved',str)
status = 1; % Feasible solution
else
status = -1; % Infeasible solution
end
end
0 Comments
Accepted Answer
Kohei Iwamoto
on 28 Sep 2020
はい、カスタムQPソルバーを使用してもデフォルトのMPCの構成と同じくスラック変数が扱われています。
スラックが最適化に含まれていることを確認する最も簡単な方法はヘシアンHの次数を確認することです。
ヘシアンHは以下のようなQPのフォームにおいて決定変数Xの次数と同じ正方行列となります。
1/2*X'*H*X+f'*X
決定変数Xは (操作量*制御ホライズン) + 1 の長さのベクトルであるはずです。
この1がスラック変数に対応しています。
たとえば、操作量の数が1、制御ホライズンを2とした場合、決定変数の次数は3となります。
0 Comments
More Answers (0)
See Also
Categories
Find more on Refinement in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!