mpcCustomSolverを用いる場合のMIMOへの拡張に関して
1 view (last 30 days)
Show older comments
いつもお世話になっております。
自作のQPソルバーを用いて計算を行う場合について質問させていただきたくご連絡致しました。
【自作のQPソルバー】
function [X, status] = mpcCustomSolver(H,f,A,b,x0)
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
上記の自作のQPソルバーを用いて計算を行っており、操作量の数が1、制御量の数も1のSISO型のシミュレーションが行えることは確認しております。
しかし、MPCの変数を複数にした場合(MIMO型への拡張を行った場合) 以下のエラーが発生してしまします。
- Inner matrix dimensions must agree.
MPCのオブジェクトを作成に関してはツールボックスを用いてObjを作成し、そこにObj.Optimizer.CustomSolver = true; を実行しファイルを追加している状況です。
以上の問題を解決する手段として下記の質問に答えていただけると幸いです。
① MPCツールボックスで作成したObjに Obj.Optimizer.CustomSolver = true; でOptimizerのファイルを追加してもエラーはないのでしょうか。
② 上記のエラーは mpcCustomSolver(H,f,A,b,x0) のx, H, g, A, b, x0の変数がSISO型のままだからと推察されますが、操作量の数と制御量の数を増やすことは可能でしょうか?
尚、本モデルは操作量の数は6、制御量の数は6、外乱の数は30としております。
不明な点等がありましたら追加で質問していただけると嬉しいです。
大変お忙しい中恐縮ですがご回答いただければ幸いです。
2 Comments
Toshinobu Shintai
on 5 Oct 2020
私はcvxについては全く知りませんので、回答はできないのですが、方針としてまずは「MPCオブジェクトの設定」「カスタムソルバーの記述方法」「cvxの使い方」のどこに問題があるのか、切り分けをしてはどうでしょうか。
参考までに、私が以前作成したカスタムソルバーを添付します。こちらは操作量2、制御量2、外乱0で問題無く動作していました。
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!